请参阅原始问答,了解 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 的输出。