Мой канал не работает в моем операторе if

У меня есть этот сценарий для проверки git status для всех моих репозиториев:


find / -type d -name .git 2>&- | 
while read gitFolder; do
    if [[ $gitFolder == *"/Temp/"* ]]; then
        continue;
    fi
    if [[ $gitFolder == *"/Trash/"* ]]; then
        continue;
    fi
    if [[ $gitFolder == *"/opt/"* ]]; then
        continue;
    fi
    parent=$(dirname $gitFolder);
    if [[ `git -C $parent status --porcelain` ]]; then
        echo "";
        echo $parent;
        git -C $parent status --porcelain
    else if [[ $(git -C $parent status | grep ahead) ]]; then
        echo "";
        echo "$parent is not pushed yet";
    fi
done 

Но он не работает. Если я удалю второй else- блок , тогда он работает.

В основном я хочу знать, есть ли в репозитории git какие-либо изменения (во-первых, если) или он опережает главный (во-вторых, если).

Как мне изменить это второе условие if?

-2
задан 16 August 2021 в 14:15

2 ответа

Попробуйте заменить

    else if [[ $(git -C $parent status | grep ahead) ]]; then

на

    else if git -C $parent status | grep ahead; then

Вы также можете добавить -q в grep.

Это работает путем замены теста [[ голой командой. Последняя команда в конвейере ( grep ) завершается с истинным или ложным значением, в зависимости от того, нашла она что-либо или нет. Параметр -q указывает ему возвращаться только с этим значением, а не печатать то, что он нашел.

Примечание: в вашем скрипте есть и другие ошибки, которые также необходимо исправить.

-1
ответ дан 20 August 2021 в 10:26

The Bash если ... иначе если ...Оператор else принимает следующую форму:

if CONDITION1; then
  STATEMENTS1
elif CONDITION1; then
  STATEMENTS2
else
  STATEMENTS3
fi

Конкретная ошибка в вашем скрипте - это использование неверного ключевого слова else if вместо правильного elif .

Если CONDITION1 оценивается как True, STATEMENTS1 будет выполнен. Если CONDITION2 оценивается как True, STATEMENTS2 будет выполнен. Если ни одна из тестовых команд не оценивается как True, выполняется CONDITION3.

Условия оцениваются последовательно. Как только условие возвращает True, остальные условия не выполняются, и управление программой перемещается в конец операторов if.

В операторе может быть одно или несколько предложений elif.

Предложение: вы можете установить пакет shellcheck , чтобы проверить свой код на bash. См. https://github.com/koalaman/shellcheck для справки.

2
ответ дан 20 August 2021 в 10:26

Другие вопросы по тегам:

Похожие вопросы: