在shell脚本中使用变量时获取shell脚本的正确状态消息

时间:2017-06-06 16:57:19

标签: linux bash shell

我有一个shell脚本,如下所示。

#!/bin/bash

source /home/$USER/source.sh

[ $# -ne 1 ] && { echo "Usage : $0  table "; exit 1; }

table=$1

TIMESTAMP=`date "+%Y-%m-%d"`
touch /home/$USER/logs/${TIMESTAMP}.success_log
touch /home/$USER/logs/${TIMESTAMP}.fail_log
success_logs=/home/$USER/logs/${TIMESTAMP}.success_log
failed_logs=/home/$USER/logs/${TIMESTAMP}.fail_log
touch /home/$USER/logs/${TIMESTAMP}.log
logs=/home/$USER/logs/${TIMESTAMP}.log

function log_status
{
       status=$1
       message=$2
       if [ "$status" -ne 0 ]; then
                echo "`date +\"%Y-%m-%d %H:%M:%S\"` [ERROR] $message [Status] $status : failed" | tee -a "${failed_logs}"
                echo "$output" | tee -a "${logs}"
       else
                    echo "`date +\"%Y-%m-%d %H:%M:%S\"` [INFO] $message [Status] $status : success" | tee -a "${success_logs}"
                    echo "$output" | tee -a "${logs}"
       fi
}

Final=$(spark-submit --name "Spark" --master "yarn-client" /home/$USER/import.py $table)

output=$(echo "$Final" | tail -1)
echo "$output"

g_STATUS=$?
log_status $g_STATUS  "spark $table"

#output=$(echo "$Final" | tail -1)
echo "$Final"
#echo "$output"
echo "****************************************************************************************************************************"

在此,变量output必须附加到文件。

现在我在脚本中有以下内容。

output=$(echo "$Final" | tail -1)
echo "$output"
echo "$Final"

g_STATUS=$?
log_status $g_STATUS  "spark $table"

我在output文件中打印了logs变量,这是我的预期结果。但是shell script的状态始终是成功的,即使Final =$(spark-submit --name "Spark" --master "yarn-client" /home/$USER/import.py $table)失败

也是如此

现在我在脚本中有以下内容。

g_STATUS=$?
log_status $g_STATUS  "spark $table"

output=$(echo "$Final" | tail -1)
echo "$output"
echo "$Final"

如果shell script成功且Final =$(spark-submit --name "Spark" --master "yarn-client" /home/$USER/import.py $table)的状态始终失败,shell script失败,则Final =$(spark-submit --name "Spark" --master "yarn-client" /home/$USER/import.py $table)的状态始终成功

我没有在output文件中打印logs变量。

我应该怎样做才能将output变量始终打印到logs文件并显示正确的状态信息。

我的意思是如果Final =$(spark-submit --name "Spark" --master "yarn-client" /home/$USER/import.py $table)的状态成功,那么shell脚本状态如果不成功则成功。

1 个答案:

答案 0 :(得分:1)

您是否尝试在执行感兴趣的子shell后立即保存状态,然后在最后返回它?

Final =$(spark-submit --name "Spark" --master "yarn-client" /home/$USER/import.py $table)
g_STATUS=$?
output=$(echo "$Final" | tail -1)
echo "$output"


log_status $g_STATUS  "spark $table"


echo "$Final"

echo "****************************************************************************************************************************"
return $g_STATUS