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

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

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

有问题的脚本:

native=$(pacman -Qenq -)

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

答案1

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

if cmd; do
until cmd; do
while cmd; do
cmd || whatever
cmd && whatever

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

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

cmd || : errors ignored

要不就:

cmd || true
cmd || :

这将取消set -ecmd调用并设置为 0(失败时$?:/的调用 )truecmd

cmd && true
ret=$?

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

答案2

> var=
> : ${var:=foo}
> echo "$var"
foo

相关内容