我有一个期望脚本,它登录到设备列表并运行一系列命令。 一切正常,除非其中一个主机无法访问且脚本刚退出。有没有办法让它跳过无法访问的主机&转到剩余的设备?
这是我剧本的主体。
foreach host $hosts {
spawn -noecho /usr/bin/ssh user@$host
set timeout 10
expect {
"assword:" { send [string trimright "$pwd" "\r"] }
"No route*" {puts "Host error -> $expect_out(buffer)";exit}
"Could not resolve*" {puts "Host error -> $expect_out(buffer)";exit}
}
expect "#"
send "term len 0\r"
expect "#"
send "show version\r"
expect "#"
send "exit\r"
expect eof
}
这就是我得到的:
.
. <output of reachable device - R1>
.
Connection to R1 closed by remote host.
Connection to R1 closed.
ssh: Could not resolve hostname R2: Name or service not known
Host error -> ssh: Could not resolve hostname R1: Name or service not known
答案 0 :(得分:1)
鉴于Expect本质上是TCL语言的扩展,你的问题实际上归结为“如何在TCL早期结束循环迭代?”。
答案是,使用continue
命令而不是exit
命令。