我想執行一個命令,然後獲取此命令的返回值。 完成後,我想退出並給出退出前一個命令的返回值,即我剛執行的那個命令。我已經有這段代碼,但它似乎並沒有工作。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
我該怎麼辦?感謝
我想執行一個命令,然後獲取此命令的返回值。 完成後,我想退出並給出退出前一個命令的返回值,即我剛執行的那個命令。我已經有這段代碼,但它似乎並沒有工作。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
我該怎麼辦?感謝
我覺得你的問題是,typeset
本身產生0的返回值嘗試
gosu user /var/www/bin/phpunit -c app
ret_code=$?
return $ret_code
你可以在這裏擺脫'typeset'命令;它沒有做任何有用的事情。 – chepner
首先,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
爲什麼不在'exec ...'之後立即'返回$?'或'return $ ret_code'?或者我錯過了什麼? – jschnasse
如果你達到'exec'後面的代碼,'$?'將總是*爲非零。 exec'只在失敗時返回。 – chepner