bash – 管道vs重定向到进程

寻找一些bash专家的解释.下一个之间的确切区别是什么
command1 | command2

例如经典管道,其中command1的stdout被重定向到command2的stdin,例如,

> bash分叉两次
>更改文件描述符
>执行comman1和command2

command1 > >(command2)

结果(和bash动作)是一样的……

至少我得到了相同的

find . -print0 | xargs -0 -n1 -I% echo =%=

find . -print0 > >(xargs -0 -n1 -I% echo =%=)

是> >(命令)只有更长的路说|?或者不是,我错过了什么?

实施
command1 | command2

shell在父进程中创建一个管道,并将其一端附加到command1的输出(fd 1;它使用dup或dup2),另一端连接到command2的输入(fd 0).

实施

command1 > >(command 2)

,shell创建一个FIFO.它将command2的stdin附加到FIFO(通常使用O_WRONLY标志打开),并将FIFO的名称作为command1的位置参数传递.您可以使用echo>(true)轻松地看到这一点.

如果你使用

> >(foo)

这些形式确实非常相似.但是,流程替代机制更加强大.例如,你做了这样的事情:

diff -u  <(curl 'http://www.a.example.com/')  <(curl 'http://www.b.example.com/')

你不能用管道做到这一点 – 你不能有两个标准输入.

相关文章

用的openwrt路由器,家里宽带申请了动态公网ip,为了方便把2...
#!/bin/bashcommand1&command2&wait从Shell脚本并行...
1.先查出MAMP下面集成的PHP版本cd/Applications/MAMP/bin/ph...
1、先输入locale-a,查看一下现在已安装的语言2、若不存在如...
BashPerlTclsyntaxdiff1.进制数表示Languagebinaryoctalhexa...
正常安装了k8s后,使用kubect工具后接的命令不能直接tab补全...