2016-05-31 85 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