2

これはわかりません。関数のコマンドの終了ステータスを確認してローカル変数に格納すると、常に答え0が返されます。関数の外部からは正しい終了ステータスが返されます。

#!/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のステータスは正しいものです。

4

1 に答える 1

7

コマンドは、関数内のコマンドlocalの後に実行service mysql statusされます。それは0を返しているものです。あなたはserviceコマンドの戻りステータスを失っています。

localステートメントを2つに分割します。

local output
local mysql_status

output=`service mysql status`
mysql_status=$?
于 2012-05-01T13:03:38.947 に答える