【问题标题】:How to redirect A's stdout to B's stdin and B's stdout to A's stdin?如何将 A 的标准输出重定向到 B 的标准输入,将 B 的标准输出重定向到 A 的标准输入?
【发布时间】:2019-05-26 01:55:45
【问题描述】:

现在我有程序 A 和 B。我想使用 bash 将 A 的标准输出重定向到 B 的标准输入,并将 B 的标准输出重定向到 A 的标准输入。

我看到有人在做this,但他们没有解释他们是如何做到的。

有什么建议吗?


更新:我找到了一个可以完成这个任务的脚本,但我不明白为什么:

{ ./A < /dev/fd/3 | ./B 3>&-; } 3>&1 | :

【问题讨论】:

  • 您的问题被标记为[bash],但您参考了[c++] 文章(仍然没有完成您描述的内容)。您可以在 C/C++ 程序中拥有单独的 进程 或单独的 线程,它们可以作为读取器和写入器,但不能在单个 bash 管道中同时执行这两种操作. (复合命令)。使用两个 shell(单独的脚本),您可以重定向文件描述符以允许从两个不同的源读取,但除非使用临时文件(或某些递归调用设置),否则该过程是一种方式。
  • 我认为在 shell 脚本中是不可能的。
  • 我猜你的意思不仅仅是A | B | A 对吧?但是,如果进入 A 的输入导致进入 B 的输出,然后导致输出进入 A...ad infinitum,那么终止条件是什么,您的最终输出结果是什么预计?如果 B 的输出进入 A 的相同 I 姿态的输入,那么 A 正在读取两个输入流,等等
  • 您应该能够使用命名管道来执行此操作;示例见this answer

标签: bash io-redirection


【解决方案1】:

您可以使用socat 实用程序。它将任何东西连接到其他任何东西,包括彼此的两个进程:

socat exec:'A' exec:'B'

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-04-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多