在终端窗口或shell中,对管道、套接字或FIFO的非关闭读取
我对这些东西了解不多,但我知道像 nc 和 socat 这样的工具用于从套接字/FIFO(命名管道)中读取数据。我的目标是这样的:
- 我在某个路径上有一个套接字、FIFO或其他合适的东西(例如
/run/thing)。 - 在一个终端窗口里,我运行
cmd <whatever options> /run/thing。这个命令会一直等待,不会退出,也不会返回到命令提示符。 - 在另一个终端窗口里,我运行一个向
/run/thing写入数据的命令,或者可能有在别处运行的进程写入它。 - 写入到
/run/thing的任何内容都会被打印到我在其中运行cmd <whatever options> /run/thing的那个终端窗口。
有人说要使用 cat /run/thing——但不起作用。只要我在另一个窗口里运行 echo "Text." > /run/thing,文本就会被打印到 cat /run/thing 窗口的屏幕上,但之后 cat 就会退出。这不应该发生。任何能解决这个问题的命令都应该保持打开状态,直到我按下 Ctrl-C,或用 kill 将其终止,哪怕写入到 /run/thing 的内容是什么。如何才能做到这一点?
解决方案
你需要保持写入端一直打开,以防读取端收到EOF而退出。你可以在后台运行一个长时间保持打开的命令,同时从其他命令异步向它写入。
sleep 360000 > /run/thing & # hold it open for 100 hours
在它运行的同时,你可以多次运行 echo foo > /run/thing。
站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。