2010-07-21 94 views
22

我使用expect來運行測試腳本。 測試通過退出代碼返回成功/失敗。但期望返回等價退出代碼。 如何讓期望返回正確的退出狀態?如何在Expect腳本中返回產生的進程退出代碼?

我的測試是使用psql(postgresql命令處理器)運行的sql腳本。 因爲psql不允許指定數據庫密碼作爲命令行參數,所以期望腳本可以做到這一點。

所以,我希望腳本的樣子:

spawn $SPAWN_CMD 
expect { 
     -re "Enter password for new role:" { 
       send "$PWPROMPT\n" 
       exp_continue 
     } -re "Enter it again:" { 
       send "$PWPROMPT\n" 
       exp_continue 
     } -re "Password(.*)" { 
       send "$PASSWORD\n" 
       exp_continue 
     } -re "Password(.*):" { 
       send "$PASSWORD\n" 
       exp_continue 
     } eof 
} 

回答

27

你已經在你的循環結束等待eof,你只需要使用waitcatch結果:

spawn true 
expect eof 
catch wait result 
exit [lindex $result 3] 

退出以0

spawn false 
expect eof 
catch wait result 
exit [lindex $result 3] 

1退出。

+0

嗯.. '[21:43:30]〜>期望<<<「產卵真實;期待eof;趕上等待結果;退出[lindex $ result 3]「; echo $?'輸出'3'對我來說 – 2014-11-17 19:48:33

+2

@ sasha.sochka如果你輸入它就像$ result被shell解釋而不是期望的一樣,把輸入放在單引號或者escape $。 – 2014-11-18 13:14:52

+0

哦,我的錯,明白了,謝謝 – 2014-11-18 13:15:44

相關問題