我有一個 bash 腳本,想加入捕捉 EXIT 和 ERR 條件的功能。目前的結構是
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 陷阱列出最後 && 後面的命令除外 ...
一般來說,保證清理一組函數的最簡單方法是在子 shell 中執行它們,無論它如何退出,您仍然可以進行清理。