リモートシステムにログインし、いくつかのコマンドを順番に実行し、出力をログファイルにキャプチャするExpectスクリプトを作成しました。
ログファイルを確認すると、一部のコマンドが2回送信されたように見え、次に送信されるコマンドが前のコマンドの出力の途中に表示されることを除いて、すべてが正常に実行されています。また、プロンプトを検出すると(これは正しい実行です)、再度送信されます。また、この問題はすべての場合に発生するわけではなく、さらに厄介です。
この「--->」を含めるようにプロンプトをカスタマイズしたことを追加したいと思います。これは、別のスクリプトによる出力の解析を容易にするためです。
これが期待コードです、
set prompt "(]|%|#|>|\\$)"
# go to bash shell
expect -re $prompt
send "/bin/bash\r"
# customize the prompt
expect -re $prompt
send "PS1=\"\\u@\\H ---> \"\r"
# set new prompt into variable
expect -re $prompt
set newPrompt " ---> "
# opens file containing command list
set commFile [open commands.txt]
# reads each line containing commands from file, stores it in "$theLine" variable and sends it.
while {[gets $commFile theLine] >= 0} {
expect "$newPrompt"
send "$theLine\r"
}
close $commFile
これが私の出力の表示方法です。
"prompt --->" command1
----output----
----output----
command2
----output----
----output----
"prompt --->" command2
----output----
----output----
あなたがアイデアを得ることを願っています。
私はこの振る舞いを理解しておらず、他の場所でこれに対する解決策を見つけることができませんでした。何か案は?