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

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

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

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

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

티셔츠에만 사용할 수 있습니다. 그냥 grep을 사용하세요. grep 이후 tee를 연결하면 출력(콘솔 또는 파일)이 제공되지 않습니다.

어떤 아이디어가 있나요?

답변1

De Vera 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를 사용하지 않고 --line-buffered를 사용하지 않는 경우에도 grep은 발견된 열린 포트를 계속 인쇄합니다.

-w1 옵션이 없으면 첫 번째 열린 포트는 grep에 의해 콘솔에 인쇄되지만 출력은 중단됩니다. 실제로 이 경우 중단되는 것은 nc의 출력입니다.

관련 정보