Вывод буфера 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-ed с 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).