我有一个非常小的期望脚本.流程如下
ssh 到远程机器Enter cmd>.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完成后才发送命令?