В zsh, как мне сделать условие на статус выхода программы?
Я хочу сделать что-то вроде:
if [[ git status &> /dev/null ]]; then
echo "is a git repo";
else
echo "is not a git repo";
fi
за исключением того, что я не знаю, как сделать проверку состояния выхода. Как это исправить?
Спасибо
Ответ 1
Переменная $? содержит код возврата последних команд
ОБНОВЛЕНИЕ: точный пример:
git status &> /dev/null
if [ $? -eq 0 ]; then
echo "git status exited successfully"
else
echo "git status exited with error code"
fi
Ответ 2
Просто так
if git status &> /dev/null
then
echo "is a git repo";
else
echo "is not a git repo";
fi
Или в более компактной форме:
git status &> /dev/null && echo "is a git repo" || echo "is not a git repo"
Ответ 3
Другой формой, которую я часто использую, является следующая:
git status &> /dev/null
if (( $? )) then
desired behavior for nonzero exit status
else
desired behavior for zero exit status
fi
Это немного более компактно, чем принятый ответ, но не требует, чтобы вы помещали команду в ту же строку, что и в ответе gregseth (иногда это то, что вам нужно, но иногда становится слишком трудно читать).
Двойные скобки предназначены для математических выражений в zsh. (Например, см. здесь.)
Редактировать: Обратите внимание, что синтаксис (( expression )) соответствует обычному соглашению большинства языков программирования: ненулевые выражения оцениваются как истина, а ноль - как ложь. Другие альтернативы ([ expression ], [[ expression ]], if expression, test expression и т.д.) Следуют обычному соглашению оболочки: 0 (без ошибок) оценивается как истинное, а ненулевые значения (ошибки) оцениваются как ложные. Поэтому, если вы используете этот ответ, вам необходимо переключить предложения if и else из других ответов.