Perl 使用Expect模块的Telnet会话无法发送命令ctrl+;A.
我正在尝试连接到交换机,它是信令转辙机 我需要执行以下命令才能进入登录终端Perl 使用Expect模块的Telnet会话无法发送命令ctrl+;A.,perl,switch-statement,telnet,expect,Perl,Switch Statement,Telnet,Expect,我正在尝试连接到交换机,它是信令转辙机 我需要执行以下命令才能进入登录终端 telnet IP端口 发送CTRL+A 获取提示“>” 发送命令登录名:uid=user 密码请求提供密码 获取终端“>” 然后我必须继续执行一些命令才能继续,但我的问题是,在发送CTRL+A时,我遇到了一个问题 当我使用Expect发送“ctrl+A”时,它只打印“^A”,等待不会提供终端 因此,我修改了脚本,将命令更改为“ctrl+A\n”,这将为我提供终端,但在下一个终端提示符上有新行 与以下输出类似: ^A ^
^A
^A
^A
>
wait's here at next line.
它与我的下一个命令正则表达式“>”不匹配,并且不发送登录名
有人能告诉我为什么我的第一个命令“^A”不能让我使用终端吗?为什么在我拿到终端之前命令被执行了三次
I手动场景对于单个ctrl+A操作很好
我的示例代码:
use Expect;
my $exp = Expect->spawn("telnet 10.10.1.35 2020");
$exp->expect($timeout,
[ qr/]'./ => sub {my $exp = shift;
$exp->send("\cA\n");
} ]
);
$exp->expect($timeout,
[ qr/>/ => sub { my $exp = shift;
$exp->send("login:uid=user\n");
} ]
);
$exp->expect($timeout,
[ qr/Enter Password :/ => sub { my $exp = shift;
$exp->send("xxx\n");
} ]
);
谢谢,,
Pradeep.尝试使用发送“\01”
请咨询更多信息
我喜欢按字面意思输入大多数控制字符,因为生成的脚本更具可读性。但是,您的编辑器必须允许这样做。例如,假设您要发送一个控件-a。通常,大多数编辑器将其显示为^a,但您不能只输入^a和a。(这将只发送这两个字符。)大多数编辑器都有一些简单的引用机制,允许您按字面意思输入下一个字符。例如,使用emacs,我可以输入^Q^A,这将添加单个字符^A
或者,Tcl提供了一种使用八进制或十六进制编码的方法。八进制编码机制比十六进制更不容易出错,因此我将演示如何使用八进制。例如,由于^A在ASCII中具有八进制值1,因此要发送^A:
send "\01"
尝试
$exp->send(chr(1))代码>发送Ctrl-AI得到了Ctrl+a字符,它没有再移动,只是在等待。