你如何向bash询问当前的选择?

Dan*_*ple 6 linux bash shell

我正在使用由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)>
Run Code Online (Sandbox Code Playgroud)

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

che*_*ner 7

特殊参数$-包含当前设置的选项列表.您可以分析,看是否-e-u设置.因为pipefail,你将不得不解析输出shopt.

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

(
    set +e +u +o pipefail
    if [ -n "$_UNSET_VAR" ]; then
       cp <some stuff> <some other stuff>
    fi
)
Run Code Online (Sandbox Code Playgroud)