nc 출력에서 ​​grep이 일치하지 않습니다 - tee는 출력을 제공하지 않습니다

nc 출력에서 ​​grep이 일치하지 않습니다 - tee는 출력을 제공하지 않습니다

grep이 stderr에서 netcat 출력을 허용하지 않는 것에 대한 원래 Q&A를 참조하세요.이전 StackExchange 게시물.

간결한 답변. 좋아요. 끝에 티를 추가해도 출력이 생성되지 않는 이유는 무엇입니까?

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

티만 사용하면 효과가 있습니다. grep만 사용하면 작동합니다. grep 이후에 tee를 연결하면 출력(콘솔 또는 파일)이 제공되지 않습니다.

어떤 아이디어가 있나요?

답변1

데빌라N, 쿠살라난다,

감사합니다. 그것은 나의 조바심과 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의 출력입니다.

관련 정보