gpt4 book ai didi

bash - 交换两个程序的输入和输出

转载 作者:行者123 更新时间:2023-12-04 04:46:07 25 4
gpt4 key购买 nike

我的问题的标题相当具有误导性,但我找不到更好的标题。

改写的标题是“我希望程序 x 的输出是程序 y 的输入,程序 y 的输出是程序 x 的输入。程序 x 将通过提供输出开始,而程序 y 将通过接受输入开始。”

Program x
stdout --> <Program y>stdin
stdin --> <Program y>stdout

有什么帮助吗?

最佳答案

您可以使用 named pipe 执行此操作:

mkfifo xy_pipe
./program_x < xy_pipe | ./program_y > xy_pipe

常规管道用于将 x 的标准输出连接到 y 的标准输入。

为了将 y 的标准输出连接到 x 的标准输入,我们使用 mkfifo 创建了第二个命名管道。 .命名管道是连接两个进程的显式方式 |通常情况下。每当一个进程写入命名管道时,它都会阻塞,直到另一个进程从管道中读取。虽然 xy_pipe看起来是一个文件,实际上没有数据写入磁盘。

示例:
$ cat program_x
#!/bin/bash
echo foo
read line && echo "program_x: read '$line'" >&2

$ cat program_y
#!/bin/bash
read line && echo "program_y: read '$line'" >&2
echo bar

$ mkfifo xy_pipe
$ ./program_x < xy_pipe | ./program_y > xy_pipe
program_y: read 'foo'
program_x: read 'bar'

别忘了删除 xy_pipe当你完成!
$ rm xy_pipe

如果你想在屏幕上看到两个程序的输出,你可以通过添加 tee 来实现。混合。
$ mkfifo xy_pipe
$ ./program_x < xy_pipe | tee /dev/stderr | ./program_y | tee xy_pipe
foo
program_x says: foo
bar
program_y says: bar

关于bash - 交换两个程序的输入和输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18158877/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com