2017-03-01 94 views
0

私はexpectスクリプトを使ってinstaller.shを呼び出すことに取り組んでいます きちんとしたインストールのためにうまくいきます。Expectスクリプト - さまざまな送信

しかし、インストーラが事前チェックに失敗した場合、送信の順序が異なり、注文の管理ができません。

spawn ./Installer.sh 
expect "change? (Y/N)" 
    send "Y\r" 
    expect "path" 
    send "$path\r" 
    expect "Enter selection" 
    send "1\r" 
    expect "path" 
    send "$path 
    exit 0 

2番目の「パス」が予想されると、インストーラは内部的に検証し、手順3に進み、処理を続行して終了します。

しかし、2番目の予想パスの後に、インストーラの事前チェックに失敗した場合は、それが存在し、最後のステップすなわちパスの再入力を促します。

現在、スクリプトが終了後に表示され、4回目のプロンプトを表示すると、それは無関係な3回目の応答を送信し続けます。スクリプトはmatch expect stringを検証しませんか?

Error : 
    "No Space. Exiting. 
    **Path: 1** 
    cp: cannot create regular file `1': Permission denied 
    send: spawn id exp5 not open 
     while executing 
    "send "path\r"" 

シェルスクリプトはさまざまな理由で終了し、最後に送信するように要求します。

セッションが進行中に最後の表示メッセージexpect_outを取得してそれを読んでそれに基づいて続行する方法はありますか?

spawn shellscript 
expect_1 
send_1 
expect_2 
send_2 
--sh stops and displays exiting... 
if expect_out(buffer)=exiting 
then 
expect_4 
send_4 
else 
expect_3 
send_3 
expect_4 
send_4 
exit 
+0

"catch"と一緒に使用できますか? – unNamed

+0

私は 'expect_before'コマンドを使って" Error "メッセージを見ると思います。 –

答えて

1

重要なことは、すぐに複数の異なるものをexpectにすることです。幸いにも、これは非常に簡単です。

expect { 
    "change? (Y/N)" { 
     # Something in here to respond to this case 
     # This bit is just code, but could be effectively empty too 
    } 
    "Exiting" { 
     # Now we've detected that the installer failed 
     send_user "oh no!\n" 
     exit 1 
    } 
} 

このフォームを使用している場合、あなたはexp_continueでそれを仕上げることにより、ハンドラスクリプト内から現在のexpectを再起動することができます。いつものように、実際のパターンとは何かを慎重に考える必要があります。

+0

ありがとうございます。\\ \ n \ r \ n \ r \ nパスを入力してください: "(spawn_id exp5)正確な文字列に一致してください"パス$を入力してください "?いいえ expect: "\ r \ nY \ r \ n \ r \ nパスを入力してください:\ r \ n"(spawn_id exp5)正確な文字列に一致してください "パス$を入力してください"?いいえ expect:timed out send: "/ proj/XXX/YYYY \ r"を{exp5}に送信 expect: "\ r \ nY \ r \ n \ r \ nパスを入力してください:\ r \ n" spawn_id exp5)はグロブパターン "Exiting"にマッチしますか? no /proj/XXX/YYYY' expectは、前の行を再帰的に追加します。私は複数の正規表現を試したが、毎回タイムアウトが発生します。 – Unixnewbie

関連する問題