2012-05-01 6 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コマンドの戻り状況が失われています。

スプリット2へlocal声明:

local output 
local mysql_status 

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

パーフェクト - あなたに感謝。 – user265330

関連する問題