shell tee shell 管道和tee使用时获取前面命令返回值

这一生的挚爱 提交于 2019-11-30 10:14:17

 

这样能获取到前面命令的返回值

sh a.sh | tee >>a.log
aa=${PIPESTATUS[0]}
if [ $aa -ne 0 ]
then
    echo "aaaaaaaaaaaaaaaa"
fi

 

 

#!/bin/bash
source ./get_config.sh
source ./get_date.sh
#set -xv
#exec 1>${etlHome}/LOG/ODS/${data_date}/xxx.log 2>&1
# $1 为ods、bds $2为
#测试 传递参数
#etlSys="ods"
#etlJob="P_CRD_CC_COMM_STABILITY_SCORE_RES"
#发布时,参数为传递进来的
etlSys=$1
etlJob=$2
etldte=$3
#传递近来的参数转大写
etlSys=${etlSys^^}
etlJob=${etlJob^^}
#传递近来的参数转小写
etlSysL=${etlSys,,}
etlJobL=${etlJob,,}
etlHome="/dw/workflow"
currentTime=$(date "+%G%m%d%H%M%S%N")
binPath="${etlHome}/APP/${etlSys}/${etlJob}/bin"
sqlPath="${etlHome}/APP/${etlSys}/${etlJob}/sql"
logFile="${etlHome}/LOG/${data_date}/${etlSys}_${etlJob}-${currentTime}.log"

run_sql() {
    #判断传入进来的第三个参数是否为null或者为yyyymmdd
    #若为null,则跳过
    #若为yyyymmdd,则把${data_date}替换为yyyymmdd
    #若为其他,非日期且非null ,报错退出,提示输入日期参数错误
    if [ -n "${etldte}" ]; then
            if echo ${etldte} | grep -Eq "[0-9]{8}" && date -d ${etldte} +%Y%m%d > /dev/null 2>&1
      then
          data_date=`date -d ${etldte} +%Y%m%d`
       echo "data_date:${data_date}"
      else
       echo "输入的日期格式不正确,应为yyyymmdd";
          exit 2
      fi
    fi
   
    if [ ! -d "${etlHome}/LOG/${data_date}" ]; then
     mkdir ${etlHome}/LOG/${data_date}
    fi
    #
    if [ ! -f "${sqlPath}/${etlJob}.sql" ]; then
        echo "执行失败! 文件:${sqlPath}/${etlJob}.sql不存在"
        exit 1
    fi
    sed "s/\${data_date}/${data_date}/g" ${sqlPath}/${etlJob}.sql > "${etlHome}/tmp/${etlSys}_${etlJob}.sql"
    if [ $? != 0 ]
    then
        echo "sed exec Failed !"
        exit 1
    fi
    ${getBeeline} -f ${etlHome}/tmp/${etlSys}_${etlJob}.sql
    if [ $? != 0 ]
    then
        echo "执行失败!"
        exit 1
    else
        echo "执行成功!"
    fi
}
#run_sql > ${logFile} 2>&1
run_sql | tee ${logFile}
rt=${PIPESTATUS[0]}
if [ ${rt} -ne 0 ]
then
    echo "执行失败!"
    exit 1
fi
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!