【问题标题】:Perl expect code is not working for setting up passwordPerl 期望代码不适用于设置密码
【发布时间】:2019-08-16 10:26:56
【问题描述】:

我正在使用 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”,这就是为什么我在确认密码期望代码中手动输入它的原因。 知道我错过了什么吗?

【问题讨论】:

    标签: linux perl expect.pm


    【解决方案1】:

    使用警告; ...“我的”变量 $sadminPasswd 掩盖了同一范围内的早期声明

    感谢工具的回答!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多