和有什么区别
cat dat | tee >(wc -l ) | some other command
和
cat dat | tee file | wc -l
就幕后发生的事情而言?我可以理解第二个,因为 tee 将流分叉到文件中,也分叉到管道中。但我对第一个感到困惑。
第一个符号是 Bash 4.x 的进程替换(不在 3.x 中,或者不是在 3.x 的所有版本中)。
就tee
它而言,它被赋予了一个文件名(例如/dev/fd/64
),它可以写入到标准输出中;它实际上是管道写入端的文件描述符。就wc
目前而言,它读取其标准输入(这是连接到/dev/fd/64
for的管道的读取端tee
),并将其答案写入调用管道的 shell 的标准输出(而不是其标准输出tee
下降)管道)。
由于 >( 是 bash 的进程替代,第一行说:将文件 'dat' 的内容发送到其他命令中,同时进程 'wc' 运行,其输入或输出连接到管道,该管道也发送 'dat 的内容'
检查 bash 手册页的“进程替换”。