在终端中使用 bash 时,通常必须运行源脚本。在这种情况下,必须通过“return”来终止脚本,而不是通过“exit”来终止,以免杀死基本 shell。
作为普通用户,我可以以某种方式完成该选项 -e 以应用“返回”而不是“退出”。
问候
安东·韦塞尔
答案1
是的,设置errexit
shell 选项set -e
将使当前 shell 在命令以非零退出状态终止时立即退出(除非该命令是 AND/OR 列表等的一部分)
这意味着您不能“从外部”导致源脚本在出现第一个错误时停止执行set -e
。
然而,在bash
shell 中发生的另一件事(当set -e
本应触发时)是任何ERR
陷阱都会执行。这允许我们设置一个陷阱,只执行return
.
$ cat script
echo hello
false
echo bye
$ . ./script
hello
bye
我们希望上面的脚本在执行时停止执行false
。我们通过为 设一个陷阱来做到这一点ERR
。在使用之前,陷阱首先会自行取消设置return
。如果陷阱没有自行取消设置,我们会收到来自 shell 的抱怨,抱怨尝试在return
不处于函数或源脚本中的情况下运行。这是由于源脚本的非零返回状态导致陷阱第二次激活。
$ trap 'trap - ERR;return' ERR
$ . ./script
hello
$ echo "$?"
1
请注意,每次获取脚本时,我们都必须设置陷阱。