4

私はPerlでExpectを使用してリモートマシンに接続し、特定の機能を実行しています。サンプルコードは次のようなものです

$outfile="ls -lrt";
$outfile1="output";

$exp->expect(30,-re,".*bash-.*" => sub{$exp->send("$outfile2 >$outfile \r")});
$exp->expect(60,-re,".*bash-.*" => sub{$exp->send("$shayam > $Ram \r")});

最初の式が失敗した場合でも、60秒間待機し、2番目のステートメントを実行します。最初のステートメントだけが合格した場合は続行する必要があることを確認したいだけです。

4

1 に答える 1

4

ここに記載されているExpect.pmモジュールを使用していると思います。そこに述べられているように:

配列コンテキストで呼び出された場合、expect()は($ matched_pa​​ttern_position、$ error、$ successfully_matching_string、$ before_match、および$ after_match)を返します。

したがって、正規表現が失敗した場合と送信が失敗した場合の両方でエラーが発生する可能性があるため、配列コンテキストで呼び出すことをお勧めします。

my ($matched_pattern_position, $error,
  $successfully_matching_string,
  $before_match, $after_match) =
  $exp->expect(30
  , -re,".*bash-.*" =>
    sub{$exp->send("$outfile2 >$outfile \r")}
);

$exp->expect(60
  ,-re,".*bash-.*" =>
    sub{$exp->send("$shayam > $Ram \r")}
) if !defined $error;
于 2010-07-16T12:47:17.227 に答える