我正在編寫一個Expect腳本,並且在處理shell提示時遇到問題(在Linux上)。我的預期腳本產生rlogin
,遠程系統使用ksh
。遠程系統上的提示包含當前目錄,然後是" > "
(空間大於空間)。腳本片段可能是:如何在預期腳本中刷新輸入緩衝區?
send "some command here\r"
expect " > "
這適用於簡單的命令,但事情開始時,我發送命令超出終端的寬度(或者更精確地出問題,什麼ksh
認爲是寬度終點站)。在這種情況下,ksh
會在交互式命令行中進行一些奇怪的水平滾動,這似乎會重寫提示並在輸出中附加一個額外的「>」。當然,這會導致Expect腳本在執行命令後出現輸出中出現多個提示時(我的腳本包含多個send
/expect
對),會感到困惑並且不同步。
我試過將遠程系統上的PS1
更改爲「prompt>」這類更具特色的東西,但是出現了類似的問題,這表明這不是解決問題的正確方法。
我在想什麼可能會有幫助的是腳本能夠告訴「我知道我現在正確地與遠程系統同步,所以現在刷新輸入緩衝區。」 expect
聲明有-notransfer
標誌,其中不會即使模式匹配,也會丟棄輸入緩衝區,所以我認爲我需要與此相反。
是否還有其他有用的技術可以用來使遠程shell的行爲更具可預測性?我知道Expect經歷了很多工作,以確保產生的會話出現與遠程系統交互,但我寧願一些更令人討厭的交互功能(例如水平滾動ksh
)被關閉。
非常好,這似乎正是我所需要的。 – 2009-12-10 21:18:59