XTerm 从 fifo 读取时缓冲输出

XTerm 从 fifo 读取时缓冲输出

我有一个 xterm 窗口,我想让它连续显示命名管道的输出。但是,似乎发生了一些缓冲,我找不到它发生在哪里。

我打开两个终端。在第一个终端中,我创建一个管道并观察发送给它的任何内容。

mkfifo pipe
tail -f pipe

在第二个终端上,我通过管道从一个进程发送两条消息,间隔一段时间。我用它stdbuf来确保命令的输出是无缓冲的。

stdbuf -o0 bash -c 'echo hi; sleep 5; echo bye' > pipe

一切按预期进行,第一个终端打印hi,然后bye五秒后打印。

但是,如果我tail -f pipe在 xterm 窗口内运行,则消息直到程序退出才会出现。显然,有一些缓冲正在进行,但我找不到它在哪里。有没有办法防止 xterm 缓冲程序的输出?

我的“常规终端”使用 PuTTY,通过 ssh 从 Windows 7 连接到 Linux 计算机。在 Linux 计算机上,uname -a返回Linux hostname 3.2.0-4-amd64 #1 SMP Debian 3.2.65-1+deb7u1 x86_64 GNU/Linux,然后xterm -v返回XTerm(278)

答案1

在我的测试中,缓冲仅在第一次运行 bash 脚本时发生。因此

bash -c 'echo' > pipe; bash -c 'echo hi; sleep 5; echo bye' > pipe

几乎可以满足您的要求,但在顶部有一个额外的换行符。(我甚至不需要 stdbuf)。

相关内容