Как запустить команду только после того, как предыдущая команда не удалась в 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-страницу своей оболочки.

  • Чтение пользовательского ввода с чтением
  • встроенные условия для назначения
  • Как преобразовать данные с разделителями табуляции в данные с разделителями-запятыми?
  • Доступ к вторичным переменным
  • Извлечение строки из команды fdisk
  • Возникли проблемы с базовым, если это утверждение
  • Почему программированию на C не нужны сценарии компилятора и оболочки?
  • Простая, если команда не работает в скрипте csh
  • Сценарий Bash не будет работать в текущем каталоге
  • Извлечь имя файла из другого имени файла.
  • Создавать древовидную структуру каталога клонирования и копировать файлы в соответствующие каталоги, измененные после определенной даты
  • Сценарий Bash для обнаружения загруженных файлов триггеров много раз для одного файла
  • Interesting Posts

    dd не использовать все дисковое пространство

    команда watch не показывает цвета для статуса git

    необходимо переделать логические тома

    Как заменить один символ другим во всех именах файлов текущих каталогов?

    Как отдать и вернуть часть матча?

    как перейти на архитектуру докеров?

    Сделать переключатель CapsLock между текстовым вводом и навигацией

    Является ли мой SSH-ключ сопряжен со мной как с человеком или с моей учетной записью пользователя на одной машине?

    Как проверить нетерпимость версии TLS?

    Завершение Zsh, включение shift-tab

    logrotate не может вращать журналы: владелец ошибки

    Debian – Как изменить цвета фона терминала

    Тестирование, если файлы начинаются с определенных букв и не содержат специального символа, за исключением периода в конце рядом с расширением файла в сценарии оболочки

    Возможно ли монтировать файл с разными правами собственности / разрешениями?

    Лучший способ обработки большого количества почты на сервере?

    Linux и Unix - лучшая ОС в мире.