-1

我在 Perl 中使用 Expect Perl 模块执行此操作。无论如何,在登录并获得提示后,我正在尝试验证我是否真的能够获得提示,并且我正在尝试设置 PS1。我将远程提示设置为“期望 #”,但将 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:~])。

4

1 回答 1

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,所以我仍然看到原始提示,但这没什么大不了的,因为我没有在听那个提示。

于 2013-05-12T13:56:18.727 回答