期待脚本 - 变化发送

时间:2017-03-01 13:34:49

标签: shell tcl

我正在使用expect脚本来调用installer.sh 对于整洁的安装,它工作正常。

但是当安装程序未能进行预检查时,发送顺序不同,我无法控制订单。

  spawn ./Installer.sh
expect "change? (Y/N)"
  send "Y\r"
  expect "path"
  send "$path\r"
  expect "Enter selection"
  send "1\r"
  expect "path"
  send "$path 
  exit 0

在第二个期望“路径”之后,安装程序在内部验证并继续执行步骤3并继续并完成。

但是,如果在第二个预期路径之后,安装程序预先检查失败然后它存在并提示最后一步,即再次路径。

当前退出后显示脚本并提示输入第4个时,它会继续发送第3个无关紧要的响应。脚本是否验证了匹配期望字符串?

  Error :
  "No Space. Exiting.
  **Path: 1**
  cp: cannot create regular file `1': Permission denied
  send: spawn id exp5 not open
      while executing
  "send "path\r""

shell脚本因各种原因退出并提示上次发送。

有没有办法在会话进行时获取最后一条显示消息expect_out并读取它并继续基于它。

spawn shellscript
expect_1
send_1
expect_2
send_2
--sh stops and displays exiting...
if expect_out(buffer)=exiting
then
expect_4
send_4
else
expect_3
send_3
expect_4
send_4
exit

1 个答案:

答案 0 :(得分:1)

您可能需要的关键是能够同时expect几个不同的事物。幸运的是,这很容易做到。

expect {
    "change? (Y/N)" {
        # Something in here to respond to this case
        # This bit is just code, but could be effectively empty too
    }
    "Exiting" {
        # Now we've detected that the installer failed
        send_user "oh no!\n"
        exit 1
    }
}

使用此表单时,您可以通过使用expect完成处理程序脚本中的当前exp_continue。像往常一样,你必须仔细考虑要匹配的实际模式。