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