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

  • Повторная команда с разными именами файлов
  • Как защитить скрипт sudo
  • Потрясающее поведение округления с печатью
  • Как сравнить две даты в скрипте для проверки истечения срока действия
  • aliasing cd to pushd - это хорошая идея?
  • Как использовать namedpipe как временный файл?
  • передавать файл в удаленный каталог только в том случае, если он не существует без замены
  • Как узнать общие элементы между двумя файлами?
  • Создание имени базы данных MySQL с использованием переменной с даты
  • переменная конкатенация не работает?
  • Как разобрать этот вывод и поместить его в массив?
  • Interesting Posts

    есть ли инструмент с открытым исходным кодом для измерения производительности процессора?

    Как установить adobe reader-enu в 64-разрядный Debian 8.5?

    Ошибка ввода-вывода для члена RAID5. Что делать с плохими блоками?

    RHEL 7 не загружается хорошо, но все еще доступен

    Установите выравнивание числовых столбцов при разделении данных

    Как отключить постоянное выделение всех фигурных скобок (а не только пар) в vim

    Я не могу успешно сгенерировать SSH-туннель внутри контейнера докеров

    Команда, которая возвращает либо идентификатор процесса, если работает, либо какой-либо другой результат, если нет?

    / proc / PID / единицы измерения sched

    Сохранять коды выхода при захвате SIGINT и тому подобное?

    Можно ли вызвать сценарий службы внутри внутри init.d при запуске и завершении работы?

    Проверить количество слов в файле, содержащем конкретную букву

    какая оболочка будет использовать sudo для выполнения сценария оболочки без строки shebang

    эффективный дождаться загрузки NAS для его монтирования

    Есть ли простой способ переместить подкаталоги btrfs в другую файловую систему btrfs?

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