pyt*_*hor 24 bash command-line
在 中bash,我有时想串行运行多个命令,不想在键入新命令之前等待它们完成。所以我做这样的事情:
cmd1; cmd2; cmd3
不幸的是,其中一个命令可能会失败。在这种情况下,我想停下来。有没有一种简单的方法可以做到这一点,但是如果前一个命令的退出代码为 0,那么我只能继续运行这些命令?
uli*_*tko 41
使用&&运算符,
cmd1 && cmd2 && cmd3
Run Code Online (Sandbox Code Playgroud)
在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可以解释为“execute cmd1, OR IF it failed, cmd2”。
提示:对于更长的 链&&,请考虑放入set -e您的脚本。它基本上将分号更改;为&&,有一些特殊情况。
小智 13
“链接命令将它们分组”
ping 192.168.0.1 || { echo "ping not successful"; exit 1; }
Run Code Online (Sandbox Code Playgroud)
pings,仅当不成功时,才会执行括号中的链接命令组。
注意力:
列表必须以“;”结尾。
括号和分组命令之间必须有空格!
只需与&&运营商。例如:
cmd1 && cmd2 && cmd3
Run Code Online (Sandbox Code Playgroud)
如果其中一个命令失败(返回 0 以外的退出值),则其他命令将不会运行。
| 归档时间: |
|
| 查看次数: |
15242 次 |
| 最近记录: |