我已经set -e
打开了我的脚本。唯一的事情是这里有一个命令,我不希望导致脚本在失败时退出,但我希望其他所有命令都这样做。set -e
当抛出错误代码时,如何继续运行而不让脚本退出?
有问题的脚本:
native=$(pacman -Qenq -)
如果 stdin 具有非本机包名称,则会将错误代码写入 stdin。
答案1
set -e
akaset -o errexit
不适用于作为条件一部分的命令,例如:
if cmd; do
until cmd; do
while cmd; do
cmd || whatever
cmd && whatever
这也适用于ERR
支撑它的炮弹陷阱。
因此,忽略命令失败的惯用方法是:
cmd || : errors ignored
要不就:
cmd || true
cmd || :
这将取消set -e
该cmd
调用并设置为 0(失败时$?
为:
/的调用 )true
cmd
cmd && true
ret=$?
也取消set -e
但保留 的退出状态cmd
。
答案2
> var=
> : ${var:=foo}
> echo "$var"
foo