如何通过生成的telnet会话发送转义字符^]?

时间:2013-10-16 18:55:21

标签: tcl telnet

我能够在shell脚本中打开一个生成的telnet会话来运行一些命令。之后,我尝试使用send发送转义字符(请参阅下面的语法),但它永远不会到达我能够关闭会话的部分。有人能指出我正确的方向吗?由于这个问题,我以这种方式开放了多个telnet会话,我不想这样做。

send "^]\r"
expect "telnet>"
send "close\r"
close $spawn_id 

3 个答案:

答案 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的“^]”转义序列