كيف يمكنني استخدام توقع إدخال كلمة مرور لنص Perl؟

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

  •  21-09-2019
  •  | 
  •  

سؤال

أرغب في إدخال كلمة مرور تلقائيًا أثناء تشغيل برنامج نصي للتثبيت. لقد استدعت البرنامج النصي للتثبيت باستخدام backticks في بيرل. الآن مشكلتي هي كيف أدخل كلمة المرور هذه باستخدام expect أو أي شيء آخر؟

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

عند تنفيذ ما ورد أعلاه ، تتم طباعة خط كلمة المرور:

Enter password for the packagekey: 

في السطر أعلاه ، أود إدخال كلمة المرور.

هل كانت مفيدة؟

المحلول

استعمال توقع.

تم تصميم هذه الوحدة بشكل خاص للتحكم البرنامجي في التطبيقات التي تتطلب ملاحظات المستخدم

#!/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 (...)`

إذا لم يكن كذلك ، توقع أو ptys.

يمكنك حفظ كلمة المرور في ملف وأثناء تشغيل البرنامج النصي للتثبيت ، اقرأ كلمة المرور من الملف.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top