打开 set -e 时防止 shell 退出?

Zer*_*ase 2 bash error-handling command-substitution set

我已经set -e为我的脚本打开了。唯一的事情是这里有一个命令,我不想让脚本在失败时退出,但我希望其他所有东西都能做到这一点。set -e当抛出错误代码时,我如何继续,而不让我的脚本退出?

有问题的脚本:

native=$(pacman -Qenq -)
Run Code Online (Sandbox Code Playgroud)

如果 stdin 具有非本地包名称,则会将错误代码写入 stdin。

Sté*_*las 7

set -eakaset -o errexit不适用于作为条件的一部分的命令,例如:

if cmd; do
until cmd; do
while cmd; do
cmd || whatever
cmd && whatever
Run Code Online (Sandbox Code Playgroud)

这也适用于ERR支持它的炮弹的陷阱。

因此,忽略命令失败的惯用方法是:

cmd || : errors ignored
Run Code Online (Sandbox Code Playgroud)

要不就:

cmd || true
cmd || :
Run Code Online (Sandbox Code Playgroud)

抵消set -ecmd调用并且还设置$?为0(到的:/truecmd 失败)

cmd && true
ret=$?
Run Code Online (Sandbox Code Playgroud)

也取消set -e但保留 的退出状态cmd