Разобрался, что здесь происходит.Оказывается, команда работает, просто вывод занимает много времени, чтобы добраться до консоли (примерно 120 секунд в моем случае).Это связано с тем, что в буфере стандартного выхода записывается не каждая строка, а каждый блок.Поэтому вместо того, чтобы получать каждую строку из файла в момент его написания, я получал бы гигантский блок каждые 2 минуты или около того.
Следует отметить, что это работает правильно:
tail file.txt | grep something | grep something
Это следующий файл с --follow=name
, что проблематично.
В своих целях я нашел способ обойти это, и я собирался записать вывод первого файла grep в файл, поэтому команда будет выглядеть так:
tail --follow=name file.txt | grep something > output.txt
AЧтобы обойти это, используйте команду script
следующим образом:
script -c 'tail --follow=name file.txt | grep something' output.txt
Скрипт захватывает выходные данные команды и записывает их в файл, таким образом избегая второй канал.
Это имеетэффективно обошел эту проблему для меня, и я объяснил, почему команда не работала так, как я ожидал, проблема решена.
К вашему сведению, эти другие вопросы, связанные со стековым потоком, связаны:
Обман приложениячтобы думать, что его стандартный ввод является интерактивным, а не конвейером
Принудительно небуферизовать стандартный вывод другой программы с помощью Python