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 |