在Linux bash中将两个标准输出重定向到一个标准输入


0

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

不修改C程序就可以吗?我已经完成了一个shell脚本,该脚本定期回显信息(到其stdout),所以这个想法是将这个shell和普通的stdin仅连接到一个stdin(反三通)。

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


是的,这就是我想要的,但是我也想对“ myprogram”使用“普通的” stdin(键盘编写)。我希望两个条目都进入程序。
markmb 2014年

Answers:


1

为此,您可以在中间使用“套接字”。您将设置一个套接字文件(例如/tmp/program.socket,然后修改程序以从中读取而不是从stdin中读取)。

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


我想避免修改程序。我尝试使用pipe和shell命令,但仍无法达到所需的结果(最后杂乱无章)。如果找不到解决方案,请修改程序。
markmb 2014年

1

您的脚本不起作用,不是因为“ ./myprogram”正在等待脚本结束,而是因为“ ./myprogram”正在等待不确定的“ cat”结束,因此您是从子外壳“(...)”开始的。

即使您的问题很模糊,我猜您仍需要学习如何使用管道。

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

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

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

玩得开心。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.