0

リモートシステムにログインし、いくつかのコマンドを順番に実行し、出力をログファイルにキャプチャする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----

あなたがアイデアを得ることを願っています。

私はこの振る舞いを理解しておらず、他の場所でこれに対する解決策を見つけることができませんでした。何か案は?

4

1 に答える 1

1

論理的な問題が少しあります。送信した後PS1=...、古いプロンプトが表示されます。次に、ループ内で、別のコマンドを送信する前に新しいプロンプトが表示されることを期待します。これは役に立ちますか?

send "PS1=\"\\u@\\H ---> \"\r"
set newPrompt { ---> $}
expect -re $newprompt
set commFile [open commands.txt]
while {[gets $commFile theLine] >= 0} { 
    send "$theLine\r"
    expect -re "$newPrompt"
}
于 2013-03-06T12:02:08.200 に答える