如何等待过程中使用,完成TCL-期待(How to wait for a process to co

2019-09-03 07:55发布

我写使用期望中,我不得不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

Answer 1:

你能否详细说明“仍脚本发送命令的其余部分在之前的过程之间。”

我想这和它的工作。

spawn ssh host1
expect ":"
send pwd1
expect "%"
send "echo hi\r"
expect "%"
send "exit\r"
expect eof
spawn ssh host2    
expect ":"
send pwd2


Answer 2:

你忘“砸入”。 发送退出后,顺便等待进程结束OS expect eof

send "source xyz.csh\r"
expect "%"
send "exit\r"
expect eof


Answer 3:

我发现这个职位后,我遇到了一个竞争状态的问题:有时候剧本和完成预期其他时候没有。 添加catch声明脚本确保所期望的结果每次都:

[...]
expect eof
catch wait result


Answer 4:

试试这个结构时command是耗时:

. . .
send "command\r"

expect {
    timeout {
        puts "Running..."
        exp_continue
    }
    "%PROMPT%" {
        puts "Finished."
    }
}

send "next command\r"
. . .

timeout您将与时间可持续等待exp_continue为命令%PROMPT%



文章来源: How to wait for a process to complete using tcl-expect
标签: shell tcl expect