多是原来的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内