Comment puis-je utiliser Attendez-vous à entrer un mot de passe pour un script Perl?

StackOverflow https://stackoverflow.com/questions/1366751

  •  21-09-2019
  •  | 
  •  

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.

Était-ce utile?

La solution

Expect.pm .

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top