2013-06-19 46 views
2

我在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时,基本上调用其他bash脚本的funtion2将其所有输出记录在文件.i.e中。 {TMPDIR}/$ {$}/$ {BASENAME%。*} .log}以及bash终端上。

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

PleaseNote: - 从包装中称为脚本有回声函数中,但我不希望有输出应该在终端

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

+2

您将得到与您的问题成正比的答案。如果你提供更多的细节,会得到更详细的答案。例如,如果您已经记录了后续的脚本输出,它们如何进入stdout? – jm666

+0

上面详细说明了! –

回答

4

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

./your_other_script.sh 2&>1 >> /var/log/mylogfile.txt 
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} 

或脚本的较大部分,封闭部分为()对,将在执行subshel​​l并将输出重定向到/dev/null,所以:

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