关于linux命令的问题

时间:2010-01-21 10:27:55

标签: linux unix command

以下命令中的两个&符号有什么作用:

(make foo&)&

3 个答案:

答案 0 :(得分:3)

()在子shell中运行命令。这意味着将生成一个单独的shell并运行该命令。这可能是因为他们想要使用特定于shell的操作(后台 - 其他示例是重定向等)。命令中的第一个&背景命令在子shell中运行(即make foo)。第二个&符号表示子shell本身,以便您立即返回命令提示符。

你可以在这里看到效果

当前shell上的前景

(bb-python2.6)noufal@NibrahimT61% ls # shell waits for process to complete
a  b  c  d  e

当前shell的背景

(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

使用子shell(前景)

(bb-python2.6)noufal@NibrahimT61% (ls&) # Current shell waits for subshell to finish.
a  b  c  d  e                           

在这种情况下,即使子shell中的作业本身是背景的,当前shell也会等待子shell完成。

使用子shell(BAckground)

(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中的行继续符。

很难说肯定,因为你的问题没有足够的背景。