#1 Le 10/09/2015, à 07:43
- abach
[Shell] rediriger le standard et les erreurs vers deux fichiers
Bonjour à tous et à toutes,
J'ai un script shell dans lequel je voudrais rediriger le résultat standard et les erreurs dans deux fichiers différents.
Chacune de ces deux logs a, au préalable été initialisée par un entête spécifique et, une fois la commande terminée, reçoit un pied lui aussi spécifique.
Le programme a une tête du style
log_generale= "$HOME/log_gernale.log"
log_erreur="$HOME/log_erreur.log"
rm $log_generale
rm $log_erreur
echo "============================================================" >> $log_generale
echo "Entete" >> $log_generale
echo "DEBUT" >> $log_generale
echo "============================================================" >> $log_generale
echo " " >> $log_generale
echo "============================================================" >> $log_erreur
echo "Entete" >> $log_erreur
echo "DEBUT" >> $log_erreur
echo "============================================================" >> $log_erreur
echo " " >> $log_erreur
macommande "[b]==> C'est la que je ne sais pas faire[/b]"
echo "============================================================" >> $log_generale
echo "Entete" >> $log_generale
echo "FIN" >> $log_generale
echo "============================================================" >> $log_generale
echo " " >> $log_generale
echo "============================================================" >> $log_erreur
echo "Entete" >> $log_erreur
echo "FIN" >> $log_erreur
echo "============================================================" >> $log_erreur
echo " " >> $log_erreur
J'ai fait ce bout de code vite fait du bureau et les ereurs de syntaxe peuvent s'expliquer de ce fait là. Je n'arrive ps à comprendre comment faire cette redirection.
Je ne sais pas non plus comment faire pour que cette redirection se fasse en "append" et non pas en écrasant ce qui précède
Les chiens vous regardent tous avec vénération. Les chats vous toisent tous avec dédain. Il n’y a que les cochons qui vous considèrent comme leurs égaux. - Winston Churchill
Je suis parrain Linux
Hors ligne
#2 Le 10/09/2015, à 08:01
- jplemoine
Re : [Shell] rediriger le standard et les erreurs vers deux fichiers
redirection générale
- cmde > fichier (écrasement du fichier)
- cmde >> fichier (sans écrasement du fichier)
redirection erreur
- cmde 2> fichier (écrasement du fichier)
- cmde 2>> fichier (sans écrasement du fichier)
- cmde 2>> &1 (dans le même fichier que le log general)
Ce compte ne servira plus : vous pouvez le supprimer si le coeur vous en dit...
Laissé par l'auteur pour historique.
Hors ligne
#3 Le 10/09/2015, à 08:09
- abach
Re : [Shell] rediriger le standard et les erreurs vers deux fichiers
Merci JP,
Je vais tester ça en rentrant toute à l'heure.
Les chiens vous regardent tous avec vénération. Les chats vous toisent tous avec dédain. Il n’y a que les cochons qui vous considèrent comme leurs égaux. - Winston Churchill
Je suis parrain Linux
Hors ligne
#4 Le 10/09/2015, à 08:11
- pingouinux
Re : [Shell] rediriger le standard et les erreurs vers deux fichiers
Bonjour,
Ceci devrait faire l'affaire
log_generale="/$HOME/log_generale.log"
log_erreur="/$HOME/log_erreur.log"
echo "============================================================
Entete
DEBUT
============================================================
" | tee "$log_erreur" >"$log_generale"
macommande 1>>"$log_generale" 2>>"$log_erreur"
echo "============================================================
Entete
FIN
============================================================
" | tee -a "$log_erreur" >>"$log_generale"
Dernière modification par pingouinux (Le 10/09/2015, à 08:12)
Hors ligne
#5 Le 10/09/2015, à 09:06
- abach
Re : [Shell] rediriger le standard et les erreurs vers deux fichiers
En fait, ce script est un sous programme d'un script général qui en lance un certain nombre.
Dans ce script général, certain sous-programmes sont lancés en séquentiel, d'autres en parallèle les un par rapport aux autres.
Selon les paramètres que je passe au script principal, il va lancer (ou pas) les différents sous-programmes.
Chaque sous-programme est appelé à son tour en recevant comme paramètres les chemins et nom des deux logs principales.
A la fin de l'exécution de chaque sous-programme, je rajoute aux logs "standards" et d'erreurs principales, les logs issues de son exécution.
Actuellement, je fais tout simplement un
car $log_secondaire_standard >> $1
cat $log_erreur_secondaire >> $2
Une fois tous les jobs terminés, je concatène les deux logs générales dans un seul fichier, là encore par un
cat $log_standard >> $log_generale
cat $log_erreurs >> $log_generale
La log générale est, enfin, envoyée automatiquement par mail.
C'est sans doute ^pas ce qu'il y a d'optimal, mais en l'état actuel de mes connaissances, je ne sais pas mieux faire.
Les chiens vous regardent tous avec vénération. Les chats vous toisent tous avec dédain. Il n’y a que les cochons qui vous considèrent comme leurs égaux. - Winston Churchill
Je suis parrain Linux
Hors ligne