在Linux bash中将两个stdout重定向到一个stdin

在Linux bash中将两个stdout重定向到一个stdin

我有一个 C 程序,它从 stdin 读取并执行一些操作。我被要求定期(每 20 秒)输入信息,并在进行一些测试时保持用户交互不变。

不修改 C 程序就可以做到这一点吗?我已经编写了一个 shell 脚本,该脚本会定期回显信息(到其 stdout),因此想法是将此 shell 和正常 stdin 连接到仅一个 stdin(反向 T 形)。

我尝试了 (./periodic.sh; cat) > ./myprogram ,但它不起作用,因为它正在等待脚本结束(反之亦然)。

答案1

为了实现这一点,您可以在中间使用“套接字”。您可以设置一个套接字文件(例如/tmp/program.socket,然后调整您的程序以从该文件而不是标准输入读取)。

然后,您可以根据需要让任意数量的程序写入上述套接字。

答案2

您的脚本没有运行,并不是因为“。/myprogram”正在等待您的脚本结束,而是因为“。/myprogram”正在等待您在子 shell“(...)”中启动的无限期“cat”结束。

尽管您的问题非常模糊,但我猜您需要学习如何使用管道。

mkfifo mypipe
while true; do
    ./periodic.sh > mypipe &
    ./myprogram < mypipe
done

该代码将永远等待您对“。/periodic.sh”的输入,一旦您提供该输入,它将被传递到管道“mypipe”(在后台),然后“。/myprogram”将处理其输出。

希望这就是您一直在寻找的。正如我之前所说,您的问题有点模糊。

玩得开心。

相关内容