2017-05-05 30 views
1

我想執行一個命令,然後獲取此命令的返回值。 完成後,我想退出並給出退出前一個命令的返回值,即我剛執行的那個命令。我已經有這段代碼,但它似乎並沒有工作。Bash得到一個命令的返回值並用此值退出

exec gosu user /var/www/bin/phpunit -c app 
typeset ret_code 
ret_code=$? 
if [ $ret_code == 0 ]; then 
    exit 0 
fi 

exit 1 

我該怎麼辦?感謝

+0

爲什麼不在'exec ...'之後立即'返回$?'或'return $ ret_code'?或者我錯過了什麼? – jschnasse

+0

如果你達到'exec'後面的代碼,'$?'將總是*爲非零。 exec'只在失敗時返回。 – chepner

回答

2

我覺得你的問題是,typeset本身產生0的返回值嘗試

gosu user /var/www/bin/phpunit -c app 
ret_code=$? 
return $ret_code 
+0

你可以在這裏擺脫'typeset'命令;它沒有做任何有用的事情。 – chepner

2

首先,exec僅當沒有返回,所以你永遠不會看到一個零退出狀態。

exec gosu user /var/www/bin/phpunit -c app 
ret_code=$? 
printf 'Error in execing gosu, %d\n' $ret_code 
exit $ret_code 

注意此錯誤無關,與gosu;如果exec返回,那是因爲外殼甚至無法啓動gosu,而不是因爲gosu本身退出並出現錯誤。

也許你不是故意使用exec,只是想運行命令並等待它完成?

gosu user /var/www/bin/phpunit -c app 
ret_code=$? 
if [ $ret_code = 0 ]; then exit 0; fi 
printf 'Error in execing gosu, %d\n' $ret_code 
exit $ret_code