Vous n'êtes pas identifié.
Bonjour tout le monde,
Voila j'ai un petit problème dans un de mes scripts, j'aimerais bien afficher une commande et la logger en même temps, pour vérifier les erreurs.
J'ai essayer avec la commande 'tee' mais je n'est pas les erreurs.
Voici la ligne de mon script :
nice -+19 $cmd | tee $log_tmp/error.log
Et dans celui-ci j'ai bien le résultat de la commande sauf les erreurs.
Et les options de cette commande ne sont pas super fournis.
Je suppose que quelqu'un a déjà rencontré ce problème dans un de ses scripts.
Merci d'avance.
Hors ligne
Hello,
Problème classique. Chaque processus a deux flux de sorties, un pour les données et un pour les erreurs. Les pipes sont normalement utilisés pour faire passer des données, donc par défaut seul la sortie de données (stdout) est copiée vers le processus suivant. La sortie d'erreurs (stderr) arrive toujours directement sur ton écran. Plusieurs solutions sont possibles, suivant le résultat que tu veux atteindre.
J'utilise la syntaxe bash. Pour csh c'est légérement différent.
1) Regrouper les deux sorties en une seule: la redirection 2>&1 redirige le 2e descripteur de fichier (stderr) vers le premier (stdout)
nice -n 19 $cmd 2>&1 | tee...
2) stocker les donnés et les erreurs dans un fichier différent, et n'afficher que les erreurs: 2>&1 redirige stderr vers le stdout actuel (l'entrée du pipe), puis redirige le stdout vers un fichier de données. (l'ordre est important)
nice -n 19 $cmd 2>&1 >$log_tmp/data.log |tee $log_tmp/error.log
pour plus d'infos la dessus,
man bash
et bonne indigestion
++
BOFH :cheesy:
Hors ligne
Merci pour ton cours fort intéressant BOFH, je ne savait pas que seul le flux stdout passait entre processus avec un "pipe", je pensait bêtement que le "pipe" ferait passer les deux flux.
Oki merci.
je vais utiliser :
nice -n 19 $cmd 2>&1 | tee $log_tmp/error.log
car je veux afficher les deux flux mais stocker que les erreurs dans un fichier.
Hors ligne
Salut !
Pour "logguer" toutes les sorties d'une commande tout en les affichant à la console la commande 'script' est très pratique :
script -fac "mplayer ...." error.log
option :
-a : comme pour tee "append", écrit à la suite dans le fichier.
-f : "flush" permet de regarder le log en même temps que la commande s'exécute.
-c : c'est pour spécifier une commande.
sinon 'script' permet aussi de "logguer" tout ce qu'il se passe dans un terminal :
script -f error.log
Il va "logguer" tout ce qu'il va être affiché dans le terminal.
Voila, en espérant que ça puisse aider certains.
Bash'
Hors ligne