Я использую Perl, ожидая ввода пароля в интерактивной программе. Perl выводит правильный пароль, но устанавливает его по-другому.
#!/bin/perl
use Expect;
my $hostname = qx! /usr/bin/hostname !;
my $Passwd = `./ensite_passwd solidcore $hostname`;
my $sadminPasswd = quotemeta $Passwd;
chomp $sadminPasswd;
chop $sadminPasswd;
print "password is $sadminPasswd \n\n";
my $sadminPasswd = Expect->spawn("/sbin/sadmin", "passwd")
or die "Cannot spawn /sbin/sadmin $!\n";
$sadminPasswd->expect(300,
[qr/New Password:/ => sub {
my $fh = shift;
$fh->send("${sadminPasswd}\n");
print "sent '${sadminPasswd}'\n";
exp_continue;
}
],
[qr/Retype Password:/ => sub {
my $fh = shift;
$fh->send("p2c4f8j5\n");
#$fh->send("${sadminPasswd}\n");
#print "sent '${sadminPasswd}'\n";
print "sent 'p2c4f8j5'\n";
}
]);
$sadminPasswd->soft_close();
Я получаю результат ниже:
swdvssd0046$ sudo perl test.pl
password is p2c4f8j5
New Password:sent 'Expect=GLOB(0x23ae188)'
Retype Password:sent 'p2c4f8j5'
Passwords do not match.
swdvssd0046$
Я вообще не понимаю 'Expect=GLOB(0x23ae188)'. Я знаю, что пароль для этого хоста будет «p2c4f8j5», поэтому я вручную ввел его в код подтверждения пароля. Есть идеи, что мне не хватает?