2017-01-01 13 views
-1

私は、ブログをリモートサーバーに展開するために、Python2。*でのみ動作するデプロイメントツールであるファブリックを使用しています。私のブログはPython 3.5で書かれているので、私は自動的に展開ことを行うためのスクリプトとpyenvツールを期待して使用しようとしていますが複数のシェルステートメントを持つexpectスクリプト

#!/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がなぜ機能したのか説明できません。また、奇妙なことに、最後のステートメントは失敗しました。

ところで、これら4つのステートメントをコマンドラインで別々に実行するとよいです。

+0

expect eofを追加し、あなたがチェックしました'autoexpect'を出す?シェルスクリプトをexpectスクリプトに記録し、間違っていることを明らかにする可能性があるかどうかを検査します。 – Ben

+0

@Benまだ、あなたはそれを言う前に私はautoexpectを知らない。私は今、それを試してみよう! – Spike

答えて

0

私は、一つ一つの文の後expect eofを追加しようと、それは動作します:あなたがls -aのような何も入力を必要としないコマンドを実行したいとき

#!/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 

はたぶん、あなたはそれ

関連する問題