Замена процесса Bash на трубу - PullRequest
0 голосов
/ 13 июня 2018

Предположим, у меня есть файл t.txt с множеством строк, содержащих 'a'.Я озадачен, почему это не работает:

cat <(tail -f t.txt | grep a)

Приведенная выше команда просто зависает, ничего не печатая, даже если в каждой строке есть совпадение.Это потому, что cat ожидает вывода "tail" вместо "grep"?Как я могу это исправить?

Кстати, я пробовал другой вариант с двойной подстановкой процесса:

cat <(grep a <(tail -f t.txt))

Это также зависает, ничего не печатая.

У кого-нибудь есть подсказка

Ответы [ 2 ]

0 голосов
/ 13 июня 2018

Для программ, которые не принимают аргумент --line-buffered, вы можете использовать stdbuf:

cat <(tail -f t.txt | stdbuf -oL grep a)

Как это работает, просто магия;лучше об этом не думать.

0 голосов
/ 13 июня 2018

Добавить опцию grep --line-buffered.

См. man grep.

...