在 bash 脚本中,如何检查“-e”是否设置?

在 bash 脚本中,如何检查“-e”是否设置?

set -e经常在脚本中使用,但有时,脚本中的一些命令失败是可以接受的。
我尝试检查是否set -e为 ON,但找不到方法 - 没有选项(我知道的)可以set提供当前值。
还尝试了这个:( 是的选项名称)和,没有运气。 我想检查选项是否已设置,这样我就可以暂时禁用我随着时间的推移构建的一些库函数(使用并在需要时重新应用)。类似的东西:set | grep errexiterrexit-eset | grep "-e"
errexitset +eset -e

if [ errexit is set ]; then
   ERR_EXIT=1
   set +e
fi
...
run some code that may fail
...
if [ "${ERR_EXIT}" = 1 ]; then
    set -e
fi

答案1

检查$-变量是否包含e

if [[ $- == *e* ]]

特殊参数在手册中。


对于 POSIX shell,case是用于模式匹配的内置工具

case $- in
*e*) doSomething ;;
esac

答案2

之内狂欢(但不是基本 sh),您可以使用shopt -o -p errexit。其输出可以存储,然后进行评估以恢复初始值。(如果设置了选项,它还将返回 0,否则返回 1。)

即使启用,errexit 在某些情况下也不会触发,例如如果失败的命令与||- 一起使用,例如,this_can_fail || true将允许您忽略该命令。

如果命令是if条件的一部分,它也不会触发,例如if ! this_can_fail; then echo "Warning: it failed"; fi

相关内容