2012-05-01 20 views
2

我不明白 - 如果我檢查某個函數中的命令的退出狀態並存儲在局部變量中,我總是得到答案0。從功能外,我可以得到正確的退出狀態。bash腳本 - 退出前一個命令的狀態不同,如果在函數中檢查

#!/bin/bash 

function check_mysql() 
{ 
    local output=`service mysql status` 
    local mysql_status=$? 

    echo "local output=$output" 
    echo "local status=$mysql_status" 
} 

check_mysql 

g_output=`service mysql status` 
g_mysql_status=$? 

echo "g output=$g_output" 
echo "g status=$g_mysql_status" 

輸出是:

local output=MySQL is running but PID file could not be found..failed 
local status=0 
g output=MySQL is running but PID file could not be found..failed 
g status=4 

4的狀態是正確的。

回答

7

local命令在您的函數中的service mysql status命令之後運行。正是那個返回0.你正在失去service命令的返回狀態。

斯普利特local聲明爲兩個:

local output 
local mysql_status 

output=`service mysql status` 
mysql_status=$? 
+0

完美 - 謝謝。 – user265330

相關問題