2013-03-05 139 views
0

我編寫了一個Expect腳本,該腳本登錄到遠程系統,按順序執行一些命令並在日誌文件中捕獲輸出。通過預期發送兩次命令

除了事實上,一切正在發生,當我檢查日誌文件時,一些命令似乎被髮送兩次,以致下一個要發送的命令出現在前一個命令的輸出中間。它也會在檢測到提示時再次發送(這是正確的執行)。而且,這個問題不會發生在所有情況下,這更令人困惑。

我想補充一點,我已經定製了包含這個「--->」的提示。這是爲了更容易由另一個腳本輸出解析。

這裏的期望碼,

set prompt "(]|%|#|>|\\$)" 

# go to bash shell 
expect -re $prompt 
send "/bin/bash\r" 

# customize the prompt 
expect -re $prompt 
send "PS1=\"\\[email protected]\\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---- 

希望你有想法。

我不明白這種行爲,也不能在其他地方找到任何解決方案。有任何想法嗎?

+0

顯示更多代碼請 – 2013-03-05 16:00:20

+0

完成,請檢查出來,謝謝。 – 2013-03-06 07:06:34

回答

1

有一點邏輯性問題:在發送PS1=...之後,您會期待舊的提示。然後在循環內部,在發送另一個命令之前,您期待新的提示。這有幫助嗎?

send "PS1=\"\\[email protected]\\H ---> \"\r" 
set newPrompt { ---> $} 
expect -re $newprompt 
set commFile [open commands.txt] 
while {[gets $commFile theLine] >= 0} { 
    send "$theLine\r" 
    expect -re "$newPrompt" 
} 
+0

這工作!非常感謝,我沒有意識到我期待兩次併發送一次:) – 2013-03-07 07:38:05