我面临的问题正是这个:http : //www.linuxmisc.com/4-linux/d7863c256bccbfb6.htm
我希望能够运行一个接受 stdin 的程序,并在需要时向其中写入数据。我可以使用 fifo 命名管道来做到这一点。例如:
txtplay < named_pipe.fifo
echo "Hello World" > named_pipe.fifo但是,这样做的缺点是第一个命令在第二个命令完成后退出。我想要的是相同的:
txtplay实际上,这样我就可以随时保留我的数据,而不必担心它会看到文件结尾。不幸的是,我不能简单地这样做,因为我希望在程序看到数据之前通过过滤器处理发送给它的数据。
为什么每次我想向它发送数据时都不加载程序?太慢了。
基本上,我想要的是一种将给定命令的输出重定向到 fifo 命名管道的方法,而无需文件结尾。当我在做的时候,这个 EOF 业务是如何运作的?是不是有特殊的“EOF”命令,还是没有收到数据,或者原来输出数据的程序退出了?
有什么解决办法吗?
小智 6
在子 shell 中(或在 bash 中,在括号内)运行所有命令,并将子 shell 重定向到命名管道。
(
# some stuff
echo "foo"
# some other stuff
echo "bar"
# end of my commands
) > /home/foo/bar/named_pipe
Run Code Online (Sandbox Code Playgroud)
为了回答 EOF 问题,EOF 在文件句柄关闭时写入。如果从程序重定向,则在该程序(在本例中为 echo)终止时会收到 EOF。通过将多个命令封装在括号中,当到达右括号时,您只会得到一个 EOF。
| 归档时间: |
|
| 查看次数: |
6171 次 |
| 最近记录: |