我正在编写一个使用expect的脚本,其中我必须rlogin到某个主机&之后我需要发送一些命令。现在我想退出到该主机并再次重新登录到其他主机并发送一些命令。但是我的脚本运行不是等待第一个主机完成其作业而是退出,而是在前一个进程之间发送其他命令。 我怎样才能达到这个目的,请指导?
示例代码如下:
#!/usr/local/bin/expect -f
spawn rlogin host1
expect "%"
send "source xyz.csh\r"
send "exit\r"
expect "%"
spawn rlogin host2
some set of commands
答案 0 :(得分:8)
你忘了"点击进入"。发送退出后,等待进程结束os expect eof
的方式:
send "source xyz.csh\r"
expect "%"
send "exit\r"
expect eof
答案 1 :(得分:2)
我在遇到竞争条件问题后发现了这篇文章:有时脚本以预期完成,有时则没有完成。在脚本中添加catch
语句可确保每次都获得所需的结果:
[...]
expect eof
catch wait result
答案 2 :(得分:1)
在command
耗时时尝试此构造:
. . .
send "command\r"
expect {
timeout {
puts "Running..."
exp_continue
}
"%PROMPT%" {
puts "Finished."
}
}
send "next command\r"
. . .
在timeout
上,您将继续使用exp_continue
的{{1}}命令等待。
答案 3 :(得分:0)
您能否详细说明“仍然在上一个过程之间发送其余命令的脚本。”
我试过这个并且有效。
spawn ssh host1
expect ":"
send pwd1
expect "%"
send "echo hi\r"
expect "%"
send "exit\r"
expect eof
spawn ssh host2
expect ":"
send pwd2