为何Shell脚本输出的results.txt文件为空?请求协助排查TCP端口Telnet测试脚本问题
解决nc输出无法写入results.txt的问题
我来帮你搞定这个问题!你遇到的核心原因是:nc的-v(verbose)输出信息是发送到标准错误流(stderr)的,而tee默认只捕获标准输出流(stdout),所以虽然命令执行成功,但空的stdout被写入文件,导致results.txt内容为空。
修复方案
修改你的脚本,把stderr重定向到stdout,这样tee就能同时捕获两种输出并写入文件:
#! /bin/sh nc -z -v -w5 192.168.88.55 3389 2>&1 | tee results.txt
解释一下2>&1的作用:
2代表标准错误流(stderr)的文件描述符1代表标准输出流(stdout)的文件描述符2>&1就是把stderr的内容重定向到stdout,这样所有输出都会被tee捕获,既会显示在终端,也会写入results.txt文件。
如果你的shell是bash(而非严格的sh),也可以用更简洁的写法:
nc -z -v -w5 192.168.88.55 3389 |& tee results.txt
不过|&是bash的扩展语法,兼容性不如2>&1,所以推荐用第一种写法更稳妥。
执行修改后的脚本后,你再查看results.txt,就能看到nc的连接测试输出了。
内容的提问来源于stack exchange,提问作者kgori_dev
相关产品推荐
相关产品推荐

