Unix将多个命令分开,最后有'&'(在后台执行)

Sta*_*tan 4 linux unix shell bash shell-scripting

在 Unix 中分隔常规命令是将分号放在最后,如下所示:

cd /path/to/file;./someExecutable;
Run Code Online (Sandbox Code Playgroud)

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

./myProgram1 > /dev/null &
./myProgram2 > /dev/null &
=>./myProgram1 > /dev/null &;./myProgram2 > /dev/null &;
Run Code Online (Sandbox Code Playgroud)

有没有办法将这些命令分开?

另外,如果我将粘贴复制到命令提示符,以下两种情况是否相同?谢谢。

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

cd /path/to/file;
./someExecutable;
Run Code Online (Sandbox Code Playgroud)

gWa*_*ldo 14

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

command1 ; command2无论是否退出成功,都会执行command1然后执行command2一次。command1command1

command1 && command2只会执行command2一次command1成功完成执行。如果command1失败,command2则不会执行。

(……另外,为了完整性……)

command1 || command2command2command1失败时执行(以非零退出代码退出。)


小智 12

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

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

所以 ”&;” 不会像你期望的那样工作。

但实际上我不确定你的期望。

在你的 shell 中试试这个:

sleep 2 && echo 1 & echo 2 & sleep 3 && echo 3
Run Code Online (Sandbox Code Playgroud)

它将输出:2 1 3

现在比较一下

sleep 2 ; echo 1 & echo 2 & sleep 3 ; echo 3
Run Code Online (Sandbox Code Playgroud)

这将输出 1 2 3

问候。