grep не соответствует выводу nc - tee не выводит ничего

grep не соответствует выводу nc - tee не выводит ничего

См. оригинальные вопросы и ответы о том, что grep не принимает вывод netcat в stderr напредыдущий пост StackExchange.

Краткий ответ. Мне нравится. Почему добавление тройника на конце не даёт никакого результата?

nc -zvv localhost 3100-3200 2>&1 | grep succeeded | tee test.txt

Использование только tee работает. Использование только grep работает. Цепочка tee после grep не дает никакого вывода (консоль или файл).

Есть идеи?

решение1

ДевилаН, Кусалананда,

Спасибо. Это было сочетание моего нетерпения и поведения grep и nc. Используя команду ниже на моем Raspberry Pi,

nc -nvw1 127.0.0.1 1-65535 2>&1 | grep succeeded | tee test.txt

Все порты были просканированы, ~затем~ консоль вывела 6 открытых портов. Когда я использовал опцию --line-buffered, команда вела себя так, как я и ожидал (выводила по мере обнаружения).

Кроме того, буферное поведение grep, по-видимому, происходит только при конвейеризации в tee. Когда tee не используется и --line-buffered не используется, grep все равно выводит открытые порты, как найденные.

Без опции -w1 первый открытый порт выводится на консоль grep, но затем вывод зависает — на самом деле в данном случае зависает вывод nc.

Связанный контент