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に送信できるようにしたいのですが、通常のEXITでは送信しません。
私の実行チェーンは、エラーの適切なトラップを妨げるのでしょうか?
終了コードがテストされているコマンドのtrap ... ERR
でエラーをキャッチすることはできません。あなたの特定のケースでは、bashのmanページから:
失敗したコマンドが&&または||で実行されたコマンドの一部である場合、ERRトラップは実行されません。最後の&& ..に続くコマンドを除くリスト.
一般的に、一連の関数のクリーンアップを保証する最も簡単な方法は、それらすべてをサブシェルで実行することですが、終了してもクリーンアップを実行できます。