Linux 未执行最后一条expect指令

Linux 未执行最后一条expect指令,linux,bash,expect,cisco-ios,Linux,Bash,Expect,Cisco Ios,我正在编写一个脚本,使用expect命令在IOS Cisco路由器上自动执行指令 这是我写的剧本: #!/bin/expect #log_user 0 set timeout 60 set mode [lindex $argv 0] spawn ssh myuser@10.0.0.254 expect "*assword:" { send "mypassword\r" } expect "*>" { send "enable \r" } expect "*#" {

我正在编写一个脚本,使用expect命令在IOS Cisco路由器上自动执行指令

这是我写的剧本:

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

set mode [lindex $argv 0]
spawn ssh myuser@10.0.0.254


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(config)#”状态。 但是,如果我在脚本末尾添加了一个
interact
命令,所有这些都可以正常工作。用户正确进入界面配置模式,时钟频率得到很好的更新。 但事实是,我不希望用户进行交互

所以我真的不明白发生了什么,为什么我不能就这样结束剧本


如果你有任何线索

我终于自己解决了问题

这有点骗人,但是。。。嗯,它很管用

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

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

无论如何,如果有人有一个合适的方法来做这件事,我仍然会打开

expect-d
运行你的脚本,并检查调试输出,看看你的模式是否匹配。这正是问题所在。您的发送太快,没有等待
ssh
进程退出。是的,但即使我在脚本末尾睡了5个觉,它仍然不起作用。。。