Как я могу использовать Expect для ввода пароля для сценария Perl?
Вопрос
Я хочу автоматически вводить пароль при запуске сценария установки.Я вызвал сценарий установки, используя обратные кавычки в 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.
Вы можете сохранить пароль в файле и во время запуска сценария установки прочитать пароль из файла.
Не связан с StackOverflow