【发布时间】:2018-07-22 15:28:02
【问题描述】:
在answer 关于管道和重定向的问题中,罗伯特提到管道还捕获管道中替代进程的标准输出,而重定向没有。为什么会这样?究竟发生了什么,导致了这种行为:
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
我原以为这两种形式会产生相同的结果——后者。
阅读answer 到另一个问题,在命令中重新排序重定向可能会产生所需的结果似乎是合理的,但无论顺序如何,结果总是相同的:
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
【问题讨论】:
标签: bash output-redirect process-substitution