我正在尝试编写一个脚本,通过它的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"
它适用于发送 - “*****”命令,但不是之后。 继承人是终端输出
现在它挂起等待用户输入发出命令,我试图通过expect发送
答案 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会话,您应该能够看到期望等待的内容。通过以下两种方式之一启用调试:
expect -d scriptname.exp
exp_internal 1