在expect脚本中的第二个"发送"命令不等待完成第一个命令的输出

0 linux expect

我有一个非常小的期望脚本.流程如下

  1. ssh 到远程机器
  2. 执行命令并在执行命令后,您将处于不同的提示符(提示名称为Enter cmd>.
  3. Enter cmd>提示符下,我需要运行许多命令

因此我设计了这个脚本

#!/usr/bin/expect

 set FULL_CMD { #cmd1 #cmd2 #cmd3  }
 puts "STARTING......."

 log_file myfile.log ;# <<< === append output to a file
 spawn ssh tempuser\@dummyserver
 match_max  100000000

 expect "password:"
 send "temppasswd\r"
expect  "*temp*"
 send "cd \/home\r"
 expect "*temp*"
send "new cmd prompt\r"
expect "Enter cmd>"

foreach tempcmd $FULL_CMD {
 send "${tempcmd} \r "
 expect -exact  "Enter cmd>\r"
 send -- "\r"
expect eof }

send "q"
send "exit\r"

puts "I HAVE ENDED......."
Run Code Online (Sandbox Code Playgroud)

我的问题:实际上第一个命令的O/P cmd#1很长,我可以看到期望脚本没有等待第一个命令完成的O/P,并且cmd#2在一段时间后发送第二个命令.

这个脚本在O/P cmd#1很小的系统上工作正常,但是在O/P cmd#1非常大的系统(例如1000000行)上,它有问题,即它发出第一个命令cmd#1并且O/P跟随,但在它返回Enter cmd>提示之前,脚本会发出第二个命令cmd#2

如何确保cmd#2仅在输出cmd#1完成后才发送命令?

Mar*_*ell 5

尝试在开始时设置超时:

set timeout 60
Run Code Online (Sandbox Code Playgroud)

或者-1用来永远等待.