你怎么能问bash当前的选项



我正在使用许多由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)>

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

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

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

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

相关内容

  • 没有找到相关文章

最新更新