今天我打开gnome-terminal
了,我写了
ls && sleep 4 && gnome-terminal
命令完成后打开另一个终端ls
并等待 4 秒。
因此,在之前的命令完全运行(包括sleep 4
)之后,它成功地打开了一个新终端。
之后,下次我输入一个新命令
ls -lR && sleep 4 && gnome-terminal
该命令ls -lR
在 3 秒后完成,但之后没有任何命令sleep 4
并gnome-terminal
成功运行。
问题是什么?
&&
表示如果上一个命令成功则运行它。在 Unix 中,这通常意味着退出状态 0。在第一个实例中,
ls
没有成功,所以它以非零退出状态退出,并且 bash 没有运行第二个命令。在第二个示例中,我 ls'd 一个现有文件,因此 ls 以 0 作为退出状态退出,并执行了命令。
如果你想无条件地运行命令,例如不依赖于第一个的结果,你可以
;
像这样将它们分开等等。
因此你可以这样做
除了
&&
和;
你有||
什么是相反的&&
:仅当前一个命令失败且退出状态为非零时才运行该命令。如果第一个命令成功,则不会执行下一个命令。如果失败,将执行下一个。简而言之:
&&
: 如果前面的命令以 0 退出,则运行;
: 无条件运行||
:如果前面的命令以非零退出状态退出,则运行。&
:并行运行两个命令,第一个在后台,第二个在前台。该命令
ls -lR
以不为零的退出状态退出,因此尚未执行以下命令。很可能ls
无法打开子目录。它没有发生在您的第一个命令中,因为您没有使用-R
-option。来自
man bash
:来自
man ls
: