我想输出一些数据到一个管道,让另一个进程对数据一行一行地做些什么。这里是一个玩具例子:如何避免回声关闭FIFO命名管道? - Unix FIFO的有趣行为
mkfifo pipe
cat pipe&
cat >pipe
现在我可以进入任何我想要的,然后按Enter键后,我立刻看到同一行。但是,如果替代第二管道与echo
:
mkfifo pipe
cat pipe&
echo "some data" >pipe
管道后echo
和cat pipe&
完成关闭,这样我可以不通过管道传递任何更多的数据。有没有办法避免关闭管道和接收数据的进程,以便我可以通过管道从bash脚本传递多行数据,并在它们到达时对它们进行处理?
第二个版本则方位的工作!第一个不适合我,因为我不想重新启动接收数据的进程。 – user1084871
您可能可以作弊,并让'cat'通过使用:'cat pipe 3> pipe'将管道打开以便写入。 'cat'命令不会使用文件描述符3,但是将会有一个叫做管道的FIFO,用于写入(尽管它将在另一个文件描述符 - 可能是4上读取它)。 –
'exec> 6 pipe'没有达到同样的效果吗?基本上将'pipe'分配给文件描述符6并保持写入状态。而不是直接写入'pipe',你可能希望使用'>&6'写入描述符,否则它应该保持它打开iirc – Haravikk