19.3. Applicazioni

Un uso intelligente della redirezione I/O consente di mettere insieme, e verificare, frammenti di output dei comandi (vedi Esempio 14-7). Questo permette di generare dei rapporti e dei file di log.

Esempio 19-12. Eventi da registrare in un file di log

#!/bin/bash
# logevents.sh, di Stephane Chazelas. 

# Evento da registrare in un file. 
# Deve essere eseguito da root (per l'accesso in scrittura a /var/log).

UID_ROOT=0     # Solo gli utenti con $UID 0 hanno i privilegi di root.
E_NONROOT=67   # Errore di uscita non root. 


if [ "$UID" -ne "$UID_ROOT" ] 
then 
  echo "Bisogna essere root per eseguire lo script." 
  exit $E_NONROOT 
fi 


DF_DEBUG1=3 
DF_DEBUG2=4 
DF_DEBUG3=5 

# Decommentate una delle due righe seguenti per attivare lo script. 
# LOG_EVENTI=1 
# LOG_VAR=1


log()  # Scrive la data e l'ora nel file di log.
{
echo "$(date)  $*" >&7     # *Accoda* la data e l'ora nel file.
                           # Vedi oltre.
}



case $LIVELLO_LOG 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

DF_LOGVAR=6
if [[ $LOG_VAR ]]
then exec 6>> /var/log/vars.log
else exec 6> /dev/null               # Sopprime l'output.
fi

DF_LOGEVENTI=7
if [[ $LOG_EVENTI ]]
then
  # then exec 7 >(exec gawk '{print strftime(), $0}' >> /var/log/event.log)
  # La riga precedente non funziona nella versione Bash 2.04.
  exec 7>> /var/log/event.log        # Accoda in "event.log".
  log                                # Scrive la data e l'ora.
else exec 7> /dev/null               # Sopprime l'output.
fi

echo "DEBUG3: inizio" >&${DF_DEBUG3}

ls -l >&5 2>&4                       # comando1 >&5 2>&4

echo "Fatto"                         # comando2

echo "invio mail" >&${DF_LOGEVENTI}  # Scrive "invio mail" nel df nr.7.


exit 0