在 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 进程。然后,如果出现错误,您可以发送该文件。
此方法的另一个优点是,如果发送邮件因任何原因失败,您仍然可以在本地查看该文件(当然,除非原因是该磁盘出现故障)。