Bash 忽略特定命令的错误

新手上路,请多包涵

我正在使用以下选项

set -o pipefail
set -e

在 bash 脚本中停止执行错误。我有大约 100 行脚本正在执行,我不想检查脚本中每一行的返回码。

但是对于一个特定的命令,我想忽略该错误。我怎样才能做到这一点?

原文由 Vivek Goel 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 2.3k
2 个回答

解决方案:

 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 开启时,当管道中的命令之一具有非零退出代码时,shell 认为整个管道具有非零退出代码就足够了(使用 pipefail 关闭它必须是最后一个)。

 $ set -o pipefail
$ false | true ; echo $?
1
$ set +o pipefail
$ false | true ; echo $?
0

原文由 Igor Chubin 发布,翻译遵循 CC BY-SA 4.0 许可协议

只需在要忽略错误的命令后添加 || true 即可。

原文由 Lars Kotthoff 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题