Как упомянутую RUBO77, проблема решается путем добавления - выпученного
к первой команде GREP:
tail -f /var/log/syslog|grep --line-buffered s|grep s
Однако вы тогда можете спросить, почему ISN Это необходимо для одного команды GREP
? Разница между ними заключается в том, что в следующем команде:
tail -f /var/log/syslog|grep s
STDOUT
для GREP указана на терминал. GREP
Скорее всего, пишет в STDOUT
через функции, содержащиеся в библиотеке Stdi. За документацию ( STDIO (3) ):
выходные потоки, которые относятся к терминальным устройствам, всегда являются буферами по умолчанию;
Таким образом, базовые библиотечные вызовы промывают буфер после каждой строки без Любое действие на часть Грепа.
В этой команде:
tail -f /var/log/syslog|grep --line-buffered s|grep s
STDIO
теперь идет в трубу, а не к терминальному устройству, и функции библиотеки, которые GREP использует для записи в STDOUT, полностью буферы, а не используют буферизацию линии. Когда используется флаг - линейный флаг
, GREP будет звонить Fflush
, что будет промотала все буферизованные записи.
Вам нужно добавить --line-буферизованный
к grep
tail -f /var/log/syslog|grep --line-buffered s|grep s