2017-02-22 56 views
0

您好,我正在使用expect來自動執行登錄任務。 但如果密碼連字符 啓動腳本失敗我怎麼能逃脫在期望腳本中轉義連字符和引號

我有很多的麻煩正確轉義'「或其它字符有沒有一種方法我可以編碼我所有的人物和發送所期望的編碼字符串爲它發送

之前解碼這是我的腳本

#!/usr/bin/expect -f 
spawn ssh -o "PubkeyAuthentication no" -l user 10.10.10.10 
expect "password: " 
send "-cpass\'ok\r" 
expect "$ " 
+0

你想逃避單引號還是空格嗎? – Inian

回答

1

從手冊頁:

- 標誌強制下一個參數被解釋爲一個字符串,而不是一個標誌。任何字符串都可以前面加「 - 」,不管它是否爲 或者它實際上看起來像是一個標誌 。這提供了一種可靠的機制來指定可變字符串,而不會被意外地看起來像標誌的那些字符串絆倒。 (所有 字符串開始以「 - 」保留供未來的選擇。)

這意味着你應該寫你的send類似:

send -- "-cpass\'ok\r" 

注意:你有問題,試圖通過任何以連字符開頭的字符串;這將不起作用:send "-cpass",如果您的字符串有連字符,則需要使用--標誌。

-1

你可以嘗試保存您的密碼在一個變量:

password=-cpass\'ok\r 
send "$password" 

您只需在每個',"或空格前面寫上\即可。

+0

Tcl/Expect不支持'var = value'語法。 – pynexj