Intereting Posts
Почему мои жесткие ссылки не обновляют друг друга? Сколько пакетов предлагает RHEL 6? Быстрый и грязный способ выполнения процесса более одного раза DNS Zone A запись для домена Является ли целью установить номер версии файла, используя chattr, подобный оптометрической блокировке в базе данных? Запуск плазмоида под NOTKDE (например, Fluxbox) – Plasma / DeviceNotifier Бэширование многопараметрического аргумента Установка / dev / dvd / media на VirtualBox Как добавить новую строку в текстовый файл на выходе из удаленного сценария оболочки с помощью plink Отключение генерации произвольной памяти в моих программах В чем разница между «dir» и «ls»? Можно ли использовать файловую систему overlay / union как временную дедупликацию? Есть ли побочные эффекты, когда два дистрибутива делят раздел подкачки? Как получится, когда x = abc, ] && echo yes || эхо не возвращается? Общий HTTP-сервер, который просто сбрасывает запросы POST?

ловушка сценария 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.

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

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

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

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