Précédent   Forum des professionnels en informatique > Systèmes > Linux > Applications > Shell
Shell Vos questions sur l'utilisation des commandes shell
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 11/02/2011, 14h28   #1
Membre expérimenté
 
Développeur Java
Inscription : mars 2004
Messages : 616
Détails du profil
Informations personnelles :
Localisation : France

Informations professionnelles :
Activité : Développeur Java

Informations forums :
Inscription : mars 2004
Messages : 616
Points : 598
Points : 598
Par défaut Rediriger la sortie standard d'erreur avec un traitement

Bonjour,

je souhaite faire un fichier de log d'une suite de commande.
Mon but est que stdout et stderr soit afficher à l'écran ET qu'il soit redirigé vers un fichier.
Donc une :
Code :
1
2
 
cmd 2>&1 | tee -a monfichier
mais je voudrais ajouter dans le fichier "ERREUR : " devant les lignes affichées sur stdout

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
 
#!/bin/sh
 
function truc() {
    rm ooooooooooo
    echo "action sans erreur"
    rm dfoofsidfioi
}
 
 
FIFO=/tmp/tempfifo
FICHIER_LOG=truc.txt
 
mkfifo $FIFO
 
rm $FICHIER_LOG
 
(sed 's/^\(.\)/ERREUR : \1/' < $FIFO | tee -a $FICHIER_LOG) &
 
truc 2>$FIFO | tee -a $FICHIER_LOG
 
rm -f $FIFO
le problème c'est que j'ai en sortie :
Citation:
action sans erreur
ERREUR : rm: ne peut enlever `ooooooooooo': Aucun fichier ou répertoire de ce type
ERREUR : rm: ne peut enlever `dfoofsidfioi': Aucun fichier ou répertoire de ce type
Le problème c'est que les lignes ne sont pas dans l'ordre.

Le but est donc de faire un méthode générique pour pouvoir lancer une suite de commande qui se trouve déjà dans plusieurs script sans à repasser sur chaque commande pour ajouter une option.

Merci
__________________
Plus j'apprend et mieux j'évalue l'étendu de mon ignorance.
Mes programmes : http://www.bubulemaster.fr
bubulemaster est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 11/02/2011, 19h13   #2
Membre Expert
 
Homme Alexis
Intégrateur d'Exploitation
Inscription : février 2003
Messages : 876
Détails du profil
Informations personnelles :
Nom : Homme Alexis
Âge : 32
Localisation : France

Informations professionnelles :
Activité : Intégrateur d'Exploitation
Secteur : Biens de consommation

Informations forums :
Inscription : février 2003
Messages : 876
Points : 1 619
Points : 1 619
Envoyer un message via ICQ à Alek-C Envoyer un message via Skype™ à Alek-C
Tu affiches stdout directement et stderr en passant par une file... donc tu désynchronise ton traitement, et tu ne peux plus (selon moi) garantir l'ordre d'arrivée des messages !

Il faut rediriger la sortie d'erreur vers un process intermédiaire (avec bash par contre) :

Code :
1
2
3
4
5
6
7
8
9
10
11
#!/bin/bash
 
exec 2> >(sed 's/^/Err : /' >&2)
 
function truc() {
    rm ooooooooooo
    echo "action sans erreur"
    rm dfoofsidfioi
}
 
truc
Code :
1
2
3
4
bash test.sh
Err : rm: cannot remove `ooooooooooo': No such file or directory
action sans erreur
Err : rm: cannot remove `dfoofsidfioi': No such file or directory
Alek-C est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 16/02/2011, 18h16   #3
Membre expérimenté
 
Développeur Java
Inscription : mars 2004
Messages : 616
Détails du profil
Informations personnelles :
Localisation : France

Informations professionnelles :
Activité : Développeur Java

Informations forums :
Inscription : mars 2004
Messages : 616
Points : 598
Points : 598
Ok, merci, je ne connaissais pas cette possibilité.
__________________
Plus j'apprend et mieux j'évalue l'étendu de mon ignorance.
Mes programmes : http://www.bubulemaster.fr
bubulemaster est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 09h47.


 
 
 
 
Partenaires

Hébergement Web