Redirection

mardi 16 septembre 2008
par  Jerome ROBERT
popularité : 7%

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é

Statistiques

Dernière mise à jour

mercredi 5 juillet 2017

Publication

264 Articles
Aucun album photo
Aucune brève
6 Sites Web
2 Auteurs

Visites

80 aujourd’hui
188 hier
549826 depuis le début
9 visiteurs actuellement connectés