Redirection
par
popularité : 3%
IX. Les redirections :
Chaque commande dispose de trois descripteurs de fichiers, ouverts
dès le début du programme.
- Entrée standard Possibilité d’y lire des données
- Sortie standard Possibilité d’y écrire des résultats
- Erreur standard Possibilité d’y écrire ce qui sera considéré
comme des erreurs
Toutes les commandes n’exploitent pas systématiquement ces trois
descripteurs.
Le concepteur d’une nouvelle commande est encouragé à suivre les
« traditions Unix ». Si une commande attend des arguments ( par exemple, des noms de fichiers ) et
si on ne lui fournit pas ces arguments, elle peut décider de lire des données
sur le descripteur « entrée standard ».
Il ne faut donc pas confondre « arguments » et « entrée standard ».
Les commandes exploitent, en général, les deux possibilités pour
bénéficier pleinement des fonctionnalités du shell.
Une commande effectuant un traitement de type procédural n’écrit rien sur
le descripteur « sortie standard » quand le traitement s’est bien déroulé.
Elle préfère positionner un code retour. Par contre, dans un cas anormal,
elle pourra décider de compléter ce code retour par un message sur le
descripteur « erreur standard ».
Une commande dont le rôle est d’afficher des résultats exploite, bien
entendu, le descripteur « sortie standard » mais profite du descripteur « erreur
standard » pour séparer résultats proprement dits et messages d’erreur.
Le processus shell de connexion a pour terminal de contrôle celui de l’utilisateur.
Par défaut, tous les processus générés par le shell et, par conséquent,
les trois descripteurs de fichiers, sont associés à ce même terminal :
-
Entrée standard Données entrées au clavier ( Fin de fichier quand on saisit un « Ctrl d » en début de
ligne ) -
Sortie standard Affichage à l’écran
- Erreur standard Affichage à l’écran
Redirections
Une redirection consiste à changer l’association : « Descripteur de
fichier - Fichier physique » Une redirection peut s’effectuer vers
- Un fichier ordinaire
ou
- Un fichier spécial ( périphérique )
A. Redirection en entrée
elle s’effectue au moyen du caractére spécial "<".
Toute commande devant lire des données depuis l’entrée standard peut aller
les chercher dans un fichier.
Exemple :
$ mail user3 < fic
B. Redirection de sortie
Elle s’effectue au moyen des caractères spéciaux ">" et
">>".
Toute commande devant écrire des données vers la sortie standard peut aller
les écrire dans un fichier.
Exemples :
$ find . -name toto > /tmp/fics.toto
$ ls >> fichierSortie
Si le fichier spécifié en sortie n’existe pas, le système va tenter de le
créer ; s’il existe déjà , il y aura soit écrasement (avec >) au lancement
de la commande, soit concaténation sans écraser l’ancien contenu (avec
>>).
C. Redirection
de sortie erreur
Elle s’effectue au moyen des séquences de caractères "2>"
et "2>> ".
Le principe est exactement le même que précédemment.
Exemples :
$ cp 2> cp.erreurs
$ find / -name fich1 -print 2> /dev/null
D. Redirections entre processus : les tubes (pipes)
cmd1 | cmd2 redirige la sortie standard de cmd1 vers l’entrée
standard de cmd2.
La sortie d’un processus est redirigée vers l’entrée du
suivant à travers un tube.
Un enchaînement de processus séparés par des tubes
forme un pipe-line au bout duquel sort un résultat bien travaillé.
Exemple :
$ banner bonjour | write usery
La redirection peut aussi porter sur les unités (files
descriptors).
> fichier |
redirige stdout vers le fichier |
n> fichier |
redirige l’unité n vers le fichier |
n>> fichier |
redirige l’unité n en fin de fichier |
>&m |
redirige stdout vers l’unité m |
n>&m |
redirige l’unité n vers l’unité m |
< fichier |
redirige le fichier vers stdin |
n< fichier |
redirige le fichier vers l’unité n |
<< script |
stdin est remplacé par le script |
<&n |
redirige l’unité n vers stdin |
n<&m |
redirige l’unité m vers l’unité n |
Exemples :
$ ( who ; date ; ls) > fsortie 2> ferreur $ find / -name passwd -print 1> resultat 2>&1 $ find / -name passwd -print 2>&1 1> resultat $ exec 5< donnees $ exec 7> resultat $ wc -l <&5 >&7 $ cat resultat
|
E. Redirection sur place d’une commande
Une commande est substituée par son résultat.
commande
Exemple :
$ echo "aujourd’hui,date
, il gèle"
aujourd’hui, Mon Apr 29 16:45:34 MDT
2001, il gèle
Commentaires Forum fermé