bash
で、他のシェル スクリプトを呼び出すラッパーを作成しました。ただし、ラッパーからの出力のみを印刷する必要があり、呼び出されたスクリプトからの出力は避けて、基本的にログ ファイルに記録します。
精緻化中…..
基本的に私は関数を次のように使用しています
start_logging ${LOGFILE}
{
Funtion1
Funtion2
} 2>&1 | tee -a ${LOGFILE}
start logging は次のように定義されます:- (この機能は部分的にしか理解できませんでした)
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
}
基本的に他のbashスクリプトを呼び出すfuntion1、funtion2を呼び出すと、ファイル.ie { TMPDIR}/${$}/${BASENAME%.*}.log }およびbash端末にすべての出力が記録されます。
ラッパーに書き込んだ内容のみを bash ターミナルにエコーし、残りはログに記録する必要がありました。
注意してください:-ラッパーから呼び出されたスクリプトにはエコー機能がありますが、ターミナルに出力を表示する必要はありません
果たして達成できるのか……。