У меня есть этот сценарий для проверки 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?
Попробуйте заменить
else if [[ $(git -C $parent status | grep ahead) ]]; then
на
else if git -C $parent status | grep ahead; then
Вы также можете добавить -q
в grep.
Это работает путем замены теста [[
голой командой. Последняя команда в конвейере ( grep
) завершается с истинным или ложным значением, в зависимости от того, нашла она что-либо или нет. Параметр -q
указывает ему возвращаться только с этим значением, а не печатать то, что он нашел.
Примечание: в вашем скрипте есть и другие ошибки, которые также необходимо исправить.
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 для справки.