4

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

trap "echo there was an error; exit 1;" ERR

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

man 7 signal

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

man trap

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

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

man bash

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

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

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

4

1 回答 1

6

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

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

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

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


笔记:

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