我想捕獲遠程設備的提示。如何從終端使用Tcl捕獲提示,或者如何將提示與顏色代碼相匹配?
-regexp {[\$\#]\s*$} {
# capture the prompt
}
「[\ $#] \ s * $」不適用於帶顏色代碼的提示。
我想捕獲遠程設備的提示。如何從終端使用Tcl捕獲提示,或者如何將提示與顏色代碼相匹配?
-regexp {[\$\#]\s*$} {
# capture the prompt
}
「[\ $#] \ s * $」不適用於帶顏色代碼的提示。
顏色代碼作爲字符流中的轉義序列發送。因此,如果你有他們,你需要匹配他們。每個轉義序列都是ESC字符(Esc,^[
,\u001b
),後面跟着各種以;
(這是顏色設置的字符;還有其他字符,它們有點複雜)終止。雖然是的,但可以將它們與更復雜的正則表達式相匹配,將提示設置爲您可以控制的簡單內容極其容易。
# ...
expect "ssword: "
send $password\r
# Note, *NO* expect at this point as matching it is hard
send "PS1='> '\r"
expect -regexp {> $}
彩色提示對人們來說足夠好,但它們對於腳本來說很尷尬。壓倒一切會讓你的生活變得更輕鬆。 (您也可以嘗試將終端設置爲不支持顏色的終端類型。)
我需要這個腳本在各種平臺上工作,包括* nix,windows等等。「PS1 ='>'\ r」不適用於所有這些平臺。我只需要捕獲提示呢? – user3837980
使用'expect -d'運行腳本以啓用詳細的調試輸出,並向我們顯示匹配失敗的位置。期望應該告訴你到底是什麼樣的提示。 –
我有時候使用的一種技術是在登錄時顯式設置提示'spawn ssh ...;發送「PS1 ='>'\ r」; expect -re {> $}' –