我正在尝试连接到信令点开关的开关。
我需要执行以下命令才能进入登录终端。
然后我必须继续执行一些命令才能更进一步,但我的问题是我在发送CTRL + A时遇到问题。
当我发送" ctrl + A"使用Expect它只是打印" ^ A"等等并没有为我提供终端。
因此,我通过将命令更改为" ctrl + A \ n"来修改脚本。它给了我终端,但在我的下一个终端提示符上有新行。
如下面的输出:
^A
^A
^A
>
wait's here at next line.
无法匹配我的下一个命令正则表达式">"并且不会发送登录名。
有人可以告诉我为什么我的第一个命令" ^ A"没能让我终端?为什么命令在我到达终端之前被执行了三次?
我的手动场景它适用于单个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");
} ]
);
谢谢你, 普拉迪普。
答案 0 :(得分:0)
尝试使用send "\01"
请咨询更多信息 http://expect.sourceforge.net/FAQ.html#q54
我喜欢从字面上输入大多数控制字符 - 因为生成的脚本更具可读性。但是,您的编辑必须允许这样做。例如,假设您要发送Control-A。传统上,大多数编辑器将其显示为^ A,但您不能只输入^和A.(这将只发送这两个字符。)大多数编辑器都有一些简单的引用机制,允许您逐字输入下一个字符。例如,使用emacs,我可以输入^ Q ^ A,这将添加单个字符^ A。
或者,Tcl提供了使用八进制或十六进制进行编码的方法。八进制编码机制比十六进制更不容易出错,所以我将演示使用八进制。例如,由于^ A在ASCII中具有八进制值1,因此要发送^ A:
send "\01"