2016-05-31 51 views
1

我正在使用expect命令来处理IOS自动路由器上的指令自动化脚本。最后期望指令未执行

这里是我写的剧本:

#!/bin/expect 
#log_user 0 
set timeout 60 

set mode [lindex $argv 0] 
spawn ssh [email protected] 


expect "*assword:" { 
    send "mypassword\r" 
} 

expect "*>" { 
    send "enable \r" 
} 

expect "*#" { 
    send "conf t \r" 
} 

expect "*(config)" { 
     send "interface Serial0/0/0 \r" 
     send "clock rate 14400\r" 
} 

我的问题是,这个脚本在 “ROUTER1(配置)#” 状态停止。 但是,如果我在脚本的末尾放置了一条interact命令,所有这些都可以正常工作。用户正确进入接口配置模式,时钟频率得到更新。 但事实是,我不希望用户进行交互。

所以,我真的不明白是怎么回事,为什么我不能就这样结束这样的脚本...

如果您有任何线索......?

+0

用'expect -d'运行脚本并检查调试输出以查看您的模式是否匹配。 –

回答

1

我终于自己解决了我的问题。

这是一个有点cheaty,但是......它的工作原理。

鉴于这是最后expect命令不工作,我添加了一个最后的“无用的期望”在我的脚本的末尾:

expect "*(config)" { 
     send "interface Serial0/0/0 \r" 
} 
expect "*(config-if)" { 
     send "clock rate 14400\r" 
} 
expect "*(config-if)" { 
     send "end" 
     close 
} 

无论如何,如果有人有一个正确的方式做它,我仍然打开

+0

这就是问题所在。你的*发送速度太快,不会等待'ssh'进程退出*。 – pynexj

+0

是的,但即使脚本结尾处有*睡眠5 *,它仍然不起作用... – Razaborg