当前位置: 首页>>技术教程>>正文


哪一个更好:使用;或&&在一行中执行多个命令?

, ,

问题描述

在教程和how-to中,我经常看到命令的组合。例如,

sudo apt-get update && sudo apt-get install pyrenamer

似乎有四种可能的连接器:&&&||;。虽然&连接器对我来说很清楚(它向后台发送进程并使终端可用),但不清楚&&;之间的区别。在Kaya的评论之前我不知道||

以下问题处理两个连接器之间的差异,但主要在评论中这样做:

所以这里有一些相关的问题:

  1. ;&&有什么区别?

  2. 你应该什么时候分别使用它们?看到一些用例会很高兴:如果我想运行一个命令,然后关闭计算机,我应该选择哪个连接器?

  3. 他们的优点和危险是什么? Robie Basak在对this answer的评论中提到,例如,如果命令链中的第一个元素失败,像cd /somewhere_else; rm -Rf *这样的命令可能会产生破坏性后果。

  4. 如果相关,他们从哪里来?

最佳解决方法

cheatsheet文件:

A; B    Run A and then B, regardless of success of A
A && B  Run B if A succeeded
A || B  Run B if A failed
A &     Run A in background.

次佳解决方法

如果第一个命令以状态0退出(成功),则&&仅运行第二个命令。即使第一个命令以非零状态退出,;也会运行这两个命令。

您的&&示例可以等同地解释为

if sudo apt-get update ; then
    sudo apt-get install pyrenamer
fi

第三种解决方法

无论第一个命令是否成功,使用;都将执行命令。

仅当第一个命令成功执行(状态0)时才使用&&执行第二个命令。

两者都用于不同的角度。就像一个更长的过程一样,对于需要编译和安装的安装来说。你应该make && make install。所以只有在make成功的情况下安装才会运行。

因此,对于从属命令,您应该使用&&

使用;或使用独立命令执行命令bash或命令

因此,如果您想关闭计算机,即使第一个作业失败,也可以使用;,但如果想在第一个作业完成时启动关闭,请使用&&

第四种方法

无论a的退出状态如何,a ; b都将运行b。 a && b只有在成功时才会运行b。

这对于回答前三个问题是必要和充分的。特别是,2太宽泛了,不能给”one”明确的答案 – 你最好的选择是根据具体情况来决定。

至于第四个问题:They’re Bash syntax

使用其中也没有内在的危险。再次,上面的定义是足够的。这意味着,如果a不成功,那么当b发生意外影响时,您将编写&&。恕不另行规定或解释,恕我直言。

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/102.html,未经允许,请勿转载。