bash - Bash:从刚刚被捕获的错误中获取消息
问题描述
Bash 允许您捕获信号。有没有办法真正获得在特定信号(原因)之前立即打印的消息?我对此ERR
特别感兴趣。我知道并非所有信号都与消息相关联。只是想知道 bash 本身在引发错误时是否设置了变量或其他东西。
示例代码:
#!/bin/bash
# Running bash 5.0
handler () {
echo "Handling the error"
exit 0
}
trap handler ERR
notacommand
上面的代码将打印:
./example.sh: line 11: notacommand: command not found
有没有办法在处理程序中看到这条消息?
编辑:我知道我可以将所有输出保存到一个文件中,然后在发生错误时读取该文件的尾部。这对我来说似乎有问题,因为写入文件的最后一条消息可能不是错误(特别是如果&
脚本中启动了任何子进程)。我希望 bash 可能会设置一个 var 或其他东西,就像它设置$1
, $?
,$RANDOM
等一样。
解决方案
将 bash 的 stderr 重定向到一个文件:
#!/bin/bash
# Running bash 5.0
log="error.txt"
exec 2>"$log"
handler () {
echo "Handling this error: $(< "$log")"
exit 0
}
trap "handler" ERR
trap "rm $log" EXIT
notacommand
输出:
处理此错误:./example.sh: line 15: notacommand: command not found
推荐阅读
- bash - 如何修复 bash 的无效标识符?
- shiny - ObserveEvent 没有按照我想要的方式运行代码
- powershell - VSCode Intellisense 和 powershell 终端反应强烈延迟
- flutter - 在 Flutter 团队的 webview 中禁用捏合缩放
- google-apps-script - 在模态对话框中显示来自谷歌驱动器文件夹的文件列表
- jmeter - 使用 Jmeter 为多个用户凭据生成 OAuth 令牌
- c# - 为什么将 .NET Framework System.* 依赖项添加为 nuget 包?
- java - java动态代理和普通java类有什么区别?
- wordpress - 如何为每个循环获取attribute_weight?
- mysql - 获取 DateRange List Mysq Betweenl start_date 和 end_date