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