Bash:在读取/写入命名管道时替代cat

hex*_*ide 1 bash

我正在启动一个进程,并将其输出重定向到命名管道.我正在使用with重新连接到命名管道cat > $pipe.当进程'stdout死亡而没有轮询父进程'死亡时,如何设置命名管道死?

除此之外,还有什么cat可以用来打开命名管道?

c00*_*ter 5

一个fifo总是准备好读写,所以一个程序喜欢cat并且tail -f不会停止阅读.您要检查的是是否有一个进程写入该文件,如果没有这样的进程,请停止阅读.(顺便说一句,读取文件的最佳方法就是read它.)

lsof可以告诉您谁从/向指定文件读取和写入.查看其手册页,并尝试以下方法:

while lsof /path/to/fifo
do 
    read -r line < /path/to/fifo
    printf "%s\n" "$line"
done
Run Code Online (Sandbox Code Playgroud)

我不确定,并且没有时间研究lsof,找出哪个选项仅输出写入该文件的进程.请在手册页上查看.
因此,只要有一个写入fifo的进程,这个脚本就会读取一行并打印出来.一旦没有进程写入文件,循环就会中断并且脚本退出.

我不知道另一种检查是否有进程写入除使用之外的文件的方法lsof.如果有人知道更标准的方式,我也想知道.