Fish Shell: как интерпретировать реакцию мерзавца? - PullRequest
0 голосов
/ 16 октября 2019

Для моей рабочей среды в настоящее время я создаю сценарий, чтобы легко переключаться между ветками разработки и выпуска. К сожалению, репо не всегда имеют одинаковое имя ветви, поэтому я проверяю, существует ли ветка и была ли ветка уже объединена с мастером. Если ветвь не была объединена с master, я знаю, что у меня последняя ветвь релиза.

        set repo_has_changes (git status --porcelain --untracked-files=no)

        if test -n $repo_has_changes
            echo 'Repo has changes...'
        else
            git checkout master

            for b in $releaseVersions
                set branch_on_origin (git branch -r --list origin/$b)
                set branch_not_merged_to_master (git branch -r --list --no-merged master origin/$b)

                if test -n $branch_on_origin
                    if test -z $branch_not_merged_to_master
                        git checkout $b
                        git pull
                        break
                    end
                end
            end
        end

Из-за своего невежества я думал, что я сохраню результат моей команды git и сохраню его в переменной. Я интерпретировал это как строку. Согласно документации рыбы, я могу проверить, не является ли строка ненулевой.

-n STRING возвращает true, если длина STRING не равна нулю.

Этоскрипт всегда будет отображать «Репо имеет изменения ...», в то время как я уверен на 100%, что изменений нет. Если я отображаю $ repo_has_changes, я вижу пустую строку. Также, если я проверяю длину строки (на случай, если строка возвращает пробелы? XD), она также возвращает пустую строку. Поэтому моё предположение, что $ repo_has_changes - это строка, может быть неверным. Также я не уверен, что смогу сохранить результат git таким способом. К сожалению, я не смог найти хороший источник для этого.

1 Ответ

3 голосов
/ 16 октября 2019

К сожалению, test от fish - это одна из немногих частей, которые следуют за буквой POSIX, и это указывает, что test с любым одним аргументом должен возвращать true, чтобы облегчить использование типа test "thestring". К сожалению, это также означает, что test -n должен возвращать true.

Что действительно означает, что вам нужно заключить в кавычки любую переменную, которую вы передаете test:

test -n "$branch_on_origin"

и

test -z "$branch_not_merged_to_master"
...