-3

元のプログラムの代わりに呼び出すことができ、元のプログラムを呼び出す汎用bash(Pythonでもよい)ラッパーを探しています。

  • 呼び出しコマンドラインをログに記録します
  • stdout と stderr をログに記録しますが、呼び出し元から隠しません
  • 透過的であること - 呼び出されたプログラムと同じ stdout を持つ
  • 呼び出されたプログラムの終了コードを返す

答えは機能的なスクリプトです。ここに「プロトタイプ」があります

#!/bin/bash
LOGFILE=history.log
ORIGINAL=ls
touch ${LOGFILE}
echo "started" >>"${LOGFILE}"
ls "$@"
echo "ended with $?" >>"${LOGFILE}”
4

1 に答える 1

0

https://gist.github.com/2411440でも

#!/bin/bash
# install:
# * rename the original script to script.original
# * rename the wrapper.sh to script
# * DONE! all calls are going to be logged now
TIMESTAMP=`date -u +"%Y-%m-%dT%H:%M:%SZ"`

ME=`basename $0`
WRAPPED_COMMAND=$ME.original

echo "${TIMESTAMP} exec: $0 $@" >>${ME}.stdout.log

#${WRAPPED_COMMAND} "$@"|tee -a "${LOGFILE}"
${WRAPPED_COMMAND} "$@" > >(tee -a ${ME}.stdout.log) 2> >(tee -a ${ME}.stderr.tmp >&2)
RET=$?
TIMESTAMP_END=`date -u +"%Y-%m-%dT%H:%M:%SZ"`

if [ -s ${ME}.stderr.tmp ] # if we have something logged to stderr (not usual)
then
    echo "${TIMESTAMP} exec: $0 $@" >>${ME}.stderr.log
    cat  >> ${ME}.stderr.log
    echo "${TIMESTAMP_END} retured: ${RET}" >>${ME}.stderr.log
fi
rm  -f "${ME}.stderr.tmp"

echo "${TIMESTAMP_END} retured: ${RET}" >>${ME}.stdout.log
exit $RET
于 2012-04-18T06:20:42.413 に答える