。 在 Enter cmd> 提示符下,我需要运行许多命-6ren">
gpt4 book ai didi

linux - expect 脚本中的第二个 "send"命令未等待完成第一个命令的输出

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:52:31 25 4
gpt4 key购买 nike

我有一个非常小的 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......."

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

此脚本在 cmd#1 的 O/P 较小的系统上运行良好,但在 cmd#1 的 O/P 非常大的系统上运行良好(比如 1000000 行),它有问题,即它发出第一个命令 cmd#1 并且 O/P 紧随其后,但在它返回到 Enter cmd> 提示符之前,脚本发出第二个命令 cmd#2

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

最佳答案

尝试在开始时设置超时:

set timeout 60

或者使用-1永远等待。

关于linux - expect 脚本中的第二个 "send"命令未等待完成第一个命令的输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22221316/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com