You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.27 17:48:12