【问题标题】:In bash, is there a way have multiple pipes to one process?在 bash 中,有没有办法让多个管道连接到一个进程?
【发布时间】:2013-09-25 18:37:59
【问题描述】:

例如,如果我想在用sed 预处理两个文件后对两个文件进行diff,有没有什么方法可以在没有临时文件的情况下做到这一点?

我已经尝试过这样的事情,但(正如我所料)它不起作用:

(sed "$expr" file1; sed "$expr" file2) | diff - -

我在想可能有一种方法可以显式地创建管道之类的。

【问题讨论】:

  • 如果您发布您的文件,我们可能会帮助您创建一个可以完成所有工作的 awk 命令。

标签: bash sed pipe


【解决方案1】:

尝试这样做:

diff <(sed "$expr" file1) <(sed "$expr" file2)

这使用流程替换&lt;( ) 被临时文件名替换。写入或读取该文件会导致字节通过管道传输到内部的命令。常与文件重定向结合使用:

cmd1 2> >(cmd2)


http://mywiki.wooledge.org/ProcessSubstitution
http://mywiki.wooledge.org/BashFAQ/024

【讨论】:

  • 谢谢,这正是我想要的!
  • cmd1 &lt;(cmd2),管道能用多久? cmd1 退出后是否立即关闭?
  • 好问题。在cmd2 | cmd1 中,cmd2 可以在cmd1 退出后继续,只要它不尝试写入已关闭的管道。进程替换可能类似。
  • 有没有办法让`sed "$expr"`只能声明一次?
猜你喜欢
  • 2010-10-14
  • 2021-08-16
  • 1970-01-01
  • 1970-01-01
  • 2020-06-16
  • 1970-01-01
  • 2022-10-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多