ловушка сценария bash для выхода и err и логика разницы

У меня есть сценарий bash и хотелось бы добавить возможность ловушки для условий EXIT и ERR. Структура в настоящее время

trap cleanup EXIT function notify(reason) {} function build {} function dbops {} function deploy {} function cleanup {} notify('start') \ && build \ && dbops \ && deploy \ && notify('finished'); 

Каков рекомендуемый способ добавления в ловушку для ошибки и (необязательно) захватить причину выхода и отправить ее через функцию уведомления? Сейчас вся очистка – это удаление файла блокировки на EXIT.

Я хочу, чтобы отправить сообщение notify(reason) на провал, если скрипт неожиданно завершился, но не отправил его на обычный EXIT.

Является ли моя цепочка выполнения вмешательством в правильное улавливание ошибок?

One Solution collect form web for “ловушка сценария bash для выхода и err и логика разницы”

Вы не можете ловить ошибки с trap ... ERR в командах, у которых их код выхода проверен. В вашем конкретном случае, с страницы bash man:

Ловушка ERR не выполняется, если неудавшаяся команда является … частью команды, выполняемой в && или || список, за исключением команды, следующей за окончательным && …

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

  • Предотвращение распространения SIGINT для родительского процесса
  • Сценарии оболочки, связанные с трубой: прерывание ловушки одного скрипта
  • Безмоментный запуск задачи в фоновом режиме
  • Сбросить STDOUT FD в ловушку
  • Linux и Unix - лучшая ОС в мире.