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
}

现在,当它调用函数 1 时,函数 2 基本上调用其他 bash 脚本,它会将所有输出记录在文件 .ie { TMPDIR}/${$}/${BASENAME%.*}.log } 以及 bash 终端上。

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

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

有没有可能实现......

4

2 回答 2

4

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

./your_other_script.sh 2&>1 >> /var/log/mylogfile.txt
于 2013-06-19T15:12:56.860 回答
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
于 2013-06-20T10:14:42.610 回答