linux bash и ошибка grep? - PullRequest
       1

linux bash и ошибка grep?

1 голос
/ 21 января 2020

Выполнение следующих действий:

Первая консоль

touch /tmp/test

Вторая консоль

tail -f /tmp/test |grep propo |grep -v miles

Третья консоль

echo propo >> /tmp/test

Вторая консоль должна отображаться «propo», но ничего не показывает, если вместо этого вы запускаете во второй консоли:

tail -f /tmp/test |grep propo

И выполните echo propo >> /tmp/test, это покажет propo, но grep -v для миль, а не для propo

Почему?

Тестируйте в своей среде, если хотите, это довольно очевидно, но не работает.

Ответы [ 2 ]

1 голос
/ 21 января 2020

Почему?

Скорее всего, потому что вывод команды при передаче по каналу другой команде полностью буферизован, а не буферизован строкой. Вывод может быть буферизован в первом канале или grep.

Используйте stdbuf -oL для принудительной буферизации строки и grep --line-buffered для буферизованной строки grep.

0 голосов
/ 21 января 2020

проблема в том, что grep по умолчанию не использует буферизацию строки; поэтому вывод будет буферизован. Вы можете использовать grep --line-buffered:

tail -f /tmp/test | grep --line-buffered propo | grep -v miles
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...