为什么我的发送请求在我的期望shell中不起作用?

时间:2016-02-04 01:23:35

标签: bash shell expect

我正在尝试编写一个脚本,通过它的ncli.jar将我的meteor应用程序自动部署到NodeChef服务器。当启动jar时它要求输入几个输入来登录他们的服务,我已经设法用我的期望脚本登录,但我似乎无法向前推进。下面是我的剧本。

expect script:
#!/usr/bin/expect -f
spawn java -jar /usr/bin/nclatest.jar
spawn java -jar /usr/bin/ncli.jar
expect "email address"
send -- "*************"
expect "[ઙ] Signed in as: houset@msoe.edu"
send -- "deploy -i src/deploy/retrospectre\n"
expect "Enter a password"
send -- "C!oudFF7\n"
expect "To agree"
send -- "y\n"

它适用于发送 - “*****”命令,但不是之后。 继承人是终端输出 Terminal after running script

现在它挂起等待用户输入发出命令,我试图通过expect发送

1 个答案:

答案 0 :(得分:2)

由于expect是Tcl的扩展,因此必须遵循Tcl的12 syntax rules。其中之一是括号[]用于命令替换。命令替换可以在双引号内发生。你需要改变这个

expect "[ઙ] Signed in as: houset@msoe.edu"

其中一个

# prevent command substitution by escaping the leading open bracket
expect "\[ઙ] Signed in as: houset@msoe.edu"

# use braces instead of double quotes
expect {[ઙ] Signed in as: houset@msoe.edu}

Tcl的{braces}就像shell 'single quotes'一样 - 没有变量或命令替换。

如果这不能解决问题,请在启用调试的情况下运行您的expect会话,您应该能够看到期望等待的内容。通过以下两种方式之一启用调试:

  1. 使用expect -d scriptname.exp
  2. 运行您的脚本
  3. 将此行添加到脚本的开头:exp_internal 1