Unix 用 '&'(在后台执行)分隔多个命令

Unix 用 '&'(在后台执行)分隔多个命令

在 Unix 中,常规命令的分隔方法是在命令末尾加上分号,如下所示:

cd /path/to/file;./someExecutable;

但它似乎不适用于这样的命令:

./myProgram1 > /dev/null &
./myProgram2 > /dev/null &
=>./myProgram1 > /dev/null &;./myProgram2 > /dev/null &;

有什么方法可以区分这些命令吗?

另外,如果我将以下 2 种情况复制粘贴到命令提示符中,它们是否等效?谢谢。

cd /path/to/file;./someExecutable;

cd /path/to/file;
./someExecutable;

答案1

那么“;”会让 shell 等待命令完成,然后继续执行下一个命令。

“&” 将把任何进程直接发送到后台并继续执行下一个命令 - 无论第一个命令是否完成或仍在运行。

因此“&;”不会像您预期的那样起作用。

但实际上我不确定您期望什么。

在你的 shell 中尝试一下:

sleep 2 && echo 1 & echo 2 & sleep 3 && echo 3

它将输出:2 1 3

现在将其与

sleep 2 ; echo 1 & echo 2 & sleep 3 ; echo 3

这将输出 1 2 3

问候。

答案2

command1 & command2 将执行command1,将进程发送到后台,并立即开始执行command2,即使command1尚未完成。

command1 ; command2一旦完成就会执行command1然后执行,不管是否成功退出。command2command1command1

command1 && command2只有在成功执行command2后才会执行。如果失败,则不会执行。command1command1command2

(...此外,为了完整性...)

command1 || command2command2仅当失败时才会执行command1(以非零退出代码退出)。

相关内容