我正在尝试在 ksh 脚本中远程登录 Linux 主机,但是当将相同的脚本作为 bash 脚本执行时,输出似乎有所不同。大家有什么想法吗?
当脚本作为 bash 执行时
#!/bin/bash
echo -e '\x1dclose\x0d' | telnet myhost myport > /dev/null 2>&1
echo $?
输出$?是 0
与 ksh 执行相同的脚本结果 $ 值?是 1
#!/bin/ksh
echo -e '\x1dclose\x0d' | telnet myhost myport > /dev/null 2>&1
echo $?
有人有什么想法吗?
提前致谢,
如果远程主机关闭连接(或发生任何远程或网络错误),则
telnet
的返回值为1;如果本地客户端成功关闭连接,则返回值为0。我的猜测是,bash
比ksh
更快地终止客户端,因此在ksh
版本中,远程主机关闭会话的速度可能会更快一些。话虽这么说,如果您给客户端系统施加了一些重负载,bash
中的版本也可能返回 1。telnet
的返回值并不像您想象的那么有帮助。
此外,
telnet
是一个交互式程序,不太适合在脚本中使用。如果交互很简单,请使用 nc
;如果交互变得更复杂,请使用 expect
。
printf \x
ksh 和 bash 之间的行为不同,尝试使用八进制表示法
printf '\035close\x0d' | telnet myhost myport > /dev/null 2>&1