¿Cómo puedo usar esperar que introduzca una contraseña para un script Perl?

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

  •  21-09-2019
  •  | 
  •  

Pregunta

Deseo introducir una contraseña de forma automática durante la ejecución de un script de instalación. He invocado el script de instalación utilizando los acentos abiertos en Perl. Ahora mi problema es ¿Cómo se introduce la contraseña utilizando expect o algo más?

my $op = `install.sh -f my_conf -p my_ip -s my_server`;

Cuando se ejecuta el anterior, una línea de contraseña se imprime:

Enter password for the packagekey: 

En la línea anterior Deseo introducir la contraseña.

¿Fue útil?

Solución

Expect.pm .

Este módulo está adaptado especialmente para el control programático de aplicaciones que requieren la regeneración de usuario

#!/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;
                    }
                ]);

Otros consejos

Si el programa lee la contraseña de la entrada estándar, sólo puede tubería en:

`echo password | myscript.sh (...)`

Si no es así, esperamos o PTY.

Puede guardar la contraseña en un archivo y mientras se ejecuta el script de instalación, lea la contraseña del archivo.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top