bash - Expect 条件似乎不起作用

标签 bash expect

编辑:没有条件一切都很完美。添加条件会破坏脚本。我已经在其他更简单的脚本中尝试过条件语句,并且这些都有效。

编辑2:添加完整的脚本,因为期望条件的其他实例已经起作用

我正在尝试修改自动期望生成的期望脚本,该脚本在构建成功时起作用,但不处理构建失败。

经过大量研究,我无法弄清楚为什么我的期望条件不起作用

#!/usr/bin/expect -f

set force_conservative 0  ;# set to 1 to force conservative mode even if
                          ;# script wasn't run conservatively originally
if {$force_conservative} {
        set send_slow {1 .1}
        proc send {ignore arg} {
                sleep .1
                exp_send -s -- $arg
        }
}

set timeout -1
spawn $env(SHELL)
match_max 100000
expect "~\$ "
send -- "sudo su\r"
expect "/home/ubuntu# "
send -- "cd ../../opt/application/"
send -- "\r"
expect  "/opt/application# "
send -- "./buildwar.sh \r"
expect  {
        "BUILD SUCCESSFUL\r" {
                send -- "su appuser\r"
                expect  "/opt/application\$ "
                send -- "../../home/ubuntu/shutdown.sh \r"
                expect  "\"outcome\" => \"success\"}"
                send -- "exit\r"
                expect "/opt/application# "
                send -- "./deploywar.sh \r"
                expect "BUILD SUCCESSFUL"
                send -- "su appuser\r"
                expect  "/opt/application\$ "
                send -- "../../home/ubuntu/startup.sh \r"
                expect "Deployed \"application.war\""
                send -- "exit\r"
                send -- "exit\r"
                send -- "exit\r"
                exit 0
        }

        "BUILD FAILED\r" {
                exit 1
        }
}

最佳答案

您可能需要在 (expect -d) 上进行预期调试。您实际上并未显示您期望的数据。

它对我有用:

$ expect -c '
  log_user 0
  spawn sh -c {echo "BUILD SUCCESSFUL"}
  expect {
          "BUILD SUCCESSFUL\r" {
                  #various and sundry other code to run
                  exit 123
          }

          "BUILD FAILED\r" {
                  exit 56
          }
  }
'
$ echo $?
123
$ expect -c '
  log_user 0
  spawn sh -c {echo "BUILD FAILED"}
  expect {
          "BUILD SUCCESSFUL\r" {
                  #various and sundry other code to run
                  exit 123
          }

          "BUILD FAILED\r" {
                  exit 56
          }
  }
'
$ echo $?
56

关于bash - Expect 条件似乎不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33241595/

相关文章:

regex - 在 bash 的 if 条件中使用正则表达式

bash - 无法使用 Cron 删除文件

linux - 无法使用 expect 在 shell 中获取 $expect_out(buffer) 和 $expect_out(0,string) 值

shell 脚本 : Giving error invalid command name "server1"

c - 在linux上执行C语言输入文件

Linux Bash Shell 读取日志文件将每一行与文件的重置进行比较

linux - 将 bash 脚本添加到路径

linux - 当expect脚本中有多条 "spawn"语句时,只完整执行最后一条spawn语句

tcl - 如何匹配右括号后的冒号