使用带有 ERR 的陷阱:如何发送 $?

使用带有 ERR 的陷阱:如何发送 $?

在 bash 4.x 中如果我有:

err_handler() {
    echo You received error $1|mail -s "script error" MAILTO
}

trap err_handler ERR

调用陷阱时如何将实际的 stderr 输出发送到函数?我想避免必须在每一行上放置逻辑来重定向 stderr,我认为这就是陷阱的要点。

答案1

无法追溯捕获错误输出,因为当命令以非零退出状态返回时,输出已经完成。但是,您可以通过发出命令将脚本的所有 stderr 输出从开头重定向到文件

exec 2>/some/file

在脚本的开头。这种无命令形式exec将重定向应用于当前 shell 进程。然后,如果出现错误,您可以发送该文件。

此方法的另一个优点是,如果发送邮件因任何原因失败,您仍然可以在本地查看该文件(当然,除非原因是该磁盘出现故障)。

相关内容