2017-01-01 62 views
-1

我正在使用結構,這是一種僅在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發揮作用。另外,奇怪的是,最後的陳述失敗了。

順便說一句,當我在命令行中分別運行這四個語句時是很好的。

+0

你檢查後出'autoexpect'?它將一個shell會話記錄到期望腳本中,並檢查可能會顯示錯誤操作的內容。 – Ben

+0

@尚未,在你說出來之前我不知道autoexpect。我現在試試看,謝謝! – Spike

回答

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