Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#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