En réponse à une demande d'Ygeronimi qui voulait une suite à mon article sur la ligne de commande.
Les Entrées / Sorties en ligne de commande
Les commandes (ou programmes) lancés en mode ligne de commande reçoivent des données de l’entrée standard stdin (le clavier), affichent les résultats sur la sortie standard stdout (l’écran) et renvoient les messages d’erreur sur la sortie standard pour les erreurs stderr(l’écran également).
D’une manière générale, les entrés/sorties en mode invite de commande concernent la console (CON : ) c’est-à-dire le clavier et l’écran.
On appelle ces flux de données des « handles »
Handle : STDIN ; son équivalent numérique : 0 ; c’est le clavier
Handle : STDOUT ; son équivalent numérique : 1 ; sortie vers la fenêtre de commandes
Handle : STDERR ; son équivalent numérique 2 ; sorties des erreurs vers la fenêtre de commandes
Handle : UNDEFINED 3-9 marque un handle défini par l’application.
Heureusement nos PC possèdent d’autres entrées/sorties, et on peut rediriger les entrées/sorties standards vers d’autres entrées/sorties et vers (ou à partir) de fichiers.
Le mécanisme de redirection nous permet d’envoyer la sortie console, non pas vers l’écran mais vers un fichier texte. On peut même l’envoyer dans le vide, nulle part (NUL).
On peut aussi demander au programme de considérer que l’entrée provient d’une autre source, un fichier, par exemple au lieu du clavier.
Redirection des sorties stdout et stderr
Pour rediriger la sortie standard vers un fichier, il suffit de faire suivre la commande par le symbole de redirection ‘>’ suivi du nom du fichier de destination. Le symbole ‘>’ fait penser à une flèche indiquant le sens de la sortie.
Exemple : enregistrer le contenu du répertoire dans un fichier
DIR > Repertoire.txt
Cette commande va d’abord crée un fichier ‘Repertoire.txt’ et y mettra la sortie de la commande DIR.
Si un fichier du même nom ‘Repertoire.txt’ existait déjà, il sera écrasé et remplacé par un nouveau contenu. Ce fichier pourra être manipulé comme n’importe quel fichier texte.
Si vous désirez préserver le contenu du fichier de destination il suffit d’utiliser deux signes ‘>’ consécutifs.
Exemple
Date /t >> info.txt
Cette commande ajoutera la date actuelle à la fin du fichier ‘info.txt’ s’il existe, sinon il sera créé.
On peut aussi annuler la sortie standard stdout en redirigeant ce qui lui est destiné vers la sortie ‘NUL’
Exemple : Pour copier un fichier sans voir apparaître le message "1 fichier(s) copié(s)"
COPY Source.txt Destination.txt > NUL
Ici, on doit bien faire la différence entre la destination de la copie et la sortie standard qui devrait recevoir le message "1 fichier(s) copié(s)". La copie se fait comme il se doit mais le message destiné à la sortie standard est annulé. Il est à remarquer que si erreur il y a, le message d’erreur, lui, n’est pas annulé. En effet, sa destination est la sortie des erreurs stderr.
Pour annuler ce type de message, on doit demander la redirection de cette seconde sortie en faisant suivre la commande par ‘2> NUL’, comme ceci :
COPY Source.txt Destination.txt > NUL 2> NUL.
Redirection de l’entrée standard « stdin »
On peut prendre un fichier comme origine des codes à fournir à une commande (ou à un programme).
Exemple :
Faire un fichier qui contient des commandes destinées à la commande HELP
1/ créer un fichier TEST.TXT qui contient le mot dir
2/ Lancer la commande : HELP < TEST.TXT
La commande help va recevoir le contenu de test.txt, c’est-à-dire comme si on a lancé : HELP DIR
La sortie de la commande se fera sur la sortie standard (l’écran).
Mais on peut aussi combiner les redirections dans une seule commande, comme ceci :
HELP < TEST.TXT > MEMO.TXT
Cette commande va recevoir comme entrée le contenu de TEST.TXT et va rediriger sa sortie vers MEMO.TXT
Les caractères ‘>’ et ‘<’ servent pour rediriger les entrées/sorties vers ou depuis des fichiers.
Imaginons un programme P1 dont le résultat sera envoyé dans un fichier TEMP.TXT. Ce même fichier doit servir comme entrée à un programme P2. Les commandes successives seraient :
P1 > TEMP.TXT
P2 < TEMP.TXT
Autrement dit, les données sorties par le programme P1 servent au programme P2.
Il existe un moyen pour faire passer des données d’un programme à un autre. Pour cela on utilise le ‘pipe’ en anglais, c’est-à-dire ‘tube’ en français. Ce pipe (ou tube) est symbolisé par le caractère | (barre verticale)
Exemple :
DIR | MORE
La sortie de la commande DIR va être envoyée comme entrée au filtre MORE qui affichera les sorties écran par écran.
TYPE Annuaire.txt | SORT | MORE
Dans cet exemple on utilise deux filtres SORT et MORE
La sortie de la commande TYPE Annuaire.txt (c-à-d afficher le contenu du fichier Annuaire.txt) va être envoyée dans un 1er temps au filtre SORT (qui va trier le contenu de la sortie de TYPE) et dans un second temps au filtre MORE qui affichera le résultat écran par écran.