ERR 背后的实际信号是什么

Sna*_*Doc 3 linux error-handling bash signals bash-trap

我在几个地方(包括 SO)读过-e被认为是“糟糕的形式”并且在出现任何错误时退出脚本是不可靠的。处理错误的更好方法似乎是使用trap,例如:

trap "echo there was an error; exit 1;" ERR
Run Code Online (Sandbox Code Playgroud)

我似乎无法在手册页中找到ERR实际信号是什么?我假设它是,SIGQUIT但我无法确定。

man 7 signal
Run Code Online (Sandbox Code Playgroud)

只有您期望的正常信号SIGTERM SIGQUIT SIGINT等。

man trap
Run Code Online (Sandbox Code Playgroud)

有对ERR信号的引用,但似乎没有定义它。

例如:“ A trap on ERR, if set, is executed before the shell exits.

man bash
Run Code Online (Sandbox Code Playgroud)

类似于man trapin that is 引用ERR但没有根据我所看到的来定义它。

捷径背后的实际信号是什么ERR?(在正常信号中,如 中所示man 7 signal)。

我更喜欢捕获实际的信号名称而不是速记版本,尽管我意识到它们会产生相同的结果(从脚本中的命令捕获任何错误,然后抛出到处理程序)。

ric*_*ici 5

没有对应于trap信号规范的信号ERR

ERR是内部实现的信号规范之一bash。[注 1] 如果trap ERR启用,那么 bash 将在与set -e启用时退出时完全相同的情况下调用相应的处理程序。(因此,它不再“可靠”,set -e但它更加灵活。)

其他trap不对应任何信号的特殊名称是EXITDEBUGRETURN

help trap 将解释这些信号规格的含义。


笔记:

  1. 实际上,所有的信号规范都是由 实现的bash,但大多数是通过bash捕获信号然后执行信号处理程序来实现的。特殊的只涉及执行信号处理程序。