Wie kann ich erwarten, ein Passwort für ein Perl-Skript eingeben?
Frage
Ich möchte automatisch ein Kennwort eingeben, während ein Installationsskript ausgeführt wird. Ich habe das Skript mit den Backticks in Perl installieren aufgerufen. Nun meine Frage ist, wie gebe ich das Passwort mit expect
oder etwas anderes?
my $op = `install.sh -f my_conf -p my_ip -s my_server`;
Wenn die oben ausgeführt wird, wird ein Passwort Zeile gedruckt:
Enter password for the packagekey:
In der obigen Zeile mag ich das Passwort einzugeben.
Lösung
Dieses Modul ist besonders für programatic Steuerung von Anwendungen zugeschnitten, die Benutzerrückmeldung erfordert
#!/usr/bin/perl
use strict;
use warnings;
use Expect;
my $expect = Expect->new;
my $command = 'install.sh';
my @parameters = qw(-f my_conf -p my_ip -s my_server);
my $timeout = 200;
my $password = "W31C0m3";
$expect->raw_pty(1);
$expect->spawn($command, @parameters)
or die "Cannot spawn $command: $!\n";
$expect->expect($timeout,
[ qr/Enter password for the packagekey:/i, #/
sub {
my $self = shift;
$self->send("$password\n");
exp_continue;
}
]);
Andere Tipps
Wenn das Programm liest das Passwort von der Standardeingabe, können Sie nur eine Pipe in:
`echo password | myscript.sh (...)`
Wenn nicht, erwarten oder PTYs.
Sie können das Kennwort in einer Datei speichern und während das Skript installiert ausgeführt wird, lesen Sie das Kennwort aus der Datei.