Redirections des fichiers
On travaille souvent avec les fichiers dans nos manipulations UNIX. On lit les contenus d'un fichier vers le flux stdin
, et on écrit les résultats sortants sur le flux stdout
dans le fichiers.
Redirections : stdin
stdin
Il est possible de lire un fichier sans passer par la commande cat
. En effet, il existe un raccourci qui permet de lire les contenus d'un fichier, et les envoyer sur le flux standard in
:
L’opérateur <
à la fin d’une commande va lire le fichier vers le stdin
de la commande
Redirections : stdout
stdout
Il est possible de rediriger le stdout
vers un fichier :
L’opérateur
>
redirige le stdout vers un fichier, en remplaçant le fichier !L’opérateur
>>
concatène un fichier existant avec de nouvelles lignes.
Essayez !
Redirections dans les deux sens
On peut combiner les redirections des flux de stdin
et stdout
:
stdout
vs stderr
stdout
vs stderr
Parfois un processus va émettre des erreurs. Le flux d’erreurs se redirige vers un autre chaîne :
stdout
= la chaîne 1stderr
= la chaîne 2
Essayez le suivant :
Est-ce qu'il y a un résultat dans output.txt
?
Non! Le fichier est vide !
Qu'est-ce qu'on voit dans l'invite de commandes ?
On voit des erreurs qui ont été emis. J'aurais peut-être préféré que les erreurs soient marqués dans
output.txt
Pourquoi ?
Seulement les valeurs dans erreurs sont émises sur le flux
stdout
. Ceci pour assurer une bonne continuation des données dans notre tuyau de traitement. Si un erreur est rencontrée, on l'indique sur un flux différent.
Et si on voulait rediriger le flux d'erreurs dans un autre fichier ?
En précisant 2>
on dit à l'interprète de prendre la chaîne numéro 2 (stderr
) et rediriger les contenus dans le fichier err.txt
.
Par défaut, une redirection sans numéro parle de la chaîne 1 (stdout
). Ici donc, les résultats sans erreur sont quand même redirigés vers le fichier output.txt
.
On peut même fusionner les chaînes, surtout si on veut voir les résultats et les erreurs dans le même fichier :
Ici, le symbole 2>&1
veut dire qu'on prend les valeurs de la chaîne 2, et les fusionner (&
) avec la chaîne 1
.
Le stdout
et stderr
se trouve tous les deux dans le fichier output.txt
Dernière mise à jour