bash – 如何避免回声关闭FIFO命名管道? – Unix FIFO的有趣行为

我想要输出一些数据到管道,让另一个进程对数据逐行做一些事情。这里是一个玩具示例:
mkfifo pipe
cat pipe&
cat >pipe

现在我可以输入任何我想要的,然后按enter键我立即看到同一行。但是如果用echo替换第二个管道:

mkfifo pipe
cat pipe&
echo "some data" >pipe

管道在回声和猫管道之间关闭。完成,使我不能通过管道传递任何更多的数据。有没有办法避免关闭管道和接收数据的进程,以便我可以通过管道从bash脚本传递许多行数据,并在他们到达时处理它们?

当FIFO被打开用于读取时,它阻塞调用进程(通常)。当进程打开FIFO进行写入时,读取器被解锁。当写入器关闭FIFO时,读取进程获得EOF(读取0个字节),除了关闭FIFO并重新打开之外,没有什么可以做的事情。因此,你需要使用一个循环:
mkfifo pipe
(while cat pipe; do : nothing; done &)
echo "some data" > pipe
echo "more data" > pipe

另一种方法是在FIFO打开时保持一些进程。

mkfifo pipe
sleep 10000 > pipe &
cat pipe &
echo "some data" > pipe
echo "more data" > pipe

相关文章

用的openwrt路由器,家里宽带申请了动态公网ip,为了方便把2...
#!/bin/bashcommand1&command2&wait从Shell脚本并行...
1.先查出MAMP下面集成的PHP版本cd/Applications/MAMP/bin/ph...
1、先输入locale-a,查看一下现在已安装的语言2、若不存在如...
BashPerlTclsyntaxdiff1.进制数表示Languagebinaryoctalhexa...
正常安装了k8s后,使用kubect工具后接的命令不能直接tab补全...