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

ale*_*nst 7 linux bash

我正在尝试运行一个应用程序(让我们说top)所以它将从文件中读取stdin并从stdout写入另一个文件.

目前我有

mkfifo stdin.pipe
(tail -f stdin.pipe) | top
Run Code Online (Sandbox Code Playgroud)

它按预期工作,因为我可以echo对该文件和顶部的东西将收到它.但是我无法重定向顶部的输出.我怎样才能做到这一点?

编辑:

好吧,让我们先刮一下.我正在测试这个:

cat test.sh

echo Say something
read something
echo you said $something
Run Code Online (Sandbox Code Playgroud)

cda*_*rke 27

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

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

some_program < input_file          # Redirects stdin

another_program > output_file      # Redirects stdout
Run Code Online (Sandbox Code Playgroud)

甚至:

yet_another  < input_file > output_file
Run Code Online (Sandbox Code Playgroud)


Jon*_*oni 6

有没有办法将stdin和stdout映射到文件并使用它们来控制cli应用程序?

听起来你正在寻找coprocesses,添加到4.0中的Bash.

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"!
Run Code Online (Sandbox Code Playgroud)

在4.0之前,您必须使用两个命名管道来实现此目的.