Блог Олега Сердюкова

Отключение буферизации в shell

При выводе через pipe (“|”) в Unix обычно буферизируются стандартный поток вывода stdout. Представим ситуацию - мы следим за выводом tshark на экран, но при этом хотим параллельно записывать его в файл (забудем на мгновение о команде script):

$ sudo tshark -i en1 | tee out.txt

Мы видим, что строки на экране появляются не сразу, а достаточно большими порциями. Причина - в буферизации вывода командой tshark. А наблюдать-то за трафиком хочется в реальном времени - авось появится что-то интересное.

Для решения нужно воспользоваться программой unbuffer из пакета expect. Вспоминаем установку портов:

$ sudo port install expect

А затем

$ unbuffer sudo tshark -i en1 | tee out.txt

Теперь вывод происходит в реальном времени. Детали - в man unbuffer. Я нашёл unbuffer достаточно давно где-то на ”Stack Overflow”.


Comments