#!/bin/bash
# logevents.sh
# Auteur : Stephane Chazelas.

# Tracer des événements dans un fichier.
#  Vous devez être root pour exécuter ceci (en fait pour avoir le droit d'écrire dans
#+ /var/log).

ROOT_UID=0     # Seuls les utilisateurs ayant l'identifiant $UID 0 ont les
               #+ privilèges de root.
E_NONROOT=67   # Code de sortie si non root.


if [ "$UID" -ne "$ROOT_UID" ]
then
  echo "Vous devez être root pour exécuter ce script."
  exit $E_NONROOT
fi  


FD_DEBUG1=3
FD_DEBUG2=4
FD_DEBUG3=5

# === Décommentez une des deux lignes ci-dessous pour activer le script. ===
# TRACE_EVENEMENTS=1
# TRACE_VARS=1


log()  # Ecrit la date et l'heure dans le fichier de traces.
{
echo "$(date)  $*" &gt;&amp;7  # Ceci *ajoute* la date dans le fichier.
#     ^^^^^^^ Substitution de commande
                           # Voir ci-dessous.
}



case $NIVEAU_TRACES in
 1) exec 3&gt;&amp;2         4&gt; /dev/null 5&gt; /dev/null;;
 2) exec 3&gt;&amp;2         4&gt;&amp;2         5&gt; /dev/null;;
 3) exec 3&gt;&amp;2         4&gt;&amp;2         5&gt;&amp;2;;
 *) exec 3&gt; /dev/null 4&gt; /dev/null 5&gt; /dev/null;;
esac

FD_TRACEVARS=6
if [[ $TRACE_VARS ]]
then exec 6&gt;&gt; /var/log/vars.log
else exec 6&gt; /dev/null               # Bury output.
fi

FD_TRACEEVENEMENTS=7
if [[ $TRACE_EVENEMENTS ]]
then
  # exec 7 &gt;(exec gawk '{print strftime(), $0}' &gt;&gt; /var/log/event.log)
  # La ligne ci-dessus ne fonctionnera pas avec Bash, version 2.04 et ultérieur.
  # Pourquoi ?
  exec 7&gt;&gt; /var/log/event.log        # Ajoute dans "event.log".
  log                                      # Ecrit la date et l'heure.
else exec 7&gt; /dev/null                  # Supprime le sortie.
fi

echo "DEBUG3: début" &gt;&amp;${FD_DEBUG3}

ls -l &gt;&amp;5 2&gt;&amp;4                       # commande1 &gt;&amp;5 2&gt;&amp;4

echo "Done"                                # commande2 

echo "envoi mail" &gt;&amp;${FD_LOGEVENTS}
# Ecrit "envoi mail" sur le descripteur de fichier #7.


exit 0
