foo | head
和foo | & head
:&
在后一种情况下的作用是什么?我知道&用于将进程踢到后台,但是当我测试它时,这两个命令产生了相同的结果。
答案 0 :(得分:2)
它将标准错误以及foo的标准输出重定向到head的标准输入。否则,屏幕上仍会打印标准错误。
使用管道和&符号之间的空格,foo | & head
在csh
和派生shell中工作,但在sh
派生的shell中是语法错误。如果没有空格,foo |& head
是{em> sh
派生的shell(zsh,bash,可能还有其他)foo 2>&1 | head
的缩写,但在其他许多内容中都失败了。
答案 1 :(得分:1)
你可能意味着|&
没有空格,因为带有空格的| &
是语法错误(或者据我所知,&
是csh中的noop)
|&
是2>&1 |
的同义词,这意味着在将标准输出管道输出到管道中的下一个命令之前,将文件描述符2(标准错误)重定向到文件描述符1(标准输出)。这允许您在管道中包含打印到标准错误的任何内容,而不是像通常那样将错误打印到终端。这有一些shell支持,例如Bash。有关详细信息,请参阅Bash Manual。
请注意,此语法仅在Bash 4中引入Bash(它已经在其他一些shell中引入了一段时间),并且不兼容POSIX,因此不要尝试在便携式shell脚本中使用它。
答案 2 :(得分:-1)
IIRC是的,它所做的就是告诉我们作为后台进程运行。结果应该是相同的(否则&)正在改变命令的语义),它只是受影响的调度。