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输出,确认是连接问题还是命令不识别
- 确认ksh环境下
- 备选方案:如果需要兼容更多shell,也可以用
expect脚本实现自动关闭telnet,但printf的方式更轻量。
内容的提问来源于stack exchange,提问作者user23348485
相关产品推荐
相关产品推荐

