Как я могу использовать Expect для ввода пароля для сценария Perl?

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

  •  21-09-2019
  •  | 
  •  

Вопрос

Я хочу автоматически вводить пароль при запуске сценария установки.Я вызвал сценарий установки, используя обратные кавычки в Perl.Теперь моя проблема в том, как мне ввести этот пароль, используя expect или что-то другое?

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

Когда вышеуказанное выполняется, печатается строка пароля:

Enter password for the packagekey: 

В строке выше я хочу ввести пароль.

Это было полезно?

Решение

использовать Ожидайте.pm.

Этот модуль специально разработан для программного управления приложениями, требующими обратной связи с пользователем.

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

Другие советы

Если программа считывает пароль со стандартного ввода, вы можете просто ввести его:

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

Если нет, Expect или PTY.

Вы можете сохранить пароль в файле и во время запуска сценария установки прочитать пароль из файла.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top