使用bash在执行期间将进程的输出重定向到自身作为输入

时间:2018-05-30 22:38:43

标签: bash stream pipe stdout stdin

我有一个从stdin读取并打印到stdout的程序。我希望能够重定向输出以在程序执行期间充当程序的输入。我不想使用expect。下面是一个使用fifo的示例脚本,但它以某种方式存在缺陷,我无法理解。

mkfifo fifo
echo "Initial input" > fifo
cat  fifo |  ./my_program > fifo
rm -rf fifo

1 个答案:

答案 0 :(得分:1)

此操作失败,因为echo语句将永远等待读者附加。

另一种选择是:

mkfifo fifo
{ echo "Initial input"; cat fifo; } |  ./my_program > fifo

./my_program决定:

  • 刷新其输出缓冲区
  • 不超过管道缓冲区
  • 以可达状态退出

如果程序未能执行上述任何操作,则会挂起或死锁。这是./my_program的问题,而不是bash片段的问题。