以下命令中的两个&符号有什么作用:
(make foo&)&
答案 0 :(得分:3)
(
和)
在子shell中运行命令。这意味着将生成一个单独的shell并运行该命令。这可能是因为他们想要使用特定于shell的操作(后台 - 其他示例是重定向等)。命令中的第一个&
背景命令在子shell中运行(即make foo
)。第二个&符号表示子shell本身,以便您立即返回命令提示符。
你可以在这里看到效果
(bb-python2.6)noufal@NibrahimT61% ls # shell waits for process to complete
a b c d e
(bb-python2.6)noufal@NibrahimT61% ls& #Shell returns immediately.
[1] 3801
a b c d e
[1] + done /bin/ls -h -p --color=auto -X
(bb-python2.6)noufal@NibrahimT61% (ls&) # Current shell waits for subshell to finish.
a b c d e
在这种情况下,即使子shell中的作业本身是背景的,当前shell也会等待子shell完成。
(bb-python2.6)-130- noufal@NibrahimT61% (ls &)&
[1] 3829
a b c d e
[1] + exit 130 (; /bin/ls -h -p --color=auto -X &; )
前台shell立即返回(不等待子shell本身不等待ls完成)。观察执行命令的区别。
关于需要在子shell中运行某些命令的旁注。假设你想运行一个“shell命令”(即一个使用shell特定的东西,如重定向,作业ID等),你必须在子shell中运行该命令(使用(
,{{ 1}})或使用)
选项作为bash之类的shell。你不能直接-c
这样的事情,因为shell是处理作业id或其他任何东西所必需的。具有子壳的Ampersanding立即返回。代码中的第二个&符号(如同其他答案所暗示的那样)是多余的。一例“确保它是背景的”。
答案 1 :(得分:1)
没有背景就很难说,但是& in shell命令在后台运行命令并立即继续,无需等待命令完成。也许Makefile作者希望并行运行几个命令。然而,第二个&符号将是多余的,括号也是如此。
答案 2 :(得分:0)
&符号用作makefile中的行继续符。
很难说肯定,因为你的问题没有足够的背景。