【问题标题】:Is any difference between "command1 & command2 &" vs "command1 & command2"?“command1 & command2 &”与“command1 & command2”有什么区别吗?
【发布时间】:2016-11-05 17:41:55
【问题描述】:

我知道命令之间的“&”运算符意味着命令是同时执行的。但是,“command1 & command 2 &”中的“&”有什么作用?

【问题讨论】:

    标签: shell unix command-line-arguments


    【解决方案1】:
    ps1%>  command1 & command2
    

    在本例中,command1 从后台运行,而 command2 从前台运行。在命令 2 完成之前,您不会得到命令提示符。

    ps1%>  command1 & command2 &
    

    在第二个示例中,command1 和 command2 都从后台运行,当它们都在运行时,会立即向您提供命令提示符。

    要测试和感受它,您可以这样做:

    ps1%> sleep 10 & sleep 4
    [1] 8134
    

    在本例中,您将看到后台命令的 PID(进程 ID),而“睡眠 4”命令在前台运行。

    ps1%> sleep 10 & sleep 4 &
    [1] 8139
    [2] 8140
    

    在第二个示例中,将显示其中两个,表示两个在后台运行,而您会立即返回提示。

    【讨论】:

    • Jay,请显示哪个命令行是第一个,哪个是第二个。
    【解决方案2】:

    & 不是二元运算符(在两个命令之间),它是一元后缀运算符,即在一个命令之后,并指示 shell 在后台运行指定的命令。当&出现在两个命令之间时,可以省略正常的;分隔符,即将foo&; bar写成foo & bar。这种用法使& 看起来像一个二元运算符。

    因此,command1 & command2 实际上等同于command1& ; command2,意思是“在后台运行 command1,然后运行 ​​command2 并等待 command2 完成”。 command1 & command2 & 等价于command1& ; command2&,意思是“在后台同时运行command1 和command2,并立即恢复执行脚本(或返回提示符,如果是交互的)”。

    由于至少有一个命令在后台,这两个命令实际上在两种情况下都是“并行”执行的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-09-26
      • 1970-01-01
      • 1970-01-01
      • 2021-09-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-03
      • 1970-01-01
      相关资源
      最近更新 更多