升級Mac Sierra 後 expect 異常問題

多是原來的expect腳本寫的不規範,但在升級前一直能夠正常運行,主要用自動鏈接ssh服務器bash

原腳本以下:服務器

#!/usr/bin/expect
spawn ssh -p 22 user@192.168.1.8
set timeout 30 
expect "*password: "
send "user_password\r"
expect "$"
send "su\r"
expect "密碼:"
send "root_password\r"
expect "#"
send "ls\r"
interact

但在升級Mac Sierra後,腳本完成user登陸後,就一直卡在那,等待後會出現交互亂了的狀況,對上面腳本 進行修改後,解決了這個問題(因爲這個問題,都有想退回上一個mac版本的衝動了)ssh

 

調整後腳本以下:spa

#!/usr/bin/expect
set timeout 30  
spawn ssh -p 22 user@192.168.1.8
expect {  
        "*(yes/no)?"
        {send "yes\r";exp_continue}
        "*password:"
        {send "user_password\r";exp_continue}
        "*\\$"
        {send "su\r";exp_continue}
        "*密碼:"
        {send "root_pasword\r"}
}
interact

上面的腳本主要包括的幾項說明:code

一、增長了第一次登陸時,確認證書的過程class

二、經過增長exp_continue,可根據當前控制檯反饋信息繼續匹配,自動發送對應消息登錄

三、$爲expect的特殊字符,須要進行轉義,加\\密碼

四、最後一次自動輸入後,不要加exp_continue,不然,界面會卡住,等待下一次的匹配動做im

 

說明:若是在腳本中,如相同一個匹配信息,如 # 下須要執行多條命令,能夠腳本

一、採用&&鏈接多條命令

二、不採用expect{}方式,或不放在expect內

相關文章
相關標籤/搜索