【发布时间】:2015-11-19 09:43:15
【问题描述】:
在无法继续的期望脚本上需要一些帮助。该脚本的功能是连接远程主机,更改用户然后运行命令。但是我放置了一个 else 语句,当更改用户提示更新密码时,它将跳过该语句并在下一个主机上继续。但是脚本在我发送 \003 的地方停止。期望脚本如下所示;
#!/usr/bin/expect -f
set i [open "eposhosts"]
set hosts [split [read -nonewline $i] "\n"]
foreach host $hosts {
spawn /usr/bin/ssh -q appadm@$host
expect "appadm@$host:~>"
send "su epos\r"
expect "Password:"
send "password\r"
expect {
"epos@$host:/home/appadm>" {send "grep playlist /appl/epos/bin/cron.epos\r"; exp_continue}
"(current) UNIX password:" {send "\003"; exp_continue}
}
expect {
"epos@$host:/home/appadm>" {send "exit\r"; exp_continue}
"[appadm@$host ~]" {send "exit\r"}
}
expect "appadm@$host:~>"
send "exit\r"
expect eof
}
【问题讨论】:
-
脚本停止是什么意思?究竟会发生什么?期望脚本完全退出?
-
是的,expect 脚本错误退出
-
出现错误退出?真的吗?什么错误?
-
它没有说太多,但错误输出低于无效命令名称“appadm@i200135”,同时执行从“expect {”epos@$host:/home/ 中调用的“appadm@$host ~” appadm>" {send "exit\r"; exp_continue} "[appadm@$host ~]" {send "exit\r"} }" ("foreach" 正文第 11 行) 从 "foreach host $hosts { spawn /usr/bin/ssh -q appadm@$host 期望 "appadm@$host:~>" 发送 "su epos\r" 期望 "密码:" 发送 "ep0s05\r" 期望 { "epos..." (file “/appl/ops/web/merger/calendar/survey/eposexp2.sh”第 6 行)
-
@Dren,请阅读stackoverflow.com/help/how-to-ask——很明显,您应该将完整的错误堆栈跟踪放在您的问题中。