3 回答
TA贡献1836条经验 获得超13个赞
解决方案:
particular_script || true
例:
$ cat /tmp/1.sh
particular_script()
{
false
}
set -e
echo one
particular_script || true
echo two
particular_script
echo three
$ bash /tmp/1.sh
one
two
three 将永远不会打印。
另外,我想补充一点,当pipefail打开时,如果管道中的命令之一具有非零退出代码(pipefail关闭该命令必须是最后一个),shell认为整个管道具有非零退出代码就足够了。
$ set -o pipefail
$ false | true ; echo $?
1
$ set +o pipefail
$ false | true ; echo $?
0
TA贡献1898条经验 获得超8个赞
不要停止并保存退出状态
万一您希望脚本在特定命令失败时不停止,并且还希望保存失败命令的错误代码,以防万一:
set -e
EXIT_CODE=0
command || EXIT_CODE=$?
echo $EXIT_CODE
TA贡献1820条经验 获得超2个赞
更简洁地说:
! particular_script
从POSIX规范中set -e(重点是):
启用此选项时,如果简单命令由于“ Shell错误的后果”中列出的任何原因而失败,或者返回退出状态值> 0,并且在一段时间,直到或if关键字之后,则不属于复合列表的一部分,并且不是AND或OR列表的一部分,也不是前面带有!的管道。保留字,然后外壳应立即退出。
- 3 回答
- 0 关注
- 475 浏览
添加回答
举报