Bash:从文件读取stdin并将stdout写入文件

我试图运行一个应用程序(让我们说top ),所以它会从一个文件读取标准input,并从标准输出写入另一个文件。

目前我有

 mkfifo stdin.pipe (tail -f stdin.pipe) | top 

它按预期工作,然后我可以echo一些文件,顶部会收到。 但我无法redirect顶部的输出。 我怎样才能做到这一点?

编辑:

好吧,让我们从头开始。 我正在testing这个:

 cat test.sh echo Say something read something echo you said $something 

让我们忘记top ,这似乎是一个红色的鲱鱼。

要将stdin或stdout映射到文件,可以使用重定向:

 some_program < input_file # Redirects stdin another_program > output_file # Redirects stdout 

甚至:

 yet_another < input_file > output_file 

有没有一种方法可以将stdin和stdout映射到文件,并使用它们来控制cli应用程序?

这听起来像你正在寻找coprocesses ,添加到Bash在4.0。

 coproc cat # Start cat in background echo Hello >&${COPROC[1]} # Say "Hello" to cat read LINE <&${COPROC[0]} # Read response echo $LINE # cat replied "Hello"! 

在4.0之前,你必须使用两个命名管道来实现这一点。