加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

bash – 管道vs重定向到进程

发布时间:2020-12-16 01:26:22 所属栏目:安全 来源:网络整理
导读:寻找一些bash专家的解释.下一个之间的确切区别是什么 command1 | command2 例如经典管道,其中command1的stdout被重定向到command2的stdin,例如, bash分叉两次 更改文件描述符 执行comman1和command2 和 command1 (command2) 结果(和bash动作)是一样的…… 至
寻找一些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/')

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读