在回答有关管道和重定向的问题时,罗伯特提到管道还捕获管道中替代进程的标准输出,而重定向没有。为什么会这样?究竟发生了什么,导致了这种行为:
bash-4.1$ echo -e '1\n2' | tee >(head -n1) >redirect
1
bash-4.1$ cat redirect
1
2
bash-4.1$ echo -e '1\n2' | tee >(head -n1) | cat >pipe
bash-4.1$ cat pipe
1
2
1
我原以为这两种形式都会产生相同的结果——后一种。
阅读另一个问题的答案,在命令中重新排序重定向可能会产生所需的结果似乎是合理的,但无论顺序如何,结果总是相同的:
bash-4.1$ echo -e '1\n2' | tee >redirect >(head -n1)
1
bash-4.1$ cat redirect
1
2
bash-4.1$ echo -e '1\n2' | >redirect tee >(head -n1)
1
bash-4.1$ cat redirect
1
2
为什么 stdout 重定向只影响tee
,但管道也会捕获替换的进程head
?只是“设计”?
只是与上述问题相关的一个想法:我认为重定向到文件并管道输出永远不会有意义,但它确实对进程替换有意义:
bash-4.1$ echo -e '1\n2\n3' | tee >(head -n1) >(tail -n1) >tee_out | cat >subst_out
bash-4.1$ cat tee_out
1
2
3
bash-4.1$ cat subst_out
1
3