我能够在shell脚本中打开一个生成的telnet会话以运行一些命令。之后,我尝试使用send发送转义字符(请参见下面的语法),但它从未到达我能够关闭会话的部分。有人能指点我正确的方向吗?由于这个问题,我通过这种方式打开多个telnet会话,这不是我想要的。
send "^]\r"
expect "telnet>"
send "close\r"
close $spawn_id
我能够在shell脚本中打开一个生成的telnet会话以运行一些命令。之后,我尝试使用send发送转义字符(请参见下面的语法),但它从未到达我能够关闭会话的部分。有人能指点我正确的方向吗?由于这个问题,我通过这种方式打开多个telnet会话,这不是我想要的。
send "^]\r"
expect "telnet>"
send "close\r"
close $spawn_id
您发送了 ESC 控制序列。尝试使用 send "\x1b\r"
\r
真的必要吗? - potrzebie我过去几天一直在尝试解决这个问题,最终找到了解决方案 :)
\x1b\r
和 \x1d\r
对我没用。我在这里找到了解决方案:使用 tr 和 echo 命令在脚本中使用控制字符
我使用了以下代码:
escseq=`echo 'e' | tr 'e' '\035'`
使用$escseq
获取Ctrl +]。
工作原理:
如果您的echo无法直接生成控制字符,则tr实用程序可以为您完成此操作。tr也理解八进制序列。使您的echo输出您不需要的字符,并让tr将它们转换为您需要的控制字符。
例如,要生成4个字符的序列ESCape CTRL-a [ CTRL-w,请使用以下命令:
escseq=`echo 'ea[w' | tr 'eaw' '\033\001\027'`
命令从echo管道中读取四个字符;它将“e”转换成ESCape(八进制033),将“a”转换成CTRL-a(八进制001),将“w”转换成CTRL-w(八进制027)。左括号不变; tr按原样打印。
注意:如果要使用shell脚本自动注销telnet会话,则此功能非常有用。
set escseq "echo 'e' | tr 'e' '\035'"
。 - harpervilleCTRL+R代表着"^]"转义序列,用于退出telnet。