$ 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中的错误,还是我错过了一些明显的东西? (或许我错过了一些微妙的东西!)
答案 0 :(得分:1)
我的回答是微妙的: - )
根据man
的文档(bash
页面),我会说这实际上是不受支持的。相关部分明确指出(我的重点):
{ list; }
-list
只是在当前的shell环境中执行。 <{1}} 必须以换行符或分号结尾。
“必须”条款增加了list
的先前定义,即:
list
是一个或多个管道的序列,由一个运算符list
,;
,&
或&&
分隔,并且可选由||
,;
或&
之一终止。
由于你不用“换行符或分号”终止它,所有的赌注都是关闭的(虽然我倾向于期望强大的软件实际上告诉你它而不仅仅是巧妙地做怪异的东西)。
如果您真的想在后台执行该操作,可能最简单的方法是在后台运行整个管道,而不是仅尝试对管道的一个元素执行此操作:
<newline>