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