我一直在我的脚本中使用类似这样的简单bash开头:
#!/bin/bash
set -e
与模块化/使用函数一起,今天它让我遇到了麻烦。
假设我在某个地方有一个函数,像这样
foo() {
#edit: some error happens that make me want to exit the function and signal that to the caller
return 2
}
理想情况下,我希望能够使用多个小文件,在其他文件中包含它们的函数,然后像这样调用这些函数:
set +e
foo
rc=$?
set -e
这对于仅有两层子例程的情况有效。但是如果foo也调用那样的子程序,返回之前的最后一个设置将为set -e
,这将使脚本在返回时退出 - 我无法在调用函数中覆盖此设置。因此,我必须做的是
foo() {
#calling bar() in a shielded way like above
#..
set +e
return 2
}
我觉得这非常反直觉(也不是我想要的-如果在某些情况下我想使用该函数而无需对抗故障,而在其他情况下我想处理清理怎么办?)最好的处理方式是什么?顺便说一句,我正在OSX上进行此操作,我还没有测试过在Linux上是否有不同的行为。
return 2
只在错误条件下执行。) - Michel Müller