Shell

Rediriger les flux dans le Terminal sous OS X

Les redirections de flux E/S d’une commande
Première publication : 30 octobre 2003.
Mise en ligne: 10 janvier 2005.
Modifié le : 2 décembre 2005.
Par Frédéric Guerrier, XDjuj
Rediriger les flux dans le Terminal sous OS X, Flux, , Shell, , rediriger, , Commande, , Pipeline

Lorsque l’on effectue une commande dans le Terminal, la sortie de cette commande, son résultat en quelque sorte, est habituellement retournée sur la "sortie standard", qui est la fénêtre de shell dans laquelle vous travaillez. Il peut être pratique, par exemple pour sauvegarder les résultats d’une commande, de rediriger les "flux" de sortie dans un fichier, ou alors vers une autre commande...

Tout d’abord, il faut bien comprendre qu’il existe trois types de flux. Les flux d’entrées et de sortie standard, qui sont par défaut ce qui est saisi au clavier et retourné dans votre fenêtre de shell, et le flux de sortie standard d’erreurs qui s’affichera par défaut dans votre shell à la place de la sortie standard, en cas de mauvais déroulement de votre script.

Il existe plusieurs manières de procéder à une redirection. Utilisons les pour appréhender les différences.

Rediriger le flux de sortie standard

commande > fichier

Nous souhaitons aujourd’hui faire la liste de nos fichiers musicaux gentiment organisés et rangés par iTunes... Mais à la main... à l’aide de copiés/collés... il nous faudrait des semaines... Avec cette méthode, je ne sors plus, je n’ai plus le temps de manger, je perds mon job, puis ma femme, mes enfants ne veulent plus me voir, je rate la prochaine Apple Expo, bref, je fou ma vie en l’air...

Sortons plutôt notre bon vieux Terminal pour arriver à l’heure au boulot, et conserver cette jolie famille qu’est la mienne (une grosse voiture, une grosse moto, une grosse maison, une grosse piscine, des chiens, tout ça quoi... ha oui ! une jolie femme... :D). La méthode est simple, créer le fichier en lui donnant une première ligne de description, puis faire le listing et l’ajouter à ce même fichier.

-  Nous allons donc créer ce fichier, et lui ajouter la phrase suivante :

La commande echo permet d’afficher le texte qui lui est donné en argument dans notre fenêtre shell. Nous avons donc redirigé la sortie de cette commande, vers un fichier ListeMP3.txt sur notre bureau, à l’aide du symbole >. Ce premier symbole créera un fichier s’il n’existe pas déjà, puis y écrira le résultat de la commande le précédant. Si le fichier existe déjà, il l’écrasera et le contenu actuel serait remplacé par le nouveau.

-  Nous devons maintenant écrire à la suite de ce fichier, la liste de nos MP3 avec la commande ls :

Nous avons cette fois utilisé le symbole >>, ce qui nous a permis de conserver le contenu du fichier, et d’y écrire à la suite. Ce symbole permet donc l’écriture à la fin d’un fichier existant (il créera ce fichier pour y écrire s’il n’existe pas déjà). C’est le symbole à proprement parlé de la "concaténation".

Ces deux symboles servent donc à la redirection, ils agissent dans le sens des flèches qu’ils forment. Ainsi, il est possible de les inverser, pour rediriger l’entrée standard.

Rediriger le flux de l’entrée standard

commande < fichier

Nous venons de créer rapidement un fichier qui tient lieu de listing de nos MP3. Nous souhaiterions maintenant pouvoir apprécier la qualité de notre travail, en relisant simplement ce fichier.

Dans l’exemple suivant, le contenu de ListeMP3.txt, devient le flux d’entrée de la commande more (1).

Nous vous laissons observer le résultat. Holala que c’est chouette !
Si vous avez suivi les précédents tutoriaux et que vous êtes de bons élèves vous allez dire... "Mais ça ne sert à rien ! la commande more prend en argument directement le fichier qu’elle doit lire !" Et vous aurez raison ! Mais il fallait bien un exemple alors chippotez pas et laissez nous bosser en paix ! (je crois qu’on les a calmé Gun non ?)(oui, c’est clair ! ils font moins les malins maintenant...)

Rediriger le flux de sortie standard d’erreur

commande 2> fichier

Par défaut les messages d’erreur s’affichent dans le shell (sortie standard par défaut). Il est possible de rediriger ces messages d’erreurs renvoyés par les programmes en utilisant cette syntaxe :

Si l’on rencontre une erreur pendant l’exécution de la commande d’édition cat de notre fichier ListeMP3.txt (absence du fichier par exemple), le message d’erreur sera sauvegardé dans le fichier erreurs_log.txt, ici sur votre bureau.

C’est bien pratique pour suivre l’exécution de vos commandes et scripts...

Rediriger la sortie vers une commande

commande1 | commande2

Maintenant que nous avons créé et vérifié ce fichier, travaillons un peu dessus ! Ma femme, toujours très heureuse de me voir passer des heures sur mon mac... Me lance de but en blanc "Chéri ! Ne me dit pas que tu n’as pas acheté le dernier CD de la Star Académy !!# !@# !". Le divorse est proche... Le trouble s’installe, une vérification s’impose ! Vite, il me faut lire le fichier si habilement créé, et filtrer la ligne qui contiendra ce mot recherché : academy...

Pour ce faire, utilisons la notion de pipeline (2), qui va nous permettre de "passer" le résultat d’une commande à une autre commande. On utilise pour se faire l’opérateur | (3), entre les commandes, afin de diriger la sortie de la première, dans l’entrée de la deuxième. Vite au boulot...

On filtre donc notre fichier en cherchant les lignes contenant le motif "academy" grâce à la commande grep (4), ce qui nous donne :


~/Music/Best Of Incontournable/Star academy 4 ever en direct live trop de la balle.mp3

Ouf... sauvé, je dormirai au chaud encore cette nuit :) Merci le "pipe" !

Conclusion

Voilà pour les bases de ce concept de la redirection d’entrées et de sorties qui nous sera bien utile dans des scripts de shell par exemple...

Vous trouverez sur Internet bien plus d’informations sur cette technique si vous voulez aller plus loin dans son étude...

Bonne utilisation ;)

 

Alors je tiens cette fois à remercier Peugeot, pour faire des boîtes fragiles qui me font rouler en BMV... (Bus Métro Vélo), la mère Michelle (qui a toujours pas retrouvé son chat), la voisine de palier, les fabriquants de tongs, les pailles à cocktail et les guerriers asiatiques.

 

Programme qui permet d’afficher un fichier ou le résultat d’une commande par pages dans un shell

Tube de communication, dans la langue de Rabelais

Barre verticale dite "pipe" (à prononcer avec l’accent ricain) que l’on obtient en pressant alt+maj+l

Programme qui permet justement de rechercher un motif dans un fichier...

Envoyer
L'e-mail du destinataire :

Votre Nom :

Votre e-mail :


 |  Imprimer |  Réagir
Frédéric Guerrier
Auteur : XDjuj
Bio : La vie est faite d’atomes d’air et de molécules d’oxygène... à moins que ce ne soit le contraire... ;)
XDjuj
Rediriger les flux dans le Terminal sous OS X
 le 26 octobre 2005 - Menu du forum
 
C’est bien joli tout ça, mais comment rediriger une sortie de ditto -V ? Chez moi ça marche pas. Sans doute parce que je suis un puceau du Terminal...
 
Rediriger les flux dans le Terminal sous OS X
 le 21 octobre 2005 - Menu du forum
 

Rectificatif :

Si ton tonton tond mon tonton et mon tonton tond ton tonton alors nos deux tontons seront tondus.

 :-)

 
Copyright 2002-2017 xrings - Tous droits réservés - Mentions légales - Propulsé par SPIP - Webdesigner et référencement Frédéric Guerrier