我可以在 shell 脚本中打开一个衍生的 telnet 会话来运行一些命令。之后,我尝试使用 send 发送转义字符(请参见下面的语法),但它永远不会到达我能够关闭会话的部分。有人可以指出我正确的方向吗?由于这个问题,我以这种方式打开了多个 telnet 会话,我不想这样做。
send "^]\r"
expect "telnet>"
send "close\r"
close $spawn_id
您发送ESC 控制序列。尝试send "\x1b\r"
从过去几天开始,我一直在尝试解决这个问题,终于找到了解决方案:)
并 没有为我工作\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 会话,这将非常有用。
CTRL+R 代表退出telnet的“^]”转义序列