我有一个 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)。