| Guida avanzata di scripting Bash: Un'approfondita esplorazione dell'arte dello scripting di shell | ||
|---|---|---|
| Indietro | Capitolo 19. Redirezione I/O | Avanti |
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 |