#1 Le 27/05/2012, à 12:44
- altair8080
PB : STDOUT et STDERR dans 2 fichiers logs <> et une sortie terminal
bonjour mon script bash
l'objectif est de tracer les informations STDOUT dans trace.log et STDERR dans erreur.log
mais aussi d'afficher sur le terminal pour voir l'avancement
le problème est qu'avec le script suivant j'ai bien la sortie sur tty mais les fichiers de sorties sont vides
De plus il y a des messages d'erreurs pour les descripteurs au moment de la fermeture (voir plus bas pour le résultat)
#!/bin/bash
#redirection STDERR dans un fichier de log et affichage sur le terminal en //
exec 6>&2
exec 2>>erreur.log | tee erreur.log
#redirection STDOUT dans un fichier de log et affichage sur le terminal en //
exec 5>&1
exec 1>>trace.log | tee trace.log
trap 'error_handler ${LINENO} $?' ERR
trap 'exit_handler' EXIT
error_handler()
{
SCRIPTNAME="$0"
LIGNE="$1"
ERREUR="$2"
echo "Dernière erreur : `date` dans le ${SCRIPTNAME}: ligne ${LIGNE}: code erreur: ${ERREUR}"
}
exit_handler()
{
# restaurer le STDERR
exec 2>&6 6>&-
#restaurer le STDOUT
exec 1>&5 5>&-
}
ls -xyz
ls /home
#sortie
exit_handler
résultat
~$ ./tt.sh
ls : option invalide -- 'y'
Saisissez « ls --help » pour plus d'informations.
Dernière erreur : dimanche 27 mai 2012, 12:39:24 (UTC+0200) dans le ./tt.sh: ligne 31: code erreur: 2
user1
user2
user3
./tt.sh: ligne 25: 6: Mauvais descripteur de fichier
./tt.sh: ligne 27: 5: Mauvais descripteur de fichier
Dernière erreur : dimanche 27 mai 2012, 12:39:24 (UTC+0200) dans le ./tt.sh: ligne 27: code erreur: 1
~$ cat erreur.log
~$ cat trace.log
~$
merci
Hors ligne
#2 Le 27/05/2012, à 12:50
- altair8080
Re : PB : STDOUT et STDERR dans 2 fichiers logs <> et une sortie terminal
complément :
je pense que pour les erreurs sur les descripteurs, il ne faut pas mettre en dernière ligne
"exit_handler" mais juste "exit"
reste toujours le problème de sauvegarde en parallèle dans les fichiers et affichage à l'écran
Hors ligne
#3 Le 28/05/2012, à 12:35
- credenhill
Re : PB : STDOUT et STDERR dans 2 fichiers logs <> et une sortie terminal
hello
essayer en changeant ces 2 lignes exec au début
#!/bin/bash
#redirection STDERR dans un fichier de log et affichage sur le terminal en //
exec 6>&2
exec 2> >(tee erreur.log)
#redirection STDOUT dans un fichier de log et affichage sur le terminal en //
exec 5>&1
exec 1> >(tee trace.log)
...
Hors ligne