Sites


Introduction à la ligne de commande

CommandLineIntro: Redirection

Redirection

La redirection des résultats des commandes est une des parties les plus puissantes, mais aisément mal comprises, de l'interprète de commande (shell).  Pour éviter toute mauvaise compréhension, nous nous limiterons aux bases.

L'opérateur > (un "opérateur" est un symbole comme +,-,<,> qui représente une action spécifique) est utilisé pour rediriger les résultats.  Prenons un exemple très simple, si vous désirez lister l'ensemble des fichiers d'un répertoire, vous lancez la commande  ls.  Le résultat est affiché à l'écran.  Cependant, si vous préférez que cette liste soit conservée dans un fichier, vous ferriez quelque chose comme :

$ ls > my-file-list 

Le fichier my-file-list contient maintenant une liste de tous les fichiers, répertoires, liens et autres objets contenus dans le répertoire courant dont le nom ne commence pas par '.'. (Notez que le shell crée, si nécessaire, les fichiers utilisés pour la redirection avant d'exécuter la commande, de ce fait, le fichier my-file-list apparaîtra également dans la liste.)

L'opérateur > est un opérateur "destructif" -- si vous rediriger la sortie d'une commande vers fichier existant, celui-ci sera sur-écrit. Vous lui préférerez parfois, en particulier si vous êtes en train de maintenir un journal des opérations, l'opérateur >>.  Il fonctionne de la même manière que l'opérateur >, à ceci près qu'il ajoute le résultat à la fin d'un fichier pré-existant.   (Si le fichier n'existe pas encore, il le créera.)

D'autres destinations vers lesquels vous pouvez rediriger les résultats existent: les dispositifs spéciaux comme les terminaux, ou /dev/null, qui est un puits sans fond (plus simplement les résultats sont simplement ignorés).  Si vous lancez un programme dont vous savez qu'il produira une quantité volumineuse de résultat dont vous n'avez que faire, vous pouvez faire ceci :

$ bigprogram > /dev/null

Le programme s'exécuteras normalement mais vous verrez les résultats qu'il affiche normalement.  (Le cas échéant, vous verrez cependant les messages d'erreur; plus de détails ci-dessous dans la section les Descripteurs de Fichiers).

L'opérateur < redirige les entrées.  La plupart des programmes qui s'attendent à recevoir leurs entrées du terminal, n'auront aucun problème à les accepter d'une autre source, par exemple un fichier.

Si vous désirez, par exemple, envoyer un courriel à joe dont le contenu est myfile.txt, vous pourriez lancer la commande :

$ mail joe < myfile.txt

Les opérateurs de redirection sont particulièrement pertinents dans le cas des tâches tournant en arrière plan.  Lorsque vous travaillez avec un interface graphique, vous êtes déjà familiers avec le concept de passer d'une fenêtre à l'autre, par exemple, en réduisant la fenêtre de l'application qui joue de la musique et en restaurant la fenêtre de votre navigateur web.  Une telle situation est également possible avec la ligne de commande.  Cependant, au lieu de réduire la commande qui joue vos fichiers musicaux, vous la lancez en arrière plan en ajoutant à la fin de la commande une esperluette (&) :

$ ogg123 *.ogg &

Malheureusement, toute information produite pas la commande comme l'annonce d'une nouvelle piste avec son titre et sa description sera envoyée vers le terminal encombrant l'écran de votre navigateur (texte). Vous désirez éviter cela.  De nombreux programmes proposent un mode silencieux qui supprime l'information normalement produite. Ce mode est souvent activé par les options -q ou --quiet, mais ce n'est pas une convention générale et vous devez lire la documentation avec man ou info avant de vous y fier.  Si vous voulez être sûr d'éliminer tout affichage sans compter sur la coopération du programme,  vous pouvez y arriver aisément en redirigeant l'affichage vers un fichier.  Par exemple, la commande suivante envoie l'affichage de ogg123 vers /dev/null parce que nous sommes pas intéressés par l'annonce des pistes tant que la musique continue par contre tout message d'erreur sera conservé dans music_err de manière à pouvoir déterminer facilement pourquoi soudainement la musique s'arrêterait.  De cette façon, aucun affichage ne vient vous perturber dans le terminal et il est toujours possible de jeter un oeil au résultat plus tard en lançant la commande cat music_err:

$ ogg123 *.ogg >/dev/null 2>music_err &
Un programme qui tourne en arrière plan ne sait recevoir des entrées du terminal.  Si, par erreur, vous mettez en arrière plan un programme qui s'attend à recevoir des entrées du terminal (et que vous n'avez pas redirigé son entrée à partir d'un fichier en utilisant l'opérateur <), celui-ci va rester bloquer en attendant vainement une entrée.

Il y a une erreur de communication avec le serveur Booktype. Nous ne savons pas actuellement où est le problème.

Vous devriez rafraîchir la page.