我有一個shell
腳本,如下所示。在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)
失敗
而且我沒有在logs
output
可變印刷文件。
我應該怎麼做才能讓output
變量始終打印到logs
文件並且具有正確的狀態消息。
我的意思是,如果Final =$(spark-submit --name "Spark" --master "yarn-client" /home/$USER/import.py $table)
的狀態是成功的,那麼shell
腳本狀態是成功的,如果不成功則失敗。
未來,請嘗試使用[mcve]提出有關代碼的問題 - 使用最少量的代碼重現問題,並刪除並非嚴格需要的內容。 –
順便說一句,http://shellcheck.net/將識別與此代碼的一些問題,而無需讓人蔘與。 –