如何在 bash 中仅在前一个命令失败后才运行命令?

如何在 bash 中仅在前一个命令失败后才运行命令?

我们使用 && 运算符在前一个命令完成后运行命令。

update-system-configuration && restart-service

但是仅当上一个命令不成功时如何运行命令?

例如,如果我必须更新系统配置并且失败,我需要向系统管理员发送邮件吗?

编辑:来吧,这不是控制操作员的重复问题。这将帮助那些专门搜索这个问题的用户,我知道控制运算符的答案也会回答这个问题,但是专门搜索如何处理不成功命令的人不会直接到达那里,否则我会在问这个问题之前到达那里问题。

答案1

&&仅当前面的命令成功时才执行后面的命令。 ||则相反:

update-system-configuration || echo "Update failed" | mail -s "Help Me" admin@host

文档

man bash

AND 和 OR 列表是由 && 和 || 分隔的多个管道之一的序列。分别控制运算符。 AND 和 OR 列表以左关联性执行。 AND 列表的形式为

command1 && command2

当且仅当 command1 返回退出状态为零时,command2 才会执行。

OR 列表的形式为

command1 || command2

当且仅当 command1 返回非零退出状态时,command2 才会执行。 AND 和 OR 列表的返回状态是列表中最后执行的命令的退出状态。

答案2

当“成功”时,您的意思是它返回0,然后简单地测试它:

if ! <command>; then
    <ran if unsuccessful>
fi

这样做的原因是因为作为标准,如果出现问题,程序应该返回非零,如果成功则返回零。

或者,您可以测试返回变量$?

<command>
if [ $? -ne 0 ]; then
    <ran if unsuccessful>
fi

$?保存最后一个命令的返回码。

现在,if通常是 shell 内置命令。因此,根据您使用的 shell,您应该检查 shell 的手册页。

相关内容