Next: Utilisation de sed pour
Up: Flux et sed comme
Previous: Exemple d'un tube complexe.
Table des matières
A présent, testez la commande ls nofile.txt
> A. Nous nous attendons à ce que ls
retourne un message d'erreur si nofile.txt
n'existe pas. Le message d'erreur est en effet affiché mais il n'est
pas écrit dans le fichier A. La raison
en est que ls a écrit son message dans
stderr tandis que > a seulement redirigé
stdout. Pour faire en sorte qu'à la fois la sortie vers stdout et
celle vers stderr soient versées dans le même fichier, il faut utiliser
un opérateur de redirection. Pour le shell, sdtout est désigné
par 1 et stderr par 2,
de sorte qu'une commande doit être suivie de la redirection 2>&1
pour forcer stderr à accompagner la sortie de stdout. Les mots stderr
et stdout sont, en fait, utilisés dans le langage C où les
nombres 1 et 2 sont connus comme des numéros
de fichiers ou des descripteurs de fichiers. Essayez ceci:
touch fichier_existant
rm -f fichier_non_existant
ls fichier_existant fichier_non_existant
|
ls produira deux lignes: l'une contenant
le terme fichier_existant et l'autre,
un message d'erreur pour indiquer que le fichier fichier_non_existant
n'existe pas. Le message d'erreur a été passé à stderr (ou descripteur
de fichier 2) et la ligne d'après a été
passée à stdout (descripteur de fichier 1).
A présent, exécutez les commandes suivantes:
ls fichier_existant fichier_non_existant 2>A
cat A
|
D'une part, la ligne associée à fichier_existant
est retournée à l'écran et d'autre part, A
contient le message d'erreur. Essayons la commande suivante:
ls fichier_existant fichier_non_existant 1>A
cat A
|
La notation 1> est la même que >A
car, lorsque le descripteur de fichier n'est pas indiqué, le shell
suppose qu'il s'agit d'1. Notez qu'A
contient stdout et que le message d'erreur est retourné à l'écran.
Testons:
ls fichier_existant fichier_non_existant 1>A 2>&1
cat A
|
A présent, le fichier A contient le message
d'erreur et la sortie normale. >&
est appelé un opérateur de redirection.
L'expression x>&y
indique au shell d'écrire le tube x dans
le tube y. La redirection est indiquée
de la droite vers la gauche sur la ligne de commande. Donc, dans l'exemple
ci-dessus, 2>&1 est opéré avant 1>A.
Donc, stderr est mélangé à stdout et le résultat est redirigé vers
A.
Finalement:
ls fichier_existant fichier_non_existant 2>A 1>&2
cat A
|
Nous observons que ceci a le même effet que précédemment, excepté
que la séquence est inverse: stdout est d'abord redirigé vers stderr
(1>&2) puis stdout est redirigé vers A.
Pour apprécier ce qui se passe en permutant les redirections entre
elles, faisons:
ls fichier_existant fichier_non_existant 2>&1 1>A
cat A
|
ce qui signifie que stdout est redirigé vers A
puis, que stder est redirigé vers stdout. Cette commande ne mixe pas
stderr et stdout puisque la redirection vers A
se produit en premier lieu.
Next: Utilisation de sed pour
Up: Flux et sed comme
Previous: Exemple d'un tube complexe.
Table des matières
1-01-2006