小编典典

Bash 忽略特定命令的错误

all

我正在使用以下选项

set -o pipefail
set -e

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

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


阅读 101

收藏
2022-03-06

共1个答案

小编典典

解决方案:

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
2022-03-06