bash 腳本退出和錯誤陷阱以及差異邏輯

bash 腳本退出和錯誤陷阱以及差異邏輯

我有一個 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 中執行它們,無論它如何退出,您仍然可以進行清理。

相關內容