多是原來的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內