Zer*_*ase 2 bash error-handling command-substitution set
我已经set -e为我的脚本打开了。唯一的事情是这里有一个命令,我不想让脚本在失败时退出,但我希望其他所有东西都能做到这一点。set -e当抛出错误代码时,我如何继续,而不让我的脚本退出?
有问题的脚本:
native=$(pacman -Qenq -)
Run Code Online (Sandbox Code Playgroud)
如果 stdin 具有非本地包名称,则会将错误代码写入 stdin。
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 -e该cmd调用并且还设置$?为0(到的:/true时cmd 失败)
cmd && true
ret=$?
Run Code Online (Sandbox Code Playgroud)
也取消set -e但保留 的退出状态cmd。