Я хочу сделать что-то вроде:
if [[ git status &> /dev/null ]]; then
echo "is a git repo";
else
echo "is not a git repo";
fi
за исключением того, что я не знаю, как сделать проверку состояния выхода. Как это исправить?
Спасибо
Я хочу сделать что-то вроде:
if [[ git status &> /dev/null ]]; then
echo "is a git repo";
else
echo "is not a git repo";
fi
за исключением того, что я не знаю, как сделать проверку состояния выхода. Как это исправить?
Спасибо
Переменная $?
содержит код возврата последних команд
ОБНОВЛЕНИЕ: точный пример:
git status &> /dev/null
if [ $? -eq 0 ]; then
echo "git status exited successfully"
else
echo "git status exited with error code"
fi
Просто так
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"
Другой формой, которую я часто использую, является следующая:
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
из других ответов.