foo |之间的区别是什么?头和foo | &安培;头?

时间:2011-02-15 05:52:51

标签: unix

foo | headfoo | & head&在后​​一种情况下的作用是什么?我知道&用于将进程踢到后台,但是当我测试它时,这两个命令产生了相同的结果。

3 个答案:

答案 0 :(得分:2)

它将标准错误以及foo的标准输出重定向到head的标准输入。否则,屏幕上仍会打印标准错误。

使用管道和&符号之间的空格,foo | & headcsh和派生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是的,它所做的就是告诉我们作为后台进程运行。结果应该是相同的(否则&)正在改变命令的语义),它只是受影响的调度。