8

我正在使用期望编写一个脚本,其中我必须登录到某个主机,然后我需要发送一些命令。现在我想退出该主机并再次重新登录到其他主机并发送一些命令。但是我的脚本的运行并没有等待第一台主机完成其作业并退出,而是在前一个进程之间发送其他命令。如何使用期望实现这一点,请指导?

示例代码如下:

#!/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
4

4 回答 4

11

您忘记“按回车键”。发送exit后,等待进程结束os的方式expect eof

send "source xyz.csh\r"
expect "%"
send "exit\r"
expect eof
于 2013-05-15T12:00:59.973 回答
5

在遇到竞争条件问题后,我发现了这篇文章:有时脚本按预期完成,有时却没有。在脚本中添加一条catch语句可确保每次都获得预期的结果:

[...]
expect eof
catch wait result
于 2016-01-12T23:07:07.850 回答
1

command在耗时时尝试此构造:

. . .
send "command\r"

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

send "next command\r"
. . .

timeout您将继续等待exp_continue命令 for %PROMPT%

于 2014-06-29T18:02:32.047 回答
0

您能否详细说明“在前一个过程之间发送其余命令的脚本仍然是脚本”。

我试过了,它奏效了。

spawn ssh host1
expect ":"
send pwd1
expect "%"
send "echo hi\r"
expect "%"
send "exit\r"
expect eof
spawn ssh host2    
expect ":"
send pwd2
于 2013-07-11T09:13:30.557 回答