2013-06-19 49 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