如何使用tcl-expect等待进程完成

XYZ*_*nux 8 shell tcl expect

我正在编写一个使用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
Run Code Online (Sandbox Code Playgroud)

gle*_*man 8

你忘记了"击中输入".发送退出后,等待进程结束操作系统的方式expect eof:

send "source xyz.csh\r"
expect "%"
send "exit\r"
expect eof
Run Code Online (Sandbox Code Playgroud)


ooz*_*arm 5

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

[...]
expect eof
catch wait result
Run Code Online (Sandbox Code Playgroud)


SKT*_*SKT 0

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

我尝试了这个并且成功了。

spawn ssh host1
expect ":"
send pwd1
expect "%"
send "echo hi\r"
expect "%"
send "exit\r"
expect eof
spawn ssh host2    
expect ":"
send pwd2
Run Code Online (Sandbox Code Playgroud)