我使用以下选项

set -o pipefail
set -e

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

但是对于一个特定的命令,我想忽略这个错误。我该怎么做呢?


当前回答

只需在希望忽略错误的命令后添加|| true。

其他回答

除了“返回true”,您还可以使用“noop”或null实用程序(在POSIX规范中提到):并且只是“什么都不做”。你可以省下几个字母。:)

#!/usr/bin/env bash
set -e
man nonexistentghing || :
echo "It's ok.."

更简洁:

! particular_script

关于set -e的POSIX规范(我强调一下):

当该选项打开时,如果一个简单命令由于Shell错误的后果中列出的任何原因而失败,或者返回一个退出状态值>0,并且不在while、until或if关键字后面的复合列表中,不在and或or列表中,并且不是前面有!保留字,则shell应立即退出。

感谢上面的简单解决方案:

<particular_script/command> || true

以下结构可用于脚本步骤的其他操作/故障排除和其他流控制选项:

if <particular_script/command>
then
   echo "<particular_script/command> is fine!"
else
   echo "<particular_script/command> failed!"
   #exit 1
fi

如果需要,我们可以停止进一步的操作并退出1。

虽然|| true是首选之一,但你也可以这样做

var=$(echo $(exit 1)) # it shouldn't fail

不要停止,也保存退出状态

以防万一,如果你想让你的脚本不停止,如果一个特定的命令失败,你也想保存失败命令的错误代码:

set -e
EXIT_CODE=0
command || EXIT_CODE=$?
echo $EXIT_CODE