如何使用Expect设置远程环境变量?

时间:2013-05-12 09:20:30

标签: perl expect

我在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:〜])。

1 个答案:

答案 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之前没有等待原始提示,我仍然看到原始提示,但这并不重要,因为我没有收听该提示。