6

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

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

3 回答 3

10

您发送ESC 控制序列。尝试send "\x1b\r"

于 2013-10-16T19:25:54.230 回答
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 也理解八进制序列。使您的 echo 输出您不想要的字符,并让 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 会话,这将非常有用。

于 2014-02-04T19:11:14.263 回答
1

CTRL+R 代表退出telnet的“^]”转义序列

于 2018-03-08T15:20:42.110 回答