为什么cat异步运行时不会产生输出?

时间:2017-05-16 13:16:22

标签: bash

$ echo foo | /usr/bin/cat
foo
$ echo foo | /usr/bin/cat &
[1] 43932
foo
[1]+  Done                    echo foo | /usr/bin/cat
$ echo foo | { /usr/bin/cat & }
$ # NO OUTPUT!!!
$ bash --version | sed 1q
GNU bash, version 4.3.42(1)-release (x86_64-unknown-linux-gnu)
$ /usr/bin/cat --version | sed 1q
cat (GNU coreutils) 8.25 

这是bash中的错误,还是我错过了一些明显的东西? (或许我错过了一些微妙的东西!)

1 个答案:

答案 0 :(得分:1)

我的回答是微妙的: - )

根据man的文档(bash页面),我会说这实际上是不受支持的。相关部分明确指出(我的重点):

  

{ list; } - list只是在当前的shell环境中执行。 <{1}} 必须以换行符或分号结尾。

“必须”条款增加了list的先前定义,即:

  

list是一个或多个管道的序列,由一个运算符list;&&&分隔,并且可选由||;&之一终止。

由于你用“换行符或分号”终止它,所有的赌注都是关闭的(虽然我倾向于期望强大的软件实际上告诉你它而不仅仅是巧妙地做怪异的东西)。

如果您真的想在后台执行该操作,可能最简单的方法是在后台运行整个管道,而不是仅尝试对管道的一个元素执行此操作:

<newline>