Вывод буфера XTerm при чтении из fifo

380
Eldritch Cheese

У меня есть окно 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).

0
Это звучит очень странно. Не могли бы вы рассказать подробнее о том, как вы вызываете xterm? Похоже, что это может быть запуск другой оболочки или что-то в вашем .bashrc или .profile, которое устанавливает другую среду. (Отличается ли вывод команды env между терминалом и xterm?) nickcrabtree 9 лет назад 0

1 ответ на вопрос

0
nickcrabtree

On my tests, the buffering only happens for the first run of the bash script. So

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

does pretty much what you want, but with an extra newline at the top. (I didn't even need stdbuf).

Похожие вопросы