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语句一分为二:

local output
local mysql_status

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