我写使用期望中,我不得不rlogin登录到某些主机和之后,我需要发送一些命令的脚本。 现在,我想退出该主机,并再次重新登录到其他主机,并发送一些命令。 但我的脚本的运行是不是等待第一个主机来完成它的工作并退出而是在前面的过程之间发出其他命令。 我怎样才能做到这一点使用expect请指导?
示例代码如下:
#!/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
你能否详细说明“仍脚本发送命令的其余部分在之前的过程之间。”
我想这和它的工作。
spawn ssh host1
expect ":"
send pwd1
expect "%"
send "echo hi\r"
expect "%"
send "exit\r"
expect eof
spawn ssh host2
expect ":"
send pwd2
你忘“砸入”。 发送退出后,顺便等待进程结束OS expect eof
:
send "source xyz.csh\r"
expect "%"
send "exit\r"
expect eof
我发现这个职位后,我遇到了一个竞争状态的问题:有时候剧本和完成预期其他时候没有。 添加catch
声明脚本确保所期望的结果每次都:
[...]
expect eof
catch wait result
试试这个结构时command
是耗时:
. . .
send "command\r"
expect {
timeout {
puts "Running..."
exp_continue
}
"%PROMPT%" {
puts "Finished."
}
}
send "next command\r"
. . .
在timeout
您将与时间可持续等待exp_continue
为命令%PROMPT%