IF文を使用してExpectで分岐を作成する

IF文を使用してExpectで分岐を作成する

過度のプロンプトを処理するためのスクリプトを作成していますexpect

bash私が使用するスクリプトは、次の2つの順序のいずれかに従うことができます。

  1. prompt1 -> prompt2 -> prompt3
  2. prompt1 -> prompt3

つまり、時には理解できないこともありますprompt2。だから私の質問は次のとおりです。expect確認しprompt2て存在する場合は、aを送信してy続行するスクリプトをどのように作成できますか?それ以外の場合は続きます。

編集:@glennのコメントと回答に感謝します!後で他の人に役立つように質問をより明確にしようとします。私が作業している特定のスクリプトは、bashサーバーからいくつかのデータをダウンロードすることです。通常、スクリプトを実行すると、次のことが起こります。

Do you want to download data from *server name*?
y
Do you want to download data from *some directory within server*?
y
...

ただし、このスクリプトを実行すると、サーバーにまだ接続されていないことがあります。そのため、サーバーに接続されていることを確認する部分をスクリプトに含めました。それ以外の場合は、次のような別のメッセージが表示されます。

Do you want to download data from *server name*?
y
Looks like you are not connected to *server name*! Want to connect now?
y
Do you want to download data from *some directory within server*?
y
...

答え1

私はこれがあなたが望むものだと思います:expectwaitコマンド誰でも「ヒント2」または「ヒント3」

expect "prompt1"
send "answer to prompt1\n"
expect {
    "prompt2" {send "y\n"; exp_continue}
    "prompt3"
}
send "answer to prompt3\r"

exp_continue基本的にループです。この Expect コマンドを維持しながら、リストされたパターンを探し続けます。

「prompt3」には対応する操作がないため、期待されるコマンドは終了します。

関連情報