在Bash中向telnet传递参数时输出重定向异常,求解决方案
解决telnet管道命令无法获取预期输出的问题
问题根源
telnet是交互式工具,用echo "status" | telnet ...的方式时,命令可能在telnet完成连接前就被发送,导致服务端没接收到status指令,最终只输出连接过程信息,没有预期的命令执行结果。
可行解决方案
用netcat(nc)替代telnet
nc专为非交互式网络通信设计,无需等待连接交互,直接发送指令并获取结果:echo "status" | nc localhost 5555 > /tmp/text.txt执行后,
/tmp/text.txt中只会保留服务端返回的status结果,不会包含连接过程的冗余信息。sleep配合telnet延迟发命令
通过sleep等待连接建立完成后再发送指令,确保服务端能接收并处理:(sleep 1; echo "status"; sleep 1) | telnet localhost 5555 > /tmp/text.txt 2>&1这里
2>&1把错误输出也重定向到文件,之后可通过过滤命令提取有效内容:grep -v "Trying\|Connected\|Escape\|Connection closed" /tmp/text.txt用expect处理精准交互
如果服务端有特定提示符或需要更可靠的交互流程,用expect脚本实现:- 创建
telnet_status.exp脚本:#!/usr/bin/expect -f set timeout 5 spawn telnet localhost 5555 expect "Escape character is '^]'." send "status\r" expect eof - 赋予执行权限:
chmod +x telnet_status.exp - 执行并保存结果:
./telnet_status.exp > /tmp/text.txt
- 创建
内容的提问来源于stack exchange,提问作者ogcurtis
相关产品推荐
相关产品推荐

