• Aucun résultat trouvé

Redirections et tubes

7.2.1

Redirection de la sortie standard

Quand vous vous loguez, le shell affecte automatiquement l’entrée standard à votre clavier, et la sortie standard à votre écran. Cela signifie que, par défaut, la plupart des programmes liront les données depuis votre clavier et écriront les résultats sur votre écran. Cependant, à chaque fois que vous entrez une commande et juste pour celle-ci, vous pouvez indiquer au shell de modifier l’entrée ou la sortie standard.

Voici comment cela fonctionne : si vous souhaitez que la sortie se fasse sur l’écran, vous n’avez rien à faire. Le shell fait cela automatiquement.

Si vous voulez que la sortie standard se fasse dans un fichier, saisissez un > (chevron supérieur) suivi du nom de fichier, à l afin de la commande. Par exemple, la commande ls > fic envoie le résultat de la commande ls dans le fichier fic. Le caractère > est assez représentatif de ce qui se passe, car on peut le considérer comme une flèche montrant le chemin suivi par les données produites en sortie.

Si le fichier n’existe pas, Unix le créera. S’il existe déjà, son contenu sera remplacé. Si vous employez deux caractères chevron supérieur >> à la suite, Unix va ajouter les données produites au fichier déjà existant.

Quand nous envoyons envoyons la sortie standard dans un fichier, nous disons que nous le redirigeons. Les deux commandes précédentes font donc une redirection de la sortie standard vers un fichier.

C’est à vous de choisir, quand vous redirigez la sortie, entre le remplacement avec > ou l’ajout avec >>. Si le fichier n’existe pas, ces deux commandes sont équivalentes.

7.2.2

Redirection de l’entrée standard

Par défaut, l’entrée standard est liée à votre clavier. Quand vous entrez une commande qui doit lire des données, Unix s’attend à ce que vous les rentriez au clavier, une ligne à la fois. Quand vous avez fini d’entrer des données, il vous faut presser ^D (le code de fin de fichier). L’envoi de ce code indique qu’il n’y à plus de données disponibles.

Dans bien des cas, vous aurez envie de rediriger l’entrée standard depuis un fichier. Autrement dit, vous demanderez au shell de lire ses données depuis un fichier et non depuis le clavier. Pour cela, rentrez < (le chevron inférieur), suivi du nom de fichier à la fin de la commande.

Par exemple, pour trier les données contenues dans un fichier nommé temp, utilisez la commande suivante : sort < temp. Comme vous pouvez le voir, le caractère < indique assez clairement le sens du transfert depuis le fichier indiqué vers le programme.

Comme vous pouvez l’imaginer, il est possible d’utiliser simultanément la redirec- tion de l’entrée standard et celle de la sortie standard. Par exemple, la commande : sort < rawdata > names lit les données depuis le fichier nommé rawdata, le trie, et écrit le résultat dans un fichier nommé names.

CHAPITRE 7. REDIRECTIONS, TUBES ET FILTRES : PRINCIPES 55

7.2.3

Tubes (pipes)

Si vous voulez que la sortie d’un programme soit communiquée comme entrée d’un autre programme, rentrez le caractère | (barre verticale) suivie du nom de programme. Par exemple, pour envoyer la sortie du programme de tri sort vers le programme d’impression lpr, faites sort | lpr. Quand nous envoyons la sortie standard d’un programme vers un autre programme, nous disons que nous établissons un tube de communication entre les programmes. Ainsi, la commande sort envoie ses résultats à la commande lpr via un tube.

Une fois que vous savez comment établir un tube, vous pouvez bâtir une commande dans laquelle les sorties des programmes sont acheminées d’un programme à l’autre en séquence formant ainsi un pipe-line de tubes. L’image d’un pipe-line est adaptée si l’on songe que celui-ci sert à transporter de la matière (pétrole ou gaz) d’un endroit à un autre. Une image encore meilleure est celle d’une chaîne d’assemblage où chaque programme modifie les données de manière différente. Les données non encore traitées entrent dans la chaîne d’assemblage par l’entrée d’un tube tandis que les données produites apparaissent en sortie du dernier programme de la chaîne.

Bien utiliser Unix c’est savoir quand et comment résoudre un problème en combinant des programmes avec des tubes.

7.2.4

Tés (tee)

Il se peut que vous ayez envie de rediriger la sortie standard d’un programme vers deux sorties différentes simultanément. La solution à ce problème est de vous servir d’un tee. Le tee est un mécanisme qui lit l’information sur son entrée standard et la recopie simultanément sur la sortie standard et dans un ou plusieurs fichiers.

Pour créer un tee, employez la commande tee. La syntaxe de la commande tee est : tee [-a][fichiers...]. Si le ou les fichiers existent déjà, tee détruira leur contenu et le remplacera par celui de l’entrée standard. Si vous souhaitez ajouter des données à la fin d’un fichier au lieu de le remplacer, servez-vous de l’option -a.

7.2.5

Exercices

1. Vous désirez lister le contenu de répertoire /bin. Pour cela vous utilisez la com- mande ls /bin. Cependant, votre objectif n’est pas d’afficher le résultat sur la sortie standard, l’écran, mais d’enregistrer ces informations dans le fichier bin.txt. Comment faites-vous?

2. Comment faites-vous pour afficher les 5 premières lignes du fichier bin.txt? Com- ment faites-vous pour afficher les 5 dernières?

3. Vous désirez extraire les 5 premières ligne du fichier bin.txt à l’aide de la commande tail pour les enregistrer dans le fichier 5pl_bin.txt. Comment faites-vous? 4. Vous désirez afficher les 15 premiers fichiers de répertoire /lib. Comment faites-vous

en utilisant les commandes ls, tail et un tube?

5. En plus d’afficher les 15 premiers fichiers de répertoire /lib vous voulez les enre- gistrer dans le fichier 15pl_lib.txt. Pour cela il vous faudra utiliser un tee. Quelle est la ligne de commande à saisir?