如果要在一行上运行两个单独的命令,则可以执行以下操作:

cd /home; ls -al


或此命令:

cd /home && ls -al


我得到相同的结果。但是,这两种方法在后台发生了什么?它们之间的功能区别是什么?

#1 楼

;只是将一个命令与另一个命令分开。 &&表示仅在上一个命令成功的情况下运行以下命令

cd /home; ls -al


这将执行cd /home,即使cd命令失败(/home不存在,您也不会)如果没有权限遍历它,等等),它将运行ls -al

评论


使用的;是非常危险的(至少使用rm命令),例如cd / some / dir; rm -fr ./*。因此,使用这种破坏性操作,必须确保在执行rm之前您处于正确的位置。正确的命令是cd / some / dir && rm -fr ./*

– ALex_hha
16年4月18日在14:23

#2 楼

a && b


如果a返回零退出代码,则执行b。

a || b


如果a返回非零退出代码,则b为

a ; b


先执行a然后执行b。

#3 楼

cd /fakedir; ls -al


在当前目录中运行ls,因为cd /fakedir将失败,并且外壳程序将忽略不为零的退出状态。

cd /fakedir && ls -al


因为仅当前一个命令正常退出(状态为零)时,&&运算符才会继续执行,不会执行任何ls操作。尽管通常放在命令的末尾,但可以将其放在链的中间。

#4 楼

您也可以像if..then..else一样将它们连接在一起,以链接命令逻辑。

示例: