我在几个地方(包括SO)读过-e
被认为是“糟糕的形式”,并且在任何错误退出脚本时都不可靠。处理错误的更好方法似乎是使用trap
,因此:
trap "echo there was an error; exit 1;" ERR
我似乎无法在手册页中找到ERR
实际上是什么信号?我假设它是SIGQUIT
,但我无法确定。
man 7 signal
只有您期望的正常信号SIGTERM SIGQUIT SIGINT
等。
man trap
引用ERR
信号,但似乎没有定义它。
ex:“A trap on ERR, if set, is executed before the shell exits.
”
man bash
类似于man trap
,因为它引用了ERR
,但没有根据我所见的来定义它。
快捷方式ERR
背后的实际信号是什么? (在man 7 signal
中看到的正常信号中)。
我更喜欢捕获实际的信号名而不是速记版,尽管我意识到它们会产生相同的结果(从脚本中的命令中捕获任何错误然后抛给处理程序)。
答案 0 :(得分:4)
没有与trap
信号规范ERR
对应的信号。
ERR
是bash
内部实施的信号规范之一。 [注1]如果启用了trap ERR
,那么bash将在完全相同的情况下调用相应的处理程序,就像启用set -e
时一样。 (因此,它不再比set -e
更“可靠”,但它更灵活。)
与任何信号不对应的其他特殊trap
名称为EXIT
,DEBUG
和RETURN
。
help trap
将解释这些信号规范的含义。
备注:强>
bash
实现的,但大部分是通过bash
捕获信号然后执行信号处理程序来实现的。特殊的只涉及执行信号处理程序。