bash-скрипт ловушка для выхода и ошибки и логика для разницы

bash-скрипт ловушка для выхода и ошибки и логика для разницы

У меня есть скрипт 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)сообщение в Slack, если скрипт неожиданно завершается сбоем, но не отправлять его при обычном ВЫХОДЕ.

Будет ли моя цепочка выполнения мешать правильному обнаружению ошибок?

решение1

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

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

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

Связанный контент