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分叉两次 和 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/') 你不能用管道做到这一点 – 你不能有两个标准输入. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |