在终端窗口或shell中,对管道、套接字或FIFO的非关闭读取

编程语言 2026-07-09

我对这些东西了解不多,但我知道像 ncsocat 这样的工具用于从套接字/FIFO(命名管道)中读取数据。我的目标是这样的:

  1. 我在某个路径上有一个套接字、FIFO或其他合适的东西(例如 /run/thing)。
  2. 在一个终端窗口里,我运行 cmd <whatever options> /run/thing。这个命令会一直等待,不会退出,也不会返回到命令提示符。
  3. 在另一个终端窗口里,我运行一个向 /run/thing 写入数据的命令,或者可能有在别处运行的进程写入它。
  4. 写入到 /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导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。

相关文章