具有多个 shell 语句的期望脚本
A expect script with multiple shell statements
我正在使用 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 system
和 spawn fab deploy
部分有效。
这是因为 spawn fab build
部分不需要任何输入或反馈吗?但如果是这样,就无法解释为什么第一个语句 spawn pyenv global system
起作用了。另外,奇怪的是,最后一条语句失败了。
顺便说一句,当我在命令行中分别 运行 这四个语句时,这很好。
我尝试在每条语句后添加 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
我正在使用 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 system
和 spawn fab deploy
部分有效。
这是因为 spawn fab build
部分不需要任何输入或反馈吗?但如果是这样,就无法解释为什么第一个语句 spawn pyenv global system
起作用了。另外,奇怪的是,最后一条语句失败了。
顺便说一句,当我在命令行中分别 运行 这四个语句时,这很好。
我尝试在每条语句后添加 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