2017-07-20 9 views
-1

サーバー上でセットアップを実行するためのスクリプトを作成しましたが、sendステートメントの実行中にスキップされ、その他のステートメントの実行が実行されています。私はそれが実行取得されていない前にコマンドを送信疑問を持っている予期しないスクリプトが機能しない状態を送信しました。

enter code here[code written][1] 




====================ERROR m getting============================= 
Enter the name of the new namespace you want to create [coe_ns] : 
Enter the name of the clearinghouse you want to create [coe_ch] : invalid command name "C" 
    while executing 
"C" 
    invoked from within 
"expect -re "* Option to execute (Continue/Restart/Quit) [C]: $"" 
    (file "./TNS_Server_Setup.sh" line 21) 

、また、私は正しい方法を「ENTER」渡しています:

以下は私のスクリプトです。

答えて

0

あなたが

を書くときシェルはバッククォートを使用していますか $(...)と同じように(コマンド置換構文として角括弧を使用していますが。だから、
expect -re "* Option to execute (Continue/Restart/Quit) [C]: $" 

[C]を見て、コマンドCを起動しようと期待しています。

期待します

また、スタンドアロンの*は、正規表現の特殊文字であるため、「量指定子オペランドが無効です」というエラーが発生します。エスケープするか、式から削除する必要があります。

私たちはあなたのsendコマンドを見ることができないので、あなたは質問にあなたのコードが含まれていませんでした(あなたは、単一引用符を使用したいシェルのように)コマンド置換

expect -re {Option to execute (Continue/Restart/Quit) [C]: $} 

を阻害する別の引用メカニズムを使用しますあなたが複数のものと一致する必要がある場合は

、期待するコマンドはそれを行うことができます::、しかし、あなたが希望send "\r"


アップデート「だけ入力してくださいを打つ」とそれにのリストを与えますペア。 Expectはそれらのいずれかと一致します。

expect { 
    -re {Option to execute (Continue/Restart/Quit) [C]: $} { 
     send "\r" 
     exp_continue 
    } 
    -re {enter the datatype $} { 
     send "array\r" 
     exp_continue 
    } 
    "some pattern that denotes we're done" 
} 
+0

ありがとうグレン、私の期待出力に2行があるかどうかは別のクエリがあります。行または正規表現の両方が一致していることを確認してください。 例: スクリプトからデータ型 を入力してください。expect -re "データ型$を入力してください"と思ったらうまくいくはずです。 –