首页 > 解决方案 > 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等一样。

标签: bashsignalsbash-trap

解决方案


将 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

推荐阅读