2016-11-11 21 views
0

我想捕獲遠程設備的提示。如何從終端使用Tcl捕獲提示,或者如何將提示與顏色代碼相匹配?

-regexp {[\$\#]\s*$} { 
     # capture the prompt 
} 

「[\ $#] \ s * $」不適用於帶顏色代碼的提示。

+1

使用'expect -d'運行腳本以啓用詳細的調試輸出,並向我們顯示匹配失敗的位置。期望應該告訴你到底是什麼樣的提示。 –

+1

我有時候使用的一種技術是在登錄時顯式設置提示'spawn ssh ...;發送「PS1 ='>'\ r」; expect -re {> $}' –

回答

0

顏色代碼作爲字符流中的轉義序列發送。因此,如果你有他們,你需要匹配他們。每個轉義序列都是ESC字符(Esc^[,\u001b),後面跟着各種以;(這是顏色設置的字符;還有其他字符,它們有點複雜)終止。雖然是的,但可以將它們與更復雜的正則表達式相匹配,將提示設置爲您可以控制的簡單內容極其容易。

# ... 
expect "ssword: " 
send $password\r 
# Note, *NO* expect at this point as matching it is hard 
send "PS1='> '\r" 
expect -regexp {> $} 

彩色提示對人們來說足夠好,但它們對於腳本來說很尷尬。壓倒一切會讓你的生活變得更輕鬆。 (您也可以嘗試將終端設置爲不支持顏色的終端類型。)

+0

我需要這個腳本在各種平臺上工作,包括* nix,windows等等。「PS1 ='>'\ r」不適用於所有這些平臺。我只需要捕獲提示呢? – user3837980