![使用带有 ERR 的陷阱:如何发送 $?](https://linux22.com/image/36648/%E4%BD%BF%E7%94%A8%E5%B8%A6%E6%9C%89%20ERR%20%E7%9A%84%E9%99%B7%E9%98%B1%EF%BC%9A%E5%A6%82%E4%BD%95%E5%8F%91%E9%80%81%20%24%EF%BC%9F.png)
在 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 进程。然后,如果出现错误,您可以发送该文件。
此方法的另一个优点是,如果发送邮件因任何原因失败,您仍然可以在本地查看该文件(当然,除非原因是该磁盘出现故障)。