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

ksh脚本中telnet命令执行返回值与bash不一致问题求助

解决ksh与bash中telnet脚本返回码差异问题

核心原因是bash和ksh的echo命令对-e选项的支持不一致:bash的echo -e会解析\x这类转义字符,但ksh(尤其是pdksh等分支)默认不支持-e选项,导致传给telnet的内容不是预期的Ctrl+](\x1d)+close+回车,telnet无法正确执行关闭操作,最终返回非0值。

解决思路

  • 替换echo为printf:printf是POSIX标准命令,在bash和ksh中行为一致,能正确解析转义序列。修改后的脚本如下:
    #!/bin/ksh
    printf '\x1dclose\x0d' | telnet myhost myport > /dev/null 2>&1
    echo $?
    
  • 排查环境差异:
    • 确认ksh环境下telnet命令的路径与bash一致,执行which telnet对比两者输出
    • 临时去掉>/dev/null 2>&1重定向,查看telnet的stderr输出,确认是连接问题还是命令不识别
  • 备选方案:如果需要兼容更多shell,也可以用expect脚本实现自动关闭telnet,但printf的方式更轻量。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 16:12:02