我能够在shell脚本中打开一个生成的telnet会话来运行一些命令。之后,我尝试使用send发送转义字符(请参阅下面的语法),但它永远不会到达我能够关闭会话的部分。有人能指出我正确的方向吗?由于这个问题,我以这种方式开放了多个telnet会话,我不想这样做。
send "^]\r"
expect "telnet>"
send "close\r"
close $spawn_id
答案 0 :(得分:8)
您发送ESC control sequence。试试send "\x1b\r"
答案 1 :(得分:2)
我过去几天试图解决这个问题,最后找到了解决办法:)
\x1b\r
和\x1d\r
对我不起作用。我在这里找到了解决方案:Using Control character in a script with tr and echo
我使用了以下代码:
escseq=`echo 'e' | tr 'e' '\035'`
使用$escseq
获取Ctrl +]。
这是如何运作的:
如果您的echo不能直接创建控制字符,tr实用程序可以为您执行此操作。 tr也理解八进制序列。制作你不想要的回声输出字符,然后将它们转换成你想要的控制字符。
例如,要制作4个字符的序列ESCape CTRL-a [CTRL-w,请使用如下命令:
escseq=`echo 'ea[w' | tr 'eaw' '\033\001\027'`
tr从echo中读取管道中的四个字符;它将e转换为ESCape(八进制033),a转换为CTRL-a(八进制001),将w转换为CTRL-w(八进制027)。左括号没有改变; tr按原样打印。
注意:如果您想使用shell脚本自动注销telnet会话,这非常有用。
答案 2 :(得分:0)
CTRL + R表示退出telnet的“^]”转义序列