Linux 期望脚本等待特定输入一段时间

Linux 期望脚本等待特定输入一段时间,linux,sh,expect,Linux,Sh,Expect,我正在通过docker安装windows应用程序,这需要一些用户输入,如DB设置等。我正在使用这些用户输入的expect脚本来自动安装 但在最后一步中,我的安装最多需要15-20分钟,因为应用程序需要安装DB模式和其他必需元素,然后提供最终输入以按enter键退出安装过程 我如何处理它,目前我只是让我的expect脚本等待,但我是否需要处理这个问题并让expect脚本等待特定的输入“字符串匹配” 下面是我的expect脚本的样子 #!/bin/bash expect -c ' sp

我正在通过docker安装windows应用程序,这需要一些用户输入,如DB设置等。我正在使用这些用户输入的expect脚本来自动安装

但在最后一步中,我的安装最多需要15-20分钟,因为应用程序需要安装DB模式和其他必需元素,然后提供最终输入以按enter键退出安装过程

我如何处理它,目前我只是让我的expect脚本等待,但我是否需要处理这个问题并让expect脚本等待特定的输入“字符串匹配”

下面是我的expect脚本的样子

    #!/bin/bash

expect -c '
  spawn sh ./setupapp.sh
  expect "PRESS <ENTER> TO CONTINUE:"
  send "\r"
  expect "PRESS <ENTER> TO CONTINUE:"
  send "\r"
  expect "PRESS <ENTER> TO CONTINUE:"
  send "\r"
  expect "PRESS <ENTER> TO CONTINUE:"
  send "\r"
  expect "PRESS <ENTER> TO CONTINUE:"
  send "\r"
expect "PRESS <ENTER> TO CONTINUE:"
  send "\r"
  expect "Waiting here:"
  send "\r"
  expect "Waiting here:"
  send "\r"
  expect "Waiting here:"
  send "\r"
  expect "Waiting here:"
  send "\r"
  expect "Waiting here:"
  send "\r"
  expect "Waiting here:"
  send "\r"
 expect "PRESS <ENTER> TO Exit Installation:"
 send "\r"
  expect eof
'
#/bin/bash
期望-c'
生成sh./setupapp.sh
预期“按继续:”
发送“\r”
预期“按继续:”
发送“\r”
预期“按继续:”
发送“\r”
预期“按继续:”
发送“\r”
预期“按继续:”
发送“\r”
预期“按继续:”
发送“\r”
期待“在这里等待”:
发送“\r”
期待“在这里等待”:
发送“\r”
期待“在这里等待”:
发送“\r”
期待“在这里等待”:
发送“\r”
期待“在这里等待”:
发送“\r”
期待“在这里等待”:
发送“\r”
预期“按退出安装:”
发送“\r”
预期eof
'
我在这里使用Waiting,以便它等待10秒,是否有任何方法可以自动执行并等待最后一个字符串按Enter退出安装


谢谢

看起来你想要这样的东西:这是期望某件事发生多次的最灵活的方式,我们不必关心它到底发生了多少次

expect -c '
  set timeout 1200   ;# 20 minutes
  spawn sh ./setupapp.sh
  expect {
    "PRESS <ENTER> TO CONTINUE:" {
      send "\r"
      exp_continue
    }
    "Waiting here:" {
      send "\r"
      exp_continue
    }
    timeout {
      error "nothing happened after $timeout seconds" 
    }
    "PRESS <ENTER> TO Exit Installation:" {
      send "\r"
    }
  }
  expect eof
'
expect-c'
设置超时1200;#20分钟
生成sh./setupapp.sh
期待{
“按继续:”{
发送“\r”
exp\u继续
}
“在这里等候:”{
发送“\r”
exp\u继续
}
超时{
错误“在$timeout秒后没有发生任何事情”
}
“按退出安装:”{
发送“\r”
}
}
预期eof
'
expect命令等待四件事情中的一件发生。对于前2个事件,按enter键,然后继续等待另一个事件。我添加了“超时”事件,以防您想在那里做一些特殊的事情


“按enter键退出”块不调用“exp\u continue”。在它发送回车后,包含的expect命令结束,然后我们等待eof。

当然,我会查看它。谢谢你的建议。