6

我正在使用许多由 bash 脚本和其他工具构建的系统。通常,我认为使用 -e、-u 和 -o pipefail 选项来捕获错误情况并防止意外行为是一种很好的做法。

但是,一些第三方库(我可以更改其源代码)不这样做,并且不满意使用 -u 更改变量测试。

其中的脚本很可能是来源于未执行的。所以我想做的是在其中的一些中,设置一组更宽松的选项,然后恢复更严格的选项。由于有问题的脚本被许多用户使用,其中一些用户也遇到了同样的问题,我想将此更改放入第三方脚本中,即:

<preserve original options>
set +e +u +o pipefail
#do stuff like
if [ -n "$_UNSET_VAR" ] ; then
  cp <some stuff> <some other stuff>
fi
<restore original options (whatever they were)>

我正在寻找保存和恢复这些原件的方法。

4

1 回答 1

7

特殊参数$-包含当前设置的选项列表。-e您可以对其进行解析以查看是否-u已设置。对于pipefail,您必须解析shopt.

如果您可以在子 shell 中运行代码(您不尝试设置全局变量等),那么这样做可能会更容易,而不必担心重置原始状态。

(
    set +e +u +o pipefail
    if [ -n "$_UNSET_VAR" ]; then
       cp <some stuff> <some other stuff>
    fi
)
于 2012-11-21T14:18:32.087 回答