Перейти к основному содержанию
Рецепты Linux

Main navigation

  • Основы
  • Система
  • Команды
  • Программы
  • Дистро
  • Интерфейсы
  • Устройства
  • Доки
User account menu
  • Войти

Строка навигации

  1. Главная
  2. ABS Guide
  3. Часть 3. Углубленный материал
  4. Глава 16. Перенаправление ввода/вывода

16.3. Область применения

Как один из вариантов грамотного применения перенаправления ввода/вывода, можно назвать разбор и "сшивание" вывода от команд (см. Пример 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

Перекрёстные ссылки книги для 16.3. Область применения

  • 16.2. Перенаправление для блоков кода
  • Вверх
  • Глава 17. Встроенные документы

Book navigation

  • Содержание
  • Часть 1. Введение
  • Часть 2. Основы
  • Часть 3. Углубленный материал
    • Глава 9. К вопросу о переменных
    • Глава 10. Циклы и ветвления
    • Глава 11. Внутренние команды
    • Глава 12. Внешние команды, программы и утилиты
    • Глава 13. Команды системного администрирования
    • Глава 14. Подстановка команд
    • Глава 15. Арифметические подстановки
    • Глава 16. Перенаправление ввода/вывода
      • 16.1. С помощью команды exec
      • 16.2. Перенаправление для блоков кода
      • 16.3. Область применения
    • Глава 17. Встроенные документы
  • Часть 4. Материал повышенной сложности
  • Глава 35. Замечания и дополнения
  • Библиография
  • Приложение A. Дополнительные примеры сценариев
  • Приложение B. Справочная информация
  • Приложение C. Маленький учебник по Sed и Awk
  • Приложение D. Коды завершения, имеющие предопределенный смысл
  • Приложение E. Подробное введение в операции ввода-вывода и перенаправление ввода-вывода
  • Приложение F. Системные каталоги
  • Приложение G. Локализация
  • Приложение H. История команд
  • Приложение I. Пример файла .bashrc
  • Приложение J. Преобразование пакетных (*.bat) файлов DOS в сценарии командной оболочки
  • Приложение K. Упражнения
  • Приложение L. Хронология
  • Приложение M. Авторские права

Последние материалы

  • Приложение scanimage
    10 hours ago
  • Утилита sensors
    4 days ago
  • Сканер Rkhunter
    1 week 4 days ago
  • Программа resize2fs
    2 weeks 3 days ago
  • Аудиопроигрыватель QMMP
    3 weeks 1 day ago
RSS feed

Secondary menu

  • О проекте

© 2008–2025 Олег Меньшенин mensh@yandex.ru