Опубликовано Bash в Ср, 23/12/2009 — 20:59
Как один из вариантов грамотного применения перенаправления ввода/вывода, можно назвать разбор и «сшивание» вывода от команд (см. Пример 11-6). Это позволяет создавать файлы отчетов и журналов регистрации событий.
Пример 16-11. Регистрация событий
-
#!/bin/bash
-
# logevents.sh, автор: Stephane Chazelas.
-
# Регистрация событий в файле.
-
# Сценарий должен запускаться с привилегиями root (что бы иметь право на запись в /var/log).
-
ROOT_UID=0 # Привилегии root имеет только пользователь с $UID = 0.
-
E_NOTROOT=67 # Код завершения, если не root.
-
if [ «$UID« -ne «$ROOT_UID« ]
-
then
-
echo «Сценарий должен запускаться с привилегиями root.»
-
exit $E_NOTROOT
-
fi
-
FD_DEBUG1=3
-
FD_DEBUG2=4
-
FD_DEBUG3=5
-
# Раскомментарьте одну из двух строк, ниже, для активизации сценария.
-
# LOG_EVENTS=1
-
# LOG_VARS=1
-
log() # Запись даты и времени в файл.
-
{
-
echo «$(date) $*» >&7 # Добавляет в конец файла.
-
# См. ниже.
-
}
-
case $LOG_LEVEL in
-
1) exec 3>&2 4> /dev/null 5> /dev/null;;
-
2) exec 3>&2 4>&2 5> /dev/null;;
-
3) exec 3>&2 4>&2 5>&2;;
-
*) exec 3> /dev/null 4> /dev/null 5> /dev/null;;
-
esac
-
FD_LOGVARS=6
-
if [[ $LOG_VARS ]]
-
then exec 6>> /var/log/vars.log
-
else exec 6> /dev/null # Подавить вывод.
-
fi
-
FD_LOGEVENTS=7
-
if [[ $LOG_EVENTS ]]
-
then
-
# then exec 7 >(exec gawk ‘{print strftime(), $0}’ >> /var/log/event.log)
-
# Строка, выше, не работает в Bash, версии 2.04.
-
exec 7>> /var/log/event.log # Добавление в конец «event.log».
-
log # Записать дату и время.
-
else exec 7> /dev/null # Подавить вывод.
-
fi
-
echo «DEBUG3: beginning» >&${FD_DEBUG3}
-
ls -l >&5 2>&4 # command1 >&5 2>&4
-
echo «Done» # command2
-
echo «sending mail» >&${FD_LOGEVENTS} # Написать «sending mail» в дескр. #7.
-
exit 0
- Страница для печати
- 8406 просмотров