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 中运行它们,无论它如何退出,您仍然可以进行清理。

相关内容