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

在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脚本实现:

    1. 创建telnet_status.exp脚本:
      #!/usr/bin/expect -f
      set timeout 5
      spawn telnet localhost 5555
      expect "Escape character is '^]'."
      send "status\r"
      expect eof
      
    2. 赋予执行权限:
      chmod +x telnet_status.exp
      
    3. 执行并保存结果:
      ./telnet_status.exp > /tmp/text.txt
      

内容的提问来源于stack exchange,提问作者ogcurtis

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 21:15:52