我在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终端,其余部分应记录在日志中。
请注意: - 来自包装器的被调用脚本具有回显功能,但我不希望终端上显示输出
是否有可能实现......
答案 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