具有多个shell语句的expect脚本

时间:2017-01-01 00:00:40

标签: python shell expect

我正在使用fabric,这是一个仅在Python2。*中工作的部署工具,用于将我的博客部署到远程服务器。

但是我的博客是用Python 3.5编写的,所以我试图使用expect脚本和pyenv工具自动完成部署工作:

#!/usr/bin/expect
set timeout 10

spawn pyenv global system # changes python to 2.* version
spawn fab build  # gets files zipped

spawn fab deploy
expect "private key:"
send "x\r"
expect "Login password for 'myblog': "
send "*******\r"
expect eof

spawn pyenv global 3.5.1 # changes back

然后我发现只有spawn pyenv global systemspawn fab deploy部分工作。

这是因为spawn fab build部分不需要任何输入或反馈吗?但如果是这样,它无法解释为什么第一个语句spawn pyenv global system起作用。另外,奇怪的是,最后一个陈述失败了。

顺便说一下,当我在命令行中分别运行这四个语句时,这很好。

1 个答案:

答案 0 :(得分:0)

我尝试在每个语句后添加expect eof并且它有效:

#!/usr/bin/expect
set timeout 10

spawn pyenv global system
expect eof

spawn fab build 
expect eof

spawn fab deploy
expect "key:"
send "x\r"
expect "password"
send "*******\r"
expect eof

spawn pyenv global 3.5.1
expect eof

也许当您想要执行不需要ls -a之类的输入的命令时,可以在其后添加expect eof