請參閱有關 grep 不接受 stderr 上的 netcat 輸出的原始問答,網址為之前的 StackExchange 帖子。
簡潔的答案。我喜歡。為什麼在末端添加 T 卹無法產生任何輸出?
nc -zvv localhost 3100-3200 2>&1 | grep succeeded | tee test.txt
僅使用 T 卹作品。僅使用 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 的輸出。