2013-08-14 1 views
0

С последним обновлением нашего SuSE Enterprise Linux 11 (теперь bash 3.2.51 (1) -release) команда «tail», похоже, потеряла свою возможность потоковой передачи файлов:unix command 'tail' lost option '-line-buffered'

tail: unrecognized option '--line-buffered' 

Наш хвост от "GNU Coreutils 8.12, март 2013". Есть ли другое эквивалентное решение?

ответ

5

Насколько может быть сказано простым поиском по 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 сразу же смывает вновь прибывающую линию.

+1

'tail' ждет * новой строки *, хотя. – devnull

+1

@devnull Это не то, что я вижу. В моей системе (хвост 8.13), 'tail -f foo | cat', за которым следует 'printf xxx >> foo' в другой оболочке, сразу отображается« xxx »на экране вывода хвоста/кота. И даже если 'tail' ждал новую строку, но' -line-buffered' не помог бы с этим. – user4815162342

+1

Если я 'tail -f' несколько файлов одновременно, выходной файл * not * line-buffered, а искаженная комбинация ввода, если эти файлы добавляются параллельно. Например. хвост несколько файлов журнала. На самом деле хвост нескольких файлов и передача их вывода в grep в стиле буферизации - проблема, которая, похоже, не имеет простого решения. И это все потому, что у хвоста нет опции «-line-buffered». –

 Смежные вопросы

  • Нет связанных вопросов^_^