EXITおよびERR条件をキャプチャする機能を追加したいbashスクリプトがあります。現在の構造は
trap cleanup EXIT
function notify(reason) {}
function build {}
function dbops {}
function deploy {}
function cleanup {}
notify('start') \
&& build \
&& dbops \
&& deploy \
&& notify('finished');
エラートラップを追加し(オプションで)終了理由をキャプチャして通知機能を介して送信する推奨方法は何ですか?これで、すべてのクリーンアップ操作は、終了時にロックファイルを削除することです。
notify(reason)
スクリプトが予期せず失敗した場合は、Slackにメッセージを送信できるようにしたいが、正常に終了することはできません。
私の実行チェーンがエラーを正しく捕捉するのを妨げますか?
答え1
trap ... ERR
終了コードをテストしたコマンドはエラーをキャッチできません。場合によっては、bash のマニュアルページで以下を実行します。
失敗したコマンドが…&&または||内部で実行されるコマンドの一部である場合、最後の&&...の後にリストされているコマンドを除いて、ERRトラップは実行されません。
一般に、関数セットがクリーンアップされることを保証する最も簡単な方法は、関数がどのように終了してもまだクリーンアップできるようにサブシェルで実行することです。