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 trap
in that is 引用ERR
但没有根据我所看到的来定义它。
捷径背后的实际信号是什么ERR
?(在正常信号中,如 中所示man 7 signal
)。
我更喜欢捕获实际的信号名称而不是速记版本,尽管我意识到它们会产生相同的结果(从脚本中的命令捕获任何错误,然后抛出到处理程序)。
没有对应于trap
信号规范的信号ERR
。
ERR
是内部实现的信号规范之一bash
。[注 1] 如果trap ERR
启用,那么 bash 将在与set -e
启用时退出时完全相同的情况下调用相应的处理程序。(因此,它不再“可靠”,set -e
但它更加灵活。)
其他trap
不对应任何信号的特殊名称是EXIT
、DEBUG
和RETURN
。
help trap
将解释这些信号规格的含义。
笔记:
bash
,但大多数是通过bash
捕获信号然后执行信号处理程序来实现的。特殊的只涉及执行信号处理程序。