1

シグナリング ポイント スイッチであるスイッチに接続しようとしています。

ログイン端末にアクセスするには、以下のコマンドを実行する必要があります。

  1. telnet IP ポート
  2. CTRL+A を送信
  3. プロンプトを表示 ">"
  4. コマンド login:uid=user を送信します。
  5. パスワードの要求は、パスワードを提供します。
  6. ターミナル ">" を取得します

次に、さらに先に進むためにいくつかのコマンドを実行し続ける必要がありますが、CTRL + A を送信しているときに問題に直面しています。

Expectを使用して「ctrl + A」を送信すると、「^ A」が出力され、待機しても端末が提供されません。

そのため、コマンドを「ctrl + A \ n」に変更してスクリプトを変更しました。これにより、端末が表示されますが、次の端末プロンプトで改行が表示されます。

以下の出力のように:

^A
^A
^A

>

wait's here at next line.

これは、次のコマンドの正規表現 ">" と一致せず、ログイン名を送信しません。

最初のコマンド「^A」が端末に到達しない理由を誰か教えてもらえますか? そして、ターミナルを取得する前にコマンドが 3 回実行されたのはなぜですか?

単一のctrl + Aで正常に機能する手動シナリオ

私のサンプルコード:

use Expect;

my $exp = Expect->spawn("telnet 10.10.1.35 2020");

$exp->expect($timeout,
               [ qr/]'./ => sub {my $exp = shift;
                                    $exp->send("\cA\n");
                                      } ]
);
$exp->expect($timeout,
               [ qr/>/ => sub { my $exp = shift;
                                     $exp->send("login:uid=user\n");
                                      } ]
);
$exp->expect($timeout,
               [ qr/Enter Password :/ => sub { my $exp = shift;
                                     $exp->send("xxx\n");
                                      } ]
);

ありがとう、プラディープ。

4

1 に答える 1