У меня есть скрипт 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 не выполняется, если невыполненная команда является ... частью команды, выполненной в списке && или ||, за исключением команды, следующей за последним && ...
Вообще говоря, самый простой способ гарантировать очистку набора функций — это запустить их все в подоболочке, и независимо от того, как она завершится, вы все равно сможете выполнить очистку.