Как запустить команду только после того, как предыдущая команда не удалась в bash?

Мы используем оператор && для запуска команды после завершения предыдущей.

update-system-configuration && restart-service 

но как выполнить команду только в том случае, если предыдущая команда не увенчалась успехом? Например, если мне нужно обновить конфигурацию системы, и если она не удалась, мне нужно отправить почту администратору системы?

Редактировать: Давай, это не дублирующий вопрос о операторах управления. Это поможет пользователям, которые ищут именно это, я понимаю, что ответ на контрольные операторы также ответит на этот вопрос, но люди, которые ищут конкретно способы обработки неуспешных команд, не дойдут туда напрямую, иначе я бы добрался туда, прежде чем задавать этот вопрос вопрос.

2 Solutions collect form web for “Как запустить команду только после того, как предыдущая команда не удалась в bash?”

&& выполняет команду, которая выполняется только в том случае, если команда, которая предшествует ей, выполняется успешно. || делает обратное:

 update-system-configuration || echo "Update failed" | mail -s "Help Me" admin@host 

Документация

От man bash :

И и OR – это последовательности одного из нескольких конвейеров, разделенных символами && и || соответственно. Списки AND и OR выполняются с левой ассоциативностью. Список AND имеет форму

 command1 && command2 

command2 выполняется, если и только в том случае, если command1 возвращает статус выхода из нуля.

Список OR имеет форму

 command1 || command2 

command2 выполняется тогда и только тогда, когда command1 возвращает ненулевой статус выхода. Возвращаемым статусом списков AND и OR является статус выхода последней команды, выполненной в списке.

Когда с «успешным» вы подразумеваете, что он возвращает 0 , просто попробуйте:

 if ! <command>; then <ran if unsuccessful> fi 

Причина, по которой это работает, заключается в том, что в качестве стандарта программы должны возвращать ненулевое значение, если что-то пошло не так, и нуль в случае успеха.

Кроме того, вы можете проверить возвращаемую переменную $? :

 <command> if [ $? -ne 0 ]; then <ran if unsuccessful> fi 

$? сохраняет код возврата из последней команды.

Теперь, if обычно это встроенная команда оболочки. Итак, в зависимости от того, какую оболочку вы используете, вы должны проверить man-страницу своей оболочки.

  • Каков наиболее эффективный способ регистрации ошибок сценария оболочки crontab с ошибкой?
  • Выполнять команду на нескольких секундах параллельно с помощью сценария оболочки
  • Как сгладить журналы для списка шаблонов и сделать из него отчет?
  • Узнайте, на какой строке в текстовом файле соответствует слово
  • Как использовать вставленные значения с помощью getopts
  • Выполнение команд с помощью сценария ssh и оболочки с использованием переменных на удаленной машине
  • Расширения файлов для сценариев unix shell
  • Когда и когда не использовать операторы с if?
  • Удаление старых файлов в каталоге, кроме файлов, присутствующих в файле исключений
  • Что делает «while test $ # -gt 0»?
  • Американский Fuzzy Lop запускает тестовую программу как непривилегированный пользователь или в chroot
  • Удалите символ ^ L (aka \ f / FF / form-feed / page-break)
  • Linux и Unix - лучшая ОС в мире.