2013-06-19 5 views
2

Я написал обертку в bash, которая вызывает другие сценарии оболочки. Тем не менее, мне нужно распечатать только выходные данные из оболочки, избегая вывода из вызываемых скриптов, которые я в основном регистрирую в файле журнала.Как избежать вывода вызванного сценария в оболочке

Разрабатывая ... ..

В основном я использую функцию

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, и отдых должен записываться в журнал.

PleaseNote: - вызываемая скрипты из обертки имеют эхо-функции внутри, но я не хотел, что вывод должен быть отображен на терминале

Можно ли достигнуть ....

+2

Вы получите ответы пропорционально вашему вопросу. Если вы предоставите более подробную информацию, получите более подробный ответ. Например, если вы уже регистрируете последующие сценарии вывода, как они входят в стандартный вывод? – 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} 

или для больших частей скрипта, заключите часть в () пары, будет выполняться в подселей и перенаправить вывод на /dev/null, так:

(
start_logging ${LOGFILE} 
{ 
Funtion1 
Funtion2 
} 2>&1 | tee -a ${LOGFILE} 
) >/dev/null 
Смежные вопросы