如何select()(即,同时读取)标准input*和* bash中的文件?

我有一个程序接受一个FIFO上的input并将输出发送到另一个FIFO。 我想写一个小脚本来控制这个程序。 脚本需要同时听取标准input(所以我可以input命令来实时调整) 程序的输出FIFO(所以它也可以响应在那里发生的事件)。

基本上我的控制程序需要在标准input和文件(我的FIFO)之间进行select

我喜欢学习如何弄清楚如何为复杂的问题开发简单而优雅的基于bash的解决scheme,经过一番讨论后,我记得那个tail -f会高兴地select多个文件,并告诉你其中一个文件实时更改,所以我最初尝试

 tail -f <(od -An -vtd1 -w1) <(cat fifo) 

读取两个标准input(我以前运行stty icanon min 1 ;这个od调用显示每个stdin字符在一个单独的行旁边的ASCII代码,并且非常适合转义序列parsing)和我的FIFO。 这是史诗般的失败(就像cat <(cat) ): od在这里作为一个后台任务运行,所以它不能访问控制TTY,并且失败了一个神秘的“I / O错误” 这里 。

所以现在我有点难住了。 我意识到我可以使用 Perl / Python / Ruby / Tcl等任何脚本语言来解决这个问题。 我的compsci /工程问题是否/我如何能够使用(Linux)shell脚本来解决这个问题。