Come posso usare Aspettatevi di inserire una password per uno script Perl?
Domanda
Vorrei entra automaticamente una password durante l'esecuzione di uno script di installazione. Ho invocato lo script di installazione utilizzando le backticks in Perl. Ora il mio problema è come faccio a entrare in quella password utilizzando expect
o qualcos'altro?
my $op = `install.sh -f my_conf -p my_ip -s my_server`;
Quando viene eseguito quanto sopra, viene stampata una riga password:
Enter password for the packagekey:
Nella riga sopra desidero inserire la password.
Soluzione
Questo modulo è appositamente studiata per il controllo programatic di applicazioni che richiedono risposte utente
#!/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;
}
]);
Altri suggerimenti
Se il programma legge la password dallo standard input, si può semplicemente pipe in:
`echo password | myscript.sh (...)`
In caso contrario, si aspettano o PTY.
È possibile salvare la password in un file e durante l'esecuzione dello script di installazione, leggere la password dal file.