Comment puis-je utiliser Attendez-vous à entrer un mot de passe pour un script Perl?
Question
Je souhaite saisir automatiquement un mot de passe lors de l'exécution d'un script d'installation. Je l'ai invoqué le script d'installation en utilisant les backticks dans Perl. Maintenant, ma question est de savoir comment puis-je entrer ce mot de passe en utilisant expect
ou autre chose?
my $op = `install.sh -f my_conf -p my_ip -s my_server`;
Lorsque le dessus est exécutée, une ligne de mot de passe est imprimé:
Enter password for the packagekey:
Dans la ligne ci-dessus je souhaite entrer le mot de passe.
La solution
Ce module est particulièrement adapté pour le contrôle programmatique d'applications qui nécessitent la rétroaction d'utilisateur
#!/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;
}
]);
Autres conseils
Si le programme lit le mot de passe de l'entrée standard, il vous suffit tuyau dans:
`echo password | myscript.sh (...)`
Dans le cas contraire, ou Expect PTYs.
Vous pouvez enregistrer le mot de passe dans un fichier et lors de l'exécution du script d'installation, lisez le mot de passe du fichier.