過度のプロンプトを処理するためのスクリプトを作成していますexpect
。
bash
私が使用するスクリプトは、次の2つの順序のいずれかに従うことができます。
prompt1 -> prompt2 -> prompt3
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
私はこれがあなたが望むものだと思います:expect
waitコマンド誰でも「ヒント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」には対応する操作がないため、期待されるコマンドは終了します。