如何在控制台上链接命令?

如何在控制台上链接命令?

在 中bash,我有时想连续运行几个命令,但不想等它们完成后再输入新命令。所以我会这样做:

cmd1; cmd2; cmd3

不幸的是,其中一个命令可能会失败。在这种情况下,我想停止。有没有一种简单的方法可以做到这一点,但要使我仅在前一个命令的退出代码为 0 时才继续运行命令?

答案1

使用&&运算符,

cmd1 && cmd2 && cmd3

在 shellscripting 中,&&||运算符是根据 C 中逻辑运算符的优化实现建模的。&&表示 AND 运算符,和||表示 OR。Unix 与 C 紧密相关,在 C 中,如果已经从第一个操作数知道结果,则不会对逻辑运算符的第二个操作数进行求值。例如,"false && x"对于false任何x,都不需要求值x(尤其是如果x是函数调用);对于 也是如此"true || x"。这也称为短路语义

在 Unix 中,传统上将命令的返回值解释为“成功完成”的真值:退出代码 0 表示true(成功),非零表示false(失败)。因此,当 中的第一个命令cmd1 && cmd2返回"false"(非零退出状态,表示失败)时,复合命令的状态是已知的:失败。因此 的整体解释cmd1 && cmd2 可能是:“执行cmd1,然后,如果没有失败,cmd2”。这正是您在问题中想要的。

与 OR 类似:cmd1 || cmd2可以解释为“执行cmd1,或者如果失败,cmd2”。


专家提示:对于较长的链&&,考虑放入set -e在您的脚本中。它基本上将分号更改;&&,但有几个特殊情况。

答案2

“链接命令并对其进行分组”

ping 192.168.0.1 || { echo "ping not successful"; exit 1; }

ping 仅当不成功时才执行括号中的链接命令组。

注意力:

该列表必须以“;”终止。

括号和分组命令之间必须有空格!

答案3

只需使用&&操作员即可。例如:

cmd1 && cmd2 && cmd3

如果其中一个命令失败(返回除 0 以外的退出值),则其他命令将不会运行。

相关内容