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

0

В моих тестах буферизация происходит только при первом запуске скрипта bash. Так

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

делает в основном то, что вы хотите, но с дополнительным переводом строки вверху. (Мне даже не нужен stdbuf).

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .