Один быстрый способ сделать выполнение одной программы зависимым от успеха другой - использовать &&
. (все команды ниже - псевдокод)
first-cmd && second-cmd
В этом случае second-cmd будет выполняться, только если first-cmd возвращает true.
Аналогично, вы можете проверить на отказ и предпринять соответствующие действия, используя ||
bad-cmd || echo "failed"
Вы можете комбинировать их различными способами:
good-cmd && echo "succeeded" || echo "failed"
bad-cmd || {
recovery-cmd ||
echo "recovery failed &&
echo "recovered"
}
Конечно, часто яснее использовать специальную переменную $?
, которую заметили другие.
Вам часто нужно перенаправлять сообщения об ошибках на /dev/null
или записывать их в переменную.
bad-cmd 2>/dev/null # send error message to the bit bucket
var=$(good-cmd) # capture stdout
var=$(bad-cmd 2>&1) # capture stdout and stderr
var=$(bad-cmd 2>&1 >/dev/null) # capture only stderr
Затем вы можете обработать текст ошибки, чтобы получить дополнительную информацию для условного действия в вашем коде.
См .: Захватить вывод в переменную и Как перенаправить stderr в канал?