Насколько может быть сказано простым поиском по Google, tail
не имеет опции --line-buffered
, grep
. --line-buffered
полезно, чтобы заставить буферизацию строки, даже при записи в не-TTY, типичные идиом существ:
tail -f FILE | grep --line-buffered REGEXP > output
Здесь точка --line-buffered
является предотвращение grep
с выхода буферного в 8K кусков и заставляя совпавшие строки немедленно отображаются в выходном файле.
tail -f
небуферирован независимо от типа выхода, поэтому ему не нужен вариант --line-buffered
, эквивалентный тому, который указан в grep
. Это можно проверить, выполнив tail -f somefile | cat
и добавив строку в файл из другой оболочки. Один замечает, что, несмотря на то, что его стандартный выход является трубой, tail
сразу же смывает вновь прибывающую линию.
'tail' ждет * новой строки *, хотя. – devnull
@devnull Это не то, что я вижу. В моей системе (хвост 8.13), 'tail -f foo | cat', за которым следует 'printf xxx >> foo' в другой оболочке, сразу отображается« xxx »на экране вывода хвоста/кота. И даже если 'tail' ждал новую строку, но' -line-buffered' не помог бы с этим. – user4815162342
Если я 'tail -f' несколько файлов одновременно, выходной файл * not * line-buffered, а искаженная комбинация ввода, если эти файлы добавляются параллельно. Например. хвост несколько файлов журнала. На самом деле хвост нескольких файлов и передача их вывода в grep в стиле буферизации - проблема, которая, похоже, не имеет простого решения. И это все потому, что у хвоста нет опции «-line-buffered». –