0
私はパスワード変数$pw
とコマンド変数$cmd
を持っています。私はback-tick
を使用してコマンドを実行した場合リモートで実行されたコマンドをperlで期待通りに出力する
$pw=UNIX password of a remote machine.
$cmd=Command to be executed in the remote machine.
は、今私は出力変数に何らかの値を取得することができます。
私は同じコマンドを実行する場合は、私は同じを達成するために期待しています。私は、コマンドの出力を変数に期待通りに走らせる方法を意味します。
は機能が似ている期待の私:
sub expt($$){
my $cmd;
my $timeout;
($cmd, $pw)[email protected]_;
$expect = Expect->new;
$expect->raw_pty(1);
printDebug("Running the command under expt");
$expect->spawn($cmd)
or die "Cannot spawn $cmd: $!\n";
$expect->expect($timeout,
[ qr/password:/i, #/
sub {
my $self = shift;
$self->send("$pw\n");
exp_continue;
}
],
[qr/Are you sure you want to continue connecting \(yes\/no\)?/
, sub { my $self = shift;
$self->send("yes\n");
exp_continue; }],
[qr/Unix password \(user\):/
, sub { my $self = shift;
$self->send("pw\n");
exp_continue; }
],
);
$expect->soft_close();
return 0;
}
そして私は、私は、リモート・ホストでスクリプトを実行することができています。これにより
expt($cmd,$pw);
のような関数を呼び出していますが、私の要件がにありますリモートホストの出力をローカル変数に格納します。
私はいくつかの期待パターンにマッチしているし、スクリプトがsshをやっていないので、他のツールでmachinsにログインしていますが、これらのツールもパスワードが必要なので、パスワード入力の回数を減らしています。私が与えたsshは、実際のスクリプトがパスワードを複数のパターンマッチに渡すだけの例であり、リモートホストの実行があるときは必ず出力が必要です。 – user1068861
正確です。私たちはあなたが尋ねる質問にのみ答えることができます;)このモジュールを使用して、 "send"、 "read_all"などの方法で遊ぶことができます。 – Ouki
私が '' seq 1 10'のiのために "pogo --namespace yap run --job-timeout 720000 --timeout 360000 -I @ yap.ws.yosprod.sp1"のようなコマンドを渡したとすると、echo $ i;スリープ3; done ''このコマンドは複数のホスト上で実行され、ホストは即座に決定しますが、私はこれらのコマンドの出力を実行可能にします – user1068861