我在Perl中使用Expect Perl模块执行此操作。无论如何,在登录并获得提示后,我正在尝试验证我实际上能够得到提示,并且我正在尝试设置PS1。我将远程提示设置为'Expect#',但是将exp_internal设置为1的输出不是我所期望的。
我的设置如下:
$exp->send("export PS1='Expect # '\r");
然后匹配如下
qr/(?<!export PS1=.)Expect #\s?(?!export)/
这是我在将exp_internal设置为1时看到的输出:
\033]0;root@localhost:~\007Expect # '
我不明白为什么在将PS1设置为'Expect#'之后仍然显示原始提示(即[root @ localhost:〜])。
答案 0 :(得分:2)
为我工作
use strict;
use warnings;
use feature qw( say );
use Expect qw( );
my $exp = Expect->new();
#$exp->exp_internal(1);
$exp->spawn('bash') or die;
$exp->send("export PS1='Expect ''# '\r");
say "\n\nMatched rule ", $exp->expect(1, "Expect #") // 'TIMEOUT';
(注意我稍微更改了send
以使用文字字符串作为提示,因为我无法弄清楚如何为提示指定正则表达式。你浪费了我们很多时间没有证明你的问题。)
输出:
export PS1='Expect ''# '
{1} ikegami@host [~]$ export PS1='Expect ''# '
Expect #
Matched rule 1
由于我在调用send
之前没有等待原始提示,我仍然看到原始提示,但这并不重要,因为我没有收听该提示。