如何避免包装器中被调用脚本的输出

时间:2013-06-19 15:10:59

标签: bash

我在bash编写了一个包装器,它调用其他shell脚本。但是,我只需要打包包装器的输出,避免被调用脚本的输出,我基本上都是登录到日志文件。

诠.....

基本上我使用的函数是

start_logging ${LOGFILE}
{
Funtion1
Funtion2
} 2>&1 | tee -a ${LOGFILE}

开始日志记录定义为: - (我只能部分了解此功能)

 start_logging()
{
## usage: start_logging
## start a new log or append to existing log file
declare -i rc=0
    if [ ! "${LOGFILE}" ];then
    ## display error and bail
   fi
local TIME_STAMP=$(date +%Y%m%d:%H:%M:%S)
## open ${LOGFILE} or append to existing ${LOGFILE} with timestamp and actual command line
if [ ${DRY_RUN} ]; then
    echo "DRY_RUN set..."
    echo "${TIME_STAMP} Starting $(basename ${0}) run: '${0} ${ORIG_ARGS}'"  { I}
    echo "DRY_RUN set..."
    echo "Please ignore \"No such file or directory\" from tee..."
else
    echo "${TIME_STAMP} Starting $(basename ${0}) run: '${0} ${ORIG_ARGS}'"
    echo "${TIME_STAMP} Starting $(basename ${0}) run: '${0} ${ORIG_ARGS}'"
fi
return ${rc}
}    

LOGFILE在包装器中定义为

{
TMPDIR  ="$/tmp" 
LOGFILE="${TMPDIR}/${$}/${BASENAME%.*}.log
}

现在当它的调用funtion1,funtion2基本上调用其他bash脚本时,它会记录文件中的所有输出.i.e。 {TMPDIR} / $ {$} / $ {BASENAME%。*}。log}以及bash终端。

我希望它只能将我在包装器中写入的内容回显到bash终端,其余部分应记录在日志中。

请注意: - 来自包装器的被调用脚本具有回显功能,但我不希望终端上显示输出

是否有可能实现......

2 个答案:

答案 0 :(得分:4)

您需要将被调用脚本的stdout + stderr重定向到日志文件中。

./your_other_script.sh 2&>1 >> /var/log/mylogfile.txt

答案 1 :(得分:1)

由于tee,您可以输出到终端。所以你可以:

start_logging ${LOGFILE}
{
Funtion1
Funtion2
} 2>&1 | tee -a ${LOGFILE} >/dev/null
                           ^^^^^^^^^^ - redirect the output from a tee to /dev/null

或只是删除tee,所有日志仅重定向到文件

start_logging ${LOGFILE}
{
Funtion1
Funtion2
} 2>&1 >${LOGFILE}

或者对于较大的脚本部分,将该部分包含在( )对中,将在子shell中执行并将输出重定向到/dev/null,所以:

(
start_logging ${LOGFILE}
{
Funtion1
Funtion2
} 2>&1 | tee -a ${LOGFILE}
) >/dev/null