升级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内

相关文章
相关标签/搜索