Я не эксперт в этом, но поведение кажется простым.
Предположим, вы применяете tail
к обычному текстовому файлу; он напечатает последние 10 строк и выйдет. Если вы используете tail -f
, он напечатает последние 10 строк, а затем проследит за файлом; с этого момента он будет печатать каждую новую строку, добавленную к файлу. Это линия буферизации, которую вы ищете.
Теперь примените tail -f
к именованному каналу. Все, что вы вставляете в другой конец, похоже на исходное содержимое файла, и tail
терпеливо ждет конца, чтобы он мог напечатать «последние» 10 строк. Когда этот процесс заканчивается, он отправляет символ «конец файла» (я не знаю, что это такое, только то, что он существует) через канал, и tail
печатает - и начинает мониторинг. Если затем вы запустите один или несколько новых процессов, которые записывают в канал, tail
принимает новые строки как, ну, в общем, новые и выводит их на печать.
Если вы хотите буферизовать и распечатать все строки, вы можете запустить и остановить тройник, чтобы заполнить насос, или просто использовать
tail -n +1 -f pipe