我知道“&”命令之间的运算符意味着命令是同时执行的。然而,“&”是什么在“command1 & command 2 &
”中做什么?
答案 0 :(得分:5)
ps1%> command1 & command2
在此示例中,command1从后台运行,而command2从前台运行。在命令2完成之前,您不会得到命令提示符。
ps1%> command1 & command2 &
在第二个例子中,command1和command2都是从后台运行的,当你们两个都在运行时,立即向你发出命令提示符。
要测试并感受它,你可以这样做:
ps1%> sleep 10 & sleep 4
[1] 8134
在此示例中,您将看到后台命令的PID(进程ID),而'sleep 4'命令正在前台运行。
ps1%> sleep 10 & sleep 4 &
[1] 8139
[2] 8140
在第二个示例中,将显示其中两个,表示两个在后台运行,而您将立即返回提示。
答案 1 :(得分:2)
&
不是二元运算符(在两个命令之间),它是一个一元的后缀运算符,即一个在命令之后,并指示shell在后台运行指定的命令。当&
介于两个命令之间时,可以省略普通的;
分隔符,即将foo&; bar
写为foo & bar
。这种用法使&
看起来像二元运算符。
因此,command1 & command2
实际上等同于command1& ; command2
,并且意味着"在后台运行command1,然后运行command2并等待command2完成"。 command1 & command2 &
等同于command1& ; command2&
,意味着"在后台运行command1和command2,并立即恢复执行脚本(或者如果是交互式则返回提示)"
由于至少有一个命令在后台,所以这两个命令实际上是在"并行"在这两种情况下。