| bash | |||
Nombash - Interpréteur de commandes GNU Bourne-Again SHell.Synopsisbash [options] [fichier]CopyrightBash est sous Copyright (C) 1989, 1999 de la Free Software Foundation, Inc.DescriptionBash est un interpréteur (Shell) compatible sh qui exécute les commandes lues depuis l'entrée standard, ou depuis un fichier. Bash incopore également des fonctionnalités provenant des interpréteurs Korn et C-shell (ksh et csh).Bash est entièrement concu pour être conforme aux spécifications IEEE concernant les shells et les outils Posix (Groupe de travail de l'IEEE 1003.2). OptionsEn plus des caractères d'options documentés dans la description de la commande interne set, bash accepte les arguments suivants lorsqu'on l'invoque :
Bash reconnait également plusieurs options multi-caractères. Ces options doivent apparaitre sur la ligne de commande avant les options mono-caractère.
ArgumentsS'il reste des arguments sur la ligne de commande après le traitement des options, et si ni l'option -c, ni l'option -s ne sont présentes, le premier argument est supposé être le nom du fichier dans lequel lire les commandes. Lorsque bash est invoqué de cette maniere, $0 contient le nom du fichier, et les autres paramètres positionnels contiennent les arguments restants. Bash lit, et exécute, les commandes depuis ce fichier, puis se termine. Le code de retour de bash est celui de la derniere commande exécutée dans le fichier script. Si aucune commande n'a été exécutée, le code de retour est 0.InvocationUn shell est dit de login si le premier caractère de son argument numéro zéro est un -, ou s'il est invoqué avec l'option -login.Un shell est interactif si son entrée standard et sa sortie standard sont toutes deux connectées à un terminal (déterminé par la fonction isatty(3) ), ou s'il est invoqué avec l'option -i. Le paramètre PS1 est positionné, et le paramètre $- contient la lettre i si bash est interactif, ce qui permet à un script ou à un fichier de démarrage de vérifier l'état du shell. Le paragraphe suivant décrit comment bash éxécute ses fichiers de d'initialisation. Si l'un de ces fichiers existe mais n'est pas accessible en lecture, bash signale une erreur. Les tildes sont remplacées par des noms de fichiers comme décrit dans Développement du Tilde dans la section Développement.
Les Shells de Login (interactifs
ou non) : Au login :
Si ~/.bash_profile existe, il est exécuté,
A la sortie :
Shells interactifs, mais pas de Login : Au démarrage :
Shells non-interactifs: Au démarrage:
Si Bash est invoqué sous le nom sh, il essaye d'imiter au maximum le comportement de la version "historique" de sh autant que possible, tout en essayant de se conformer au standard POSIX. Pour un shell de login, il n'essaye d'exécuter que /etc/profile et ~/.profile, dans cet ordre. L'option -noprofile peut toujours être utilisée pour désactiver ce comportement. Quand il est invoqué en tant que shell interactif sous le nom sh, bash consulte la variable ENV, développe sa vakeur si elle est définie et utilise son développement en tant que nom de fichier à lire et exécuter. Comme un shell invoqué sous le nom sh n'essaye pas d'exécuter aucun autre fichier de démarrage, l'option --rcfile n'a aucun effet. Un shell non interactif invoqué sous le nom sh ne lit aucun autre fichier d'initialisation. Quand il est invoqué sous le nom sh, bash entre en mode posix après avoir lu les fichiers d'initialisation. Quand bash est invoqué en mode posix, avec l'option -posix sur la ligne de commande, il suit ce standard en ce qui concerne les fichiers de démarrage. Dans ce cas, la variable ENV est développée, et le fichier qui en résulte est exécuté. On n'exécute pas d'autre fichier d'initialisation. Bash tente de déterminer s'il est exécuté par le démon éxécutant des shells à distances (généralement appellé rshd). Si bash se rend compte qu'il est exécuté par rshd , il lit et exécute les commandes de ~/.bashrs , si ce fichier existe et est accessible en lecture. Il ne fera pas cela comme le ferait sh . L'option --norc peut être utilisé pour interdire ce comportement, et l'option --rcfile permet de forcer l'utilisation d'un autre fichier, mais rshd n'utilise généralement pas ces options ni n'autorise leur utilisation. Si le shell est lancé avec un numéro de groupe effectif différend du groupe réel de l'utilisateur (GID), et si l'option -p n'est pas appliquée, aucun fichier d'initialisation n'est lu, les fonctions du shell ne sont pas héritées de l'environnement, la variable SHELLOPTS est ignorée si elle apparaît dans l'environnement, et le numéro effectif de l'utilisateur (EUID) est remplacé par l'UID. Si l'option -p est appliquée lors de cette invocation, le comportement au démarrage est le même maie l'EUID n'est pas réinitialisé. Note du traducteur: Sous Linux, le paragraphe précédent est inutile car pour des raisons de sécurités, le noyau ignore les bits Set-User-Id et Set-Group-Id. Donc l'EUID sera toujours égal à l'UID, de même pour le GID et l'EGID. DéfinitionsLes définitions suivantes sont utilisées tout au long de ce document.
| & ; ( ) < > espace tabulation
|| & && ; ;; ( ) | <retour-chariot> Mots RéservésLes mots réservés ont une signification spéciale pour le shell. Les mots suivants sont réservés et interprétés par le shell lorsqu'ils ne sont pas protégés, et s'il s'agit soit du premier mot d'une commande simple, soit du troisième mot d'une commande case ou for (voir le paragraphe GRAMMAIRE DU SHELL ci-dessous).! case do done elif else esac fi for function if in select then until while { } time [[ ]] Grammaire Du ShellCommandes simplesUne commande simple est une séquence d'affectations de variables facultative, suivie de mots séparés par des blancs et des redirections, et terminée par un opérateur de controle. Le premier mot indique la commande à exécuter. Les mots suivants sont transmis en argument à cette commande. La valeur de retour d'une commande simple est son code de sortie, ou 128+n si la commande a été interrompue par le signal n. Tubes (Pipelines)Un tube est une séquence d'une ou plusieurs commandes séparées par le caractère |. Le format d'un tube est :
La sortie standard de la commande_1 est connectée à l'entrée standard de la commande_2. Cette connexion est établie avant toute redirection indiquée dans une commande elle-même (voir le paragraphe REDIRECTION plus bas). Si le mot réservé ! précède un tube, la valeur de sortie de celui-ci sera la NéGATION logique de la valeur de retour de la dernière commande. Sinon, le code de retour d'un tube sera celui de la dernière commande. L'interpréteur attend la fin de toutes les commandes du tube avant de renvoyer une valeur. Si le mot réservé time précède le tube, les temps écoulés, consommés par le programme et par le système pour le programme sont indiqués quand le tube se termine. L'option -p change le format de sortie pour celui spécifié par POSIX. La variable TIMEFORMAT peut être affectée avec une chaîne de format indiquant comment les informations doivent être affichées; consultez la descriptions de TIMEFORMAT dans Variables du Shell. Chaque commande du tube est exécutée comme un processus indépendant (c'est à dire dans un sous-shell). ListesUne liste est une séquence d'un ou plusieurs tubes séparés par l'un des opérateurs ;, &, &&, ou ||, et terminée par ;, &, ou <retour-chariot>. Dans cette liste d'operateurs, && et || ont une précédence identique, suivis par ; et &, qui ont également une précédence identique. Si une commande se termine par l'opérateur de contrôle &, l'interpréteur l'exécute en arrière-plan, dans un sous-shell. L'interpréteur n'attend pas que la commande se termine et retourne un code 0. Les commandes séparées par un ; sont exécutées successivement, l'interpréteur attend que chaque commande se termine avant de lancer la suivante. Le code de retour est celui de la dernière commande exécutée. Les opérateurs de contrôle && et || indiquent respectivement une liste liée par un ET, et une liste liée par un OU. Une liste ET a la forme
commande_2 est exécutée si, et seulement si, commande_1 renvoie un code de retour nul. Une liste OU a la forme
commande_2 est exécutée si, et seulement si commande_1 renvoie un code de retour non-nul. La valeur de retour des listes ET et OU est celle de la dernière commande exécutée dans la liste. Commandes composéesUne commande composée est l'une des constructions suivantes :
Les opérateurs && et || n'exécutent pas expression2 si la valeur de expression1 est suffisante pour déterminer le code de retour de l'expression conditionnelle entière.
CommentairesDans un shell non-interactif, ou dans un shell interactif avec l'option -o interactive-comments activée par la commande interne shopt (voir COMMANDES INTERNES DU SHELL), un mot commençant par # permettra d'ignorer tous les caractères restants sur la ligne. Un shell interactif sans l'option interactive-comments n'autorise pas les commentaires. L'option interactive_comments est activée par défaut dans les shells interactifs.ProtectionLes protections (quoting) permettent de forcer l'interpréteur à ignorer la signification spéciale de certains caractères ou mots. Les protections peuvent être utilisées pour empêcher le traitement de certains caractères spéciaux, pour éviter que des mots-réservés ne soient reconnus comme tels, ou pour empêcher le développement des paramètres.Tous les méta-caractères mentionnés dans le paragraphe DéFINITIONS ci-dessus ont des significations spéciales pour le shell, et doivent être protégés pour garder leur propre valeur. Il y a trois mécanismes de protection : Le caractère d'échappement, les apostrophes (quote) et les guillemets (double-quote). Un caractère backslash (\), quand il n'est pas protégé, représente le caractère d'échapement. Il préserve la valeur littérale du caractère qui le suit, à l'exception du <retour-chariot>. Si une séquence \<retour-chariot> apparaît, et si le backslash n'est pas protégé, l'ensemble \<retour-chariot> est considéré comme une continuation de ligne (autrement dit, il est ignoré). Encadrer des caractères entre des apostrophes simples préserve la valeur littérale de chacun des caractères. Une apostrophe ne peut pas être placée entre deux apostrophes, même si elle est précédée d'un backslash. Encadrer des caractères entre des guillemets préserve la valeur littérale de chacun des caractères sauf $, `, et \. Les caractères $ et ` conservent leurs significations spéciales, même entre guillemets. Le backslash ne conserve sa signification que lorsqu'il est suivi par $, `, ", \, ou <fin-de-ligne>. Un guillemet peut être protégé entre deux guillemets, à condition de le faire précéder par un backslash. Les caractères spéciaux * et @ ont des significations spéciales lorsqu'ils se trouvent entre guillemets (voir le paragraphe PARAMÈTRES ci-dessous). Les mots de la forme $'chaîne' sont traités différemment. Le mot est développé en chaîne avec les séquences d'échappement remplacées par les séquences standards du C ANSI:
Le résultat après traduction est protégé par des apostrophes comme si le symbole dollar n'avait pas été présent. Une chaîne entre guillemets précédée d'un symbole dollar ($) sera traduite selon les locales en vigueur. Si la locale courante est C [Ndt: valeur par défaut] ou POSIX, le symbole dollar est ignoré. Si la chaîne a subi une traduction ou des remplacements, le résultat est protégé par des guillemets. ParamÈtresUn paramètre est une entité permettant de stocker des valeurs, un peu comme les variables dans les langages de programmation courants. Un paramètre peut se présenter sous forme d'un nom, d'un nombre, ou d'un des caractères spéciaux décrits plus bas, dans le paragraphe Paramètres Spéciaux. Au niveau du shell, une variable est un paramètre muni d'un nom.Un paramètre existe dès qu'on lui attribue une valeur. Une chaîne vide est une valeur valide. Une fois qu'une variable existe, elle ne peut être détruite qu'en utilisant la commande interne unset (voir COMMANDES INTERNES DU SHELL plus bas). Une variable peut recevoir une valeur par une affectation de la forme
Si aucune valeur n'est indiquée, la variable reçoit une chaîne vide. Toute valeur est soumise aux principes de développement du tilde, des paramètres et des variables, de la substitution de commandes, de l'évaluation arithmétique, et de la suppression des protections. Si une variable a son attribut -i activé (voir declare plus bas, dans le paragraphe COMMANDES INTERNES DU SHELL) alors la valeur est soumise à l'évaluation arithmétique, même si la syntaxe $[...] n'apparaît pas. Les mots ne sont pas tronqués, sauf avec la séquence "$@" comme cela est expliqué dans le paragraphe Paramètres Spéciaux ci-dessous. Le développement des noms de fichiers n'est pas effectué. Paramètres PositionnelsUn paramètre positionnel est un paramètre indiqué par un ou plusieurs chiffres (à l'exception du chiffre 0 seul). Les paramètres positionnels sont remplis avec les arguments du shell lors de son invocation. Ils peuvent être modifiés avec la commande interne set. On ne peut pas utiliser d'assignation pour modifier le contenu d'un paramètre positionnel. Les paramètres positionnels sont temporairement modifiés lors de l'exécution d'une fonction du shell (voir le paragraphe FONCTIONS plus bas). Un paramètre positionnel constitué de plusieurs chiffres doit être encadré par des accolades lors de son développement (voir le paragraphe EXPANSION plus bas). Paramètres SpéciauxIl existe plusieurs paramètres de l'interpréteur ayant un comportement particulier. Ces paramètres peuvent uniquement être consultés, on ne peut pas les modifier.
Variables du ShellLes variables suivantes sont assignées par l'interpréteur de commandes :
Les variables suivantes sont utilisées par l'interpréteur. Dans certains cas, bash affecte des valeurs par défaut aux variables, ces cas sont décrits plus bas.
MAILPATH='/usr/spool/mail/bfox?"Tu as du courrier":~/shell-mail?"$_ a du courrier"' Bash fournit une valeur par defaut pour cette variable, mais l'emplacement du fichier boîte à lettres depend du système (par exemple /usr/spool/mail/$USER).
ExpansionLes expansions sont appliquées à la ligne de commande après qu'elle ait été divisée en mots. Il existe sept types de développements : expansion des accolades, développement du tilde, remplacement des paramètres et variables, substitution de commandes, évaluation arithmétique, découpage des mots, et développement des noms de fichiers.L'ordre est : expansion des accolades, du tilde, des paramètres, des variables, des commandes, évaluation arithmétique (selon la méthode gauche-à-droite), découpage des mots et développement des noms de fichiers. Sur les systèmes qui le suppportent, un développement supplémentaire a lieu : la substitution de processus. Seuls l'expansion des accolades, le découpage des mots, et le développement des noms de fichiers peuvent modifier le nombre de mots. Les autres développement transforment un mot unique en un autre mot unique. La seule exception à cette règle est l'expansion de ``$@'' comme on l'a vu plus haut (voir le paragraphe PARAMÈTRES). Expansion des accoladesL' expansion des accolades est un mécanisme permettant la création de chaînes quelconques. Il est similaire au développement des noms de fichiers, mais les noms de fichiers créés n'existent pas nécessairement. Les motifs qui seront développes prennent la forme d'un préambule facultatif, suivi d'une série de chaînes séparées par des virgules, encadrée par des accolades. Un postambule peut éventuellement suivre la série de chaînes. Le préambule est inséré devant chacune des chaînes contenues entre les accolades, et le postambule est ajouté à la fin de chacune des chaînes résultantes, le développement se faisant de gauche à droite. Plusieurs développements d'accolades peuvent être imbriqués les uns dans les autres. Les chaînes résultant de chaque développement ne sont pas triées, l'ordre gauche à droite est conservé. Par exemple a{d,c,b}e se développe en `ade ace abe'. L'expansion des accolades est effectuée avant tout autre type de développement, et tous les caractères ayant une signification spéciale pour les autres développement sont conservés dans le résultat. Il s'agit d'une modification purement littérale. Bash n'effectue aucune interprétation syntaxique du texte entre les accolades. Une formule correcte pour le développement doit contenir des accolades ouvrantes et fermantes non protégées, et au moins une virgule non protégée. Toute formule incorrecte n'est pas développée et reste inchangée. Cette construction est généralement utilisée comme raccourci lorsque le préfixe commun aux différentes chaînes est relativement long : ou chown root /usr/{ucb/{ex,edit},lib/{ex?.?*,how_ex}} Le développement des accolades induit une légère incompatibilité avec les versions traditionnelles de sh, l'interpréteur Bourne. sh n'effectue aucun traitement sur les accolades ouvrantes et fermantes lorsqu'elles apparaissent dans un mot, et les laisse inchangées. Bash suppprime les accolades dans les mots, après développement. Par exemple si l'on fournit à sh le mot file{1,2}, il reste inchangé en sortie. Par contre, il est tranformé en file1 file2 par bash. Si une compatibilité stricte avec sh est nécessaire, lancez bash avec l'attribut -nobraceexpansion (voir OPTIONS plus haut) ou désactivez le développement des accolades avec l'option +o braceexpand de la commande set (voir le paragraphe COMMANDES INTERNES DU SHELL plus bas). Développement du TildeSi un mot commence avec le caractère tilde (`~'), tous les caractères précédant le premier slash (voire tous les caractères s'il n'y a pas de slash), sont considérés comme un nom de login possible. Si ce nom de login est une chaîne nulle, le tilde est remplacé par la valeur du paramètre HOME. Si HOME n'existe pas, le tilde est remplacé par le répertoire de connexion de l'utilisateur exécutant le shell. Si un `+' suit le tilde, ils seront remplacés par la valeur du paramètre PWD. Si un `-' suit, ils seront remplacés par la valeur de OLDPWD. Si la valeur suivant le tilde est un nom de login valide, le tilde, ainsi que ce nom seront remplacés par le répertoire personnel associé à ce nom. Si le nom est invalide, ou si le développement du tilde échoue, le mot est inchangé. Chaque affectation de variable est soumis au développement du tilde s'il suit le : ou le =. On peut donc utiliser des chemins d'accès avec un tilde pour remplir les variables PATH, MAILPATH, et CDPATH, et le shell fournira la valeur correcte. Remplacement des paramètresLe caractère `$' permet d'introduire le remplacement des paramètres, la substitution de commandes, ou l'expansion arithmétique. Le nom du paramètre ou du symbole à développer peut être encadré par des accolades, afin d'éviter que les caractères suivants ne soient considérés comme appartenant au nom de la variable.
Dans chacun des exemples suivants, le mot est soumis au développement du tilde, au remplacement des paramètres, à la substitution de commandes, et à l'évaluation arithmétique. Bash vérifie si un paramètre existe, et s'il n'est pas nul. L'omission du double point ne fournit qu'un test d'existence.
Substitution de commandesLa substitution de commandes permet de remplacer le nom d'une commande par son résultat. Il en existe deux formes :
ou `commande` Bash effectue la substitution en exécutant la commande et en la remplaçant par sa sortie standard, dont les derniers sauts de lignes sont supprimés. Quand l'ancienne forme de substitution -avec les backquotes `- est utilisée, le caractère backslash garde sa signification littérale, sauf s'il est suivi de $, `, ou \. Quand on utilise la forme $(commande), tous les caractères entre parenthèses gardent leurs valeurs littérales. Aucun n'est traité spécifiquement. Les substitutions de commandes peuvent être imbriquées. Avec l'ancienne forme, il faut protéger les backquotes internes avec un backslash. Si la substitution apparaît entre guillemets, le découpage des mots, et l'expansion des noms de fichiers ne sont pas effectués. évaluation ArithmétiqueL'évaluation arithmétique permet de remplacer une expression par le résultat de son évaluation. Il existe deux formats d'évaluation arithmétique :
L'expression est manipulée de la même manière que si elle se trouvait entre guillemets, mais un guillemet se trouvant entre les crochets ou les parenthèses n'est pas traité spécifiquement. Tous les mots de l'expression subissent le développement des paramètres, la substitution des commandes et la suppression des apostrophes et guillemets. Les évaluations arithmétiques peuvent être imbriquées. L'évaluation est effectuée en suivant les règles mentionnées dans le paragraphe CALCUL ARITHMéTIQUE (plus bas). Si l'expression est invalide, bash affiche un message indiquant l'erreur, et aucune substitution n'a lieu. Substitution de ProcessusLa substitution de processus n'est disponible que sur les systèmes acceptant le mécanisme des tubes nommés (FIFOs) ou la méthode /dev/fd de noms de fichiers ouverts. Elle prend la forme <(liste) ou >(liste). La liste de processus est exécutée avec ses entrées et sorties connectées à une FIFO ou à un fichier dans /dev/fd. Le nom de ce fichier est passé en argument à la commande qui sera exécutée comme résultat de cette substitution. Si l'on utilise la forme >(liste), l'écriture dans le fichier fournira des entrées pour la liste. Si la forme <(liste) est utilisée, le fichier passe en argument devra être lu pour obtenir la sortie de la liste. Sur les systèmes qui le permettent, la substitution de processus est effectuée simultanément au remplacement des paramètres et variables, a la substitution de commande, et à l'évaluation arithmétique. Séparation des motsLes résultats du remplacement des paramètres, de la substitution de commandes, et de l'évaluation arithmétique, qui ne se trouvent pas entre guillemets sont analysés par le shell afin d'appliquer le découpage des mots.
L'interpréteur considère chaque caractère du paramètre
IFS comme
un délimiteur, et redécoupe le résultat des transformations précédentes
en fonction de ceux-ci. Si la valeur du paramètre
IFS est exactement
``< espace >< tabulation >< retour-chariot >'' , Les arguments nuls explicites ("" ou '') sont conservés. Les arguments nuls implicites, résultant du développement des paramètres n'ayant pas de valeurs, sont éliminés. Notez que si aucun développement n'a lieu, le découpage des mots n'est pas effectué. Développement des noms de fichiersApres le découpage des mots, et si l'option -f n'est pas indiquée, bash recherche dans chaque mot les caractères *, ?, et [. Si l'un d'eux apparaît, le mot est considéré comme un motif, et remplacé par une liste, classée par ordre alphabétique, des noms de fichiers correspondant à ce motif. Si aucun nom de fichiers ne correspond, et si la variable allow_null_glob_expansion n'existe pas, le mot reste inchangé. Si la variable existe, et si aucune correspondance n'est trouvée, le mot est éliminé. Quand un motif est utilisé pour créer des chemins d'accès, le caractère ``.'' au début d'un nom, ou immédiatement à la suite d'un slash doit être explicitement mis en correspondance, à moins que la variable shell glob_dot_filenames n'existe. Dans tous les autres cas, le caractère ``.'' n'est pas traité spécifiquement. Le caractère slash doit toujours être mis en correspondance explicitement. Les caractères spéciaux ont les significations suivantes :
Suppression des protectionsAprès les développements précédents, toutes les occurences non-protégées des caractères \, `, et " sont supprimées. RedirectionAvant qu'une commande ne soit exécutée, il est possible de rediriger son entrée et sa sortie en utilisant une notation spéciale qui sera interprétée par le shell. Les redirections peuvent également servir à ouvrir ou fermer des fichiers dans l'environnement actuel du shell. Les opérateurs de redirection décrits ci-dessous peuvent apparaitre avant, ou au sein d'une commande simple ou suivre une commande. Les redirections sont traitées dans l'ordre d'apparition de gauche à droite.Dans les descriptions suivantes, si le numéro de descripteur de fichier est omis, et si le premier caractère de l'opérateur de redirection est <, celui-ci correspondra à l'entrée standard (descripteur de fichier 0). Si le premier caractère de l'opérateur est >, la redirection s'appliquera à la sortie standard (descripteur de fichier 1). Le mot qui suit l'operateur de redirection dans les descriptions suivantes est soumis à l'expansion des accolades, du tilde, des paramètres, à la substitution de commandes, à l'évaluation arithmétique, à la suppression des protections, et au développement des noms de fichiers. S'il se modifie pour donner plusieurs mots, bash détectera une erreur. Remarquez que l'ordre des redirections est important. Par exemple, la commande
redirige a la fois la sortie standard et la sortie d'erreur vers le fichier liste_répertoires, alors que la commande
ne redirige que la sortie standard vers le fichier liste_répertoires, car la sortie d'erreur a été renvoyée vers la sortie standard avant que celle-ci ne soit redirigée vers liste_répertoires. Redirection d'entréeLe format général des redirections d'entrée est le suivant :
Lorsque l'on applique une redirection d'entrée, le fichier dont le nom résulte du développement du mot sera ouvert en lecture avec le descripteur de fichier numéro n, ou en tant qu'entrée standard (descripteur de fichier 0) si n n'est pas mentionné. Redirection de sortieLe format général des redirections de sortie est le suivant :
Lors d'une redirection de sortie, le fichier dont le nom résulte du développement du mot est ouvert en écriture, avec le descripteur de fichier n, ou en tant que sortie standard (descripteur de fichier 1) si n n'est pas mentionné. Si le fichier n'existe pas, il est créé. S'il existait déjà, sa taille est ramenée à 0. Si l'opérateur de redirection est >|, alors la valeur de l'option -C de la commande interne set est ignorée, et une tentative de création de fichier a lieu. (Voir la description de noclobber dans le paragraphe Variables du Shell plus haut). Redirection pour Ajout en SortieLe format général pour la redirection de sortie avec ajout est :
Lorsqu'on redirige ainsi la sortie, le fichier dont le nom résulte du développement du mot est ouvert pour ajout en fin de fichier, avec le descripteur n, ou en tant que sortie standard (descripteur 1) si n n'est pas mentionné. Si le fichier n'existe pas, il est créé.
Redirection de la sortie standard et de la sortie d'erreur.Bash permet la redirection simultanée de la sortie standard (descripteur 1) et de la sortie d'erreur (descripteur 2), dans un fichier dont le nom est le résultat du développement du mot. Il y a deux formes pour effectuer cette double redirection : et >&mot On préfère généralement la première. Elle est sémantiquement équivalente à
Document en ligneAvec ce type de redirection, le shell va lire son entrée standard jusqu'à ce qu'il atteigne une ligne contenant uniquement le mot prévu (sans espaces à la suite), nommée étiquette. Une fois cette étiquette atteinte, il exécutera la commande demandée en lui fournissant en entrée le texte lu avant l'étiquette, que l'on appelle document en ligne. Le format des documents en ligne est le suivant :
Il n'y a ni remplacement de paramètre, ni substitution de commande, ni développement de chemin d'acces, ni évaluation arithmétique sur le mot. Si l'un des caractères du mot est protégé, l'étiquette est obtenue après suppression des protections dans le mot, et les lignes du document ne sont pas développées. Sinon, toutes les lignes du document sont soumises au remplacement des paramètres, à la substitution de commandes, et à l'évaluation arithmétique. Dans ce dernier cas, les couples \<retour-chariot> sont ignorés, et \ doit être utilisé pour protéger les caractères \, $, et `. Si l'opérateur de redirection est <<-, alors les tabulations en tête de chaque ligne sont supprimées, y compris dans la ligne contenant l'étiquette. Ceci permet d'indenter de manière naturelle les documents en ligne au sein des scripts. Dédoublement de descripteur de fichierL'opérateur de redirection
permet de dupliquer les descripteurs de fichiers en entrée. Si le mot se transforme en un ou plusieurs chiffres, le descripteur de fichier n devient une copie de ce descripteur. Si le mot prend la forme -, le descripteur n est fermé. Si n n'est pas mentionné, on utilise l'entrée standard (descripteur 0). L'opérateur
est utilisé de manière similaire pour dupliquer les descripteurs de sortie. Si n n'est pas précisé, on considère la sortie standard (descripteur 1). Un cas particulier se produit si n est omis, et si mot ne se développe pas sous forme de chiffres. Alors, les sorties standard et d'erreurs sont toutes deux redirigées comme précédement. Ouverture en Lecture/écriture d'un descripteur de fichierL'opérateur de redirection
ouvre à la fois en lecture et en écriture le fichier dont le nom résulte du développement du mot, et lui affecte le descripteur de fichier n, ou bien les entrée et sortie standard si n n'est pas mentionné. Si le fichier n'existe pas, il est créé. FonctionsUne fonction du shell mémorise une série de commandes pour permettre une exécution ulterieure. La definition d'une fonction est décrite plus haut, dans le paragraphe GRAMMAIRE DU SHELL. Les fonctions sont exécutées dans le contexte de l'interpréteur en cours. On ne crée pas de nouveau processus pour interpréter une fonction, contrairement à l'exécution d'un script. Les arguments d'une fonction sont placés dans les paramètres positionnels durant son exécution. Le paramètre spécial # est mis a jour. Le paramètre positionnel 0 n'est pas modifié.La variables locales d'une fonction peuvent être déclarées en utilisant la commande interne local. Autrement, les variables et leurs valeurs sont partagées entre la fonction et son appelant. Si la commande interne return est exécutée dans une fonction, celle-ci se termine et l'exécution reprend avec la commande suivant l'appel de fonction. Quand une fonction se termine, les paramètres positionnels et le paramètre spécial # reprennent les valeurs qu'ils avaient avant l'appel de fonction. Les noms des fonctions et leurs définitions peuvent être affichés en utilisant l'option -f des commandes internes declare ou typeset. Les fonctions peuvent être exportées avec l'option -f de la commande interne export, afin de rester définies dans les sous-shells. Les fonctions peuvent être récursives. Aucune limite n'est imposée quant au nombre d'appels récursifs. AliasL'interpréteur gère une liste d'alias qui peuvent être créés et détruits avec les commandes internes alias et unalias (voir le paragraphe COMMANDES INTERNES DU SHELL plus bas). Le shell vérifie si le premier mot de chaque commande (à condition qu'il ne soit pas protégé) est un alias. Si tel est le cas, ce mot est remplacé par le texte de l'alias. Le nom de l'alias, ainsi que le texte de remplacement, peuvent contenir n'importe quels caractères valides pour le shell, y compris les méta-caractères présentés plus haut. Une exception toutefois, le nom de l'alias ne peut pas contenir de caractère =. Le shell vérifie si le premier mot du texte de remplacement est à son tour le nom d'un alias, mais s'il est identique au nom de l'alias il ne sera pas remplacé à nouveau. Ceci permet par exemple de créér un alias pour ls valant ls -F, que bash n'essaiera pas de développer récursivement. Si le dernier caractère du texte de remplacement est un blanc, alors on vérifiera également si le mot suivant l'alias est lui aussi un alias.Les alias sont créés et affichés avec la commande alias, et supprimés avec la commande unalias. Il n'existe pas de mécanisme permettant d'utiliser des arguments dans le texte de remplacement, contrairement à l'interpreteur csh. Si l'on a besoin de traiter des arguments, il faut utiliser une fonction du shell. Les alias ne sont développés qu'avec les shells interactifs. Les règles concernant la définition et l'utilisation des alias sont un peu confuses. Bash lit toujours au moins une ligne d'entrée complètement avant d'exécuter une commande de cette ligne. Les alias sont traités lorsque la commande est lue, et non pas lorsqu'elle est exécutée. Ainsi, une définition d'alias apparaissant sur la même ligne qu'une autre commande ne prend pas effet avant la lecture de la prochaine ligne d'entrée. Autrement dit, une commande placée à la suite d'une définition d'alias, sur la même ligne ne sera pas affectée par cet alias. Ce comportement est également important lors de l'exécution des fonctions. Les alias sont traités lorsque la définition de la fonction est lue, et non pas lors de l'exécution de cette fonction. Ainsi des alias définis dans une fonction ne sont pas actifs avant la fin de l'exécution de la fonction. Pour plus de tranquilité, placez toujours les définitions d'alias sur des lignes isolées, et n'utilisez jamais la commande alias dans les commandes composées. Notez enfin que la plupart du temps les alias sont avantageusement remplacés par des fonctions du shell. ContrÔle Des JobsLe contrôle des jobs permet d'arrêter (suspend) sélectivement l'exécution d'un processus, et de la reprendre (resume) ultérieurement. L'utilisateur bénéficie généralement de cette possibilité grâce à l'action conjointe du pilote de terminal et de bash.L'interpréteur associe un job à chaque tube. Il maintient une table des jobs en cours d'exécution, cette table pouvant être affichée avec la commande jobs. Quand bash lance un job de manière asynchrone (en arrière-plan), il affiche une ligne du genre :
Cette ligne indique que le job est associé au numéro 1, et que le PID du dernier processus dans le tube est 25647. Tous les processus dans un tube simple font partie du même job. Bash utilise la notion de job comme une abstraction pour aider à les contrôler. Pour faciliter l'implémentation d'une interface utilisateur pour le contrôle de job, le système introduit la notion d'ID de groupe de processus associés à un terminal. Les membre de ce groupe de processus (ceux dont le GID est égal au Process Group ID du terminal) recoivent les signaux déclenchés par le clavier, comme SIGINT. Ces processus sont dits en avant-plan. Les processus en arrière-plan sont ceux dont le Process-GID differe de celui du terminal, ceux qui ne reçoivent pas les signaux déclenchés par le clavier. Seuls les processus en avant-plan peuvent lire depuis le terminal ou écrire dessus. Les processus en arrière-plan qui tentent une lecture sur le terminal (ou une écriture dessus), reçoivent les signaux SIGTTIN (SIGTTOU) émis par le pilote de péripherique du terminal, lesquels signaux suspendent l'exécution du processus (sauf interception du signal). Si le système d'exploitation sur lequel bash fonctionne permet le contrôle des jobs, bash vous y donne accès. La frappe d'un caractère suspension (généralement ^Z, Contrôle-Z) pendant l'exécution d'un processus arrête celui-ci, et redonne la main à bash. La frappe d'un caractère suspension différée (généralement ^Y, Contrôle-Y) arrêtera le processus au moment où il tentera de lire depuis le terminal, et la main reviendra à bash. Il est possible de manipuler ces jobs en utilisant la commande bg (background = arrière-plan) pour continuer l'exécution en arrière-plan, fg (foreground) pour la reprendre en avant-plan, ou encore la commande kill pour tuer le processus. Un ^Z prend effet immédiatement, et élimine les sorties en attente. Il y a plusieurs manières de faire référence à un job. Le caractère % introduit un nom de job. Le job numéro n peut être noté %n. On peut également faire référence à un job en utilisant un préfixe du nom utilise pour le lancer, ou une partie de la ligne de commande. Par exemple, %ce se réfère à un job arrêté nomme ce. Si ce préfixe correspond à plusieurs jobs, bash renverra une erreur. D'autre part, %?ce, fait référence à n'importe quel job contenant la chaîne ce dans sa ligne de commande. Si la sous-chaîne correspond à plusieurs jobs, bash renverra une erreur. Les symboles %% et %+ référencent le job courant du shell, c'est à dire le dernier job arrêté alors qu'il se trouvait en avant-plan. Le job précédent peut être mentionné en utilisant %-. Dans les affichages se rapportant aux jobs (par exemple ceux de la commande jobs le job courant est toujours indiqué par un +, et le job précédent avec un -. Il suffit de nommer un job pour le ramener en avant-plan : %1 est synonyme de ``fg %1'', et ramène le job 1 depuis l'arrière-plan vers l'avant-plan. De même, ``%1 &'' relance le job 1, mais en arrière-plan cette fois, de manière équivalente à ``bg %1''. Le shell est immédiatement prévenu lorsqu'un job change d'état. Normalement bash attend d'être prêt à afficher son symbole d'accueil avant de fournir un rapport sur les changements dans les statut des jobs, afin de ne pas perturber les autres affichages. Avec l'option -b de la commande interne set, bash affichera les modifications immédiatement (Voir aussi la description de la variable notify dans le paragraphe Variables du Shell plus haut.) Si vous essayez de quitter bash alors que des jobs sont suspendus, le shell affichera un message d'avertissement. Vous pouvez alors utiliser la commande jobs pour vérifier leurs états. Une fois cette commande invoquée, ou si vous essayez à nouveau de quitter le shell immédiatement, il n'y aura plus d'avertissement, et les jobs suspendus seront définitivement terminés. SignauxQuand bash fonctionne de manière interactive, il ignore le signal SIGTERM (c'est pourquoi kill 0 ne tue pas un shell interactif), et le signal SIGINT est intercepté et géré (c'est pourquoi la commande interne wait n'est pas interruptible). Dans tous les cas, bash ignore le signal SIGQUIT. Si le contrôle de jobs est disponible, bash ignore les signaux SIGTTIN, SIGTTOU, et SIGTSTP.Les jobs synchrones lancés par bash reçoivent les valeurs des signaux héritées par le shell de leur parent. Quand le contrôle de job n'est pas actif, les jobs en arrière-plan (démarrés avec &) ignorent les signaux SIGINT et SIGQUIT. Les commandes exécutées en tant que résultat de la substitution de commandes ignorent les signaux de contrôle de jobs émis par le clavier SIGTTIN, SIGTTOU, et SIGTSTP. éxécution Des CommandesApres le découpage de la ligne de commande en mots, si le résultat est une commande simple suivie d'une éventuelle liste d'arguments, les actions suivantes sont effectuées.Si le nom de la commande ne contient pas de slash, le shell tente de la trouver. S'il existe une fonction shell de ce nom, elle est appelée comme nous l'avons vu dans le paragraphe FONCTIONS plus-haut. Si le nom n'est pas celui d'une fonction, l'interpréteur le recherche dans la liste des fonctions internes. Si une équivalence est trouvée, la fonction interne est invoquée. Si le nom n'est ni celui d'une fonction shell, ni celui d'une commande interne, et s'il ne contient pas de slash, bash va chercher dans chacun des membres de PATH un répertoire contenant un fichier exécutable du nom désiré. Si la recherche est infructueuse, l'interpréteur affiche un message d'erreur et renvoie un code de retour non nul. Si la recherche réussit, ou si le nom de la commande contient au moins un slash, le shell exécute le programme voulu. L'argument 0 est rempli avec le nom fourni, et les autres arguments seront éventuellement remplis avec le reste de la ligne de commande. Si l'exécution échoue parce que le programme n'est pas un exécutable, et si le fichier n'est pas un répertoire, on le considère alors comme un script shell, un fichier contenant une série de commandes. Un sous-shell est alors créé pour exécuter ce script. Ce sous-shell se réinitialisera lui-même, comme si un nouveau shell avait été invoqué pour exécuter le script, à la difference qu'il continuera à mémoriser l'emplacement des commandes connues de son parent (voir hash dans le paragraphe COMMANDES INTERNES DU SHELL plus bas). Si le programme est un fichier commençant par #!, le reste de la première ligne indique un interpréteur pour ce programme. Le shell se chargera d'exécuter cet interpréteur, si le système d'exploitation ne gère pas lui-même ce format d'exécutable. Les arguments de l'interpréteur consistent en un premier argument éventuel fourni sur la première ligne du fichier à la suite du nom de l'interpréteur, suivi du nom du programme, suivi des arguments de la commande s'il y en a. EnvironnementQuand un programme est invoqué, il reçoit un tableau de chaînes que l'on appelle environnement. Il s'agit d'une liste de paires nom-valeur, de la forme nom=valeur.Le shell permet de manipuler l'environnement de plusieurs façons. Au démarrage, le shell analyse son propre environnement, et crée un paramètre pour chaque nom trouvé, en le marquant comme exportable vers les processus fils. Les commandes exécutées héritent de cet environnement. Les commandes export et declare -x permettent d'ajouter ou de supprimer des paramètres ou des fonctions de l'environnement. Si la valeur d'un paramètre de l'environnement est modifiée, la nouvelle valeur devient une partie de l'environnement, et elle remplace l'ancienne. L'environnement hérité par les commandes exécutées est l'environnement initial du shell (dont les valeurs peuvent être modifiées), moins les éléments supprimés par la commande unset, plus les éléments ajoutés par les commandes export et declare -x. L'environnement d'une commande simple ou d'une fonction peut être augmenté temporairement en la faisant précéder d'une affectation de paramètre, comme nous l'avons vu plus haut dans le paragraphe PARAMÈTRES. Ces affectations ne concernent que l'environnement vu par cette commande ou fonction. Si l'option -k est utilisée (voir la commande interne set plus bas), alors toutes les affectations de paramètres sont placées dans l'environnement d'une commande exécutée, pas seulement celles qui précèdent son nom. Quand bash invoque une commande externe, la variable _ contient le chemin d'accès complet à cette commande, et elle est transmise dans l'environnement. Code De RetourAu niveau du shell, une commande qui se termine avec un code de retour nul est considérée comme réussie. Le zéro indique le succès. Un code de retour non-nul indique un echec. Quand une commande se termine à cause d'un signal fatal, bash utilise la valeur 128+signal comme code de retour.Si une commande n'est pas trouvée, le processus fils créé pour l'exécuter renvoie la valeur 127. Si la commande est trouvée mais pas exécutable, la valeur renvoyée est 126. Bash lui-même renvoie le code de retour de la dernière commande exécutée, à moins qu'une erreur de syntaxe ne se produise, auquel cas il renvoie une valeur non-nulle. Voir également la commande interne exit plus bas. Symbole D'accueil (prompt)Quand il est exécuté de manière interactive, bash affiche le symbole d'accueil principal PS1 dès qu'il est prêt à lire une commande, et le symbole d'accueil secondaire PS2 quand il a besoin de plus de données pour exécuter une commande. Bash permet de personnaliser ces chaînes d'accueil, en insérant des séquences d'échappement spéciales (préfixées par un backslash) ayant les significations suivantes :
Le numéro de commande, et le numéro d'historique sont généralement différents : le numéro d'historique d'une commande correspond à sa position dans la liste d'historique qui peut contenir des commandes relues depuis cette liste (voir le paragraphe HISTORIQUE plus bas), alors que le numéro de commande est simplement une position dans la séquence de commandes exécutées depuis le début de la session shell actuelle. Apres que la chaîne d'invite ait été décodée, elle est soumise à l'expansion des paramètres, substitution de commandes, évaluation arithmétique et découpage des mots. BibliothÈque ReadlineIl s'agit de la bibliothèque qui gère la saisie lors des sessions interactives du shell, à moins que l'option -nolineediting n'ait été choisie. Par défaut les commandes d'édition de ligne sont similaires à celles d'emacs. Il est également possible de disposer d'une interface d'édition du style vi.Dans ce paragraphe on utilisera la notation "à la emacs" pour indiquer les séquences de touches. Les touches Contrôle sont notées C-touche, par exemple C-n signifie Contrôle-N. De même, les touches Méta sont notées par M-touche, ainsi M-x signifie Méta-X. (Sur les claviers sans touches Méta, M-x signifie ESC x (sur les claviers français ESC est noté échappement), autrement dit presser la touche échappement puis la touche x. On dit alors qu'ESC est le préfixe méta. La séquence M-C-x signifie ESC-Contrôle-x, ou encore Presser la touche échappement puis maintenez la touche Contrôle enfoncée tout en pressant la touche x. L'affectation par défaut des touches peut être modifiée dans le fichier ~/.inputrc. La valeur de la variable shell INPUTRC, si elle existe, est utilisée à la place du fichier ~/.inputrc. D'autres programmes qui utilisent cette bibliothèque peuvent ajouter leurs propres affectations de touches. Par exemple, en plaçant ou C-Meta-u: universal-argumentdans le fichier ~/.inputrc, on affectera à la séquence de touche M-C-u la commande readline universal-argument. Les caractères symboliques suivants sont acceptés : RUBOUT, DEL, ESC, LFD, NEWLINE, RET, RETURN, SPC, SPACE, et TAB. En plus des noms de commandes, readline permet d'affecter aux touches des chaînes de caractères qui seront insérées lorsque la touche sera pressée (une macro). Readline peut être personnalisé en ajoutant des commandes dans le fichier d'initialisation dont le nom est contenu dans la variable INPUTRC, ou, s'il elle n'existe pas, dans le fichier ~/.inputrc. Quand un programme qui utilise la bibliothèque readline démarre, le fichier d'initialisation est lu, et les affectations de touches et de variables sont effectuées. Il n'y a que peu de constructions autorisées dans le fichier d'initialisation. Les lignes blanches sont ignorées. Les lignes commençant par # sont considérées comme des commentaires, les lignes commençant par un $ indique une construction conditionnelle. Les autres lignes contiennent les affectations de touches et les assignations de variables. La syntaxe des affectations de touches dans le fichier ~/.inputrc est simple. Les seules choses nécessaires sont le nom d'une commande, ou le texte d'une macro, et la séquence de touches à laquelle il faut l'affecter. Les touches peuvent être indiquées de deux manières : sous forme de nom symbolique, éventuellement précédé de Meta- ou Control-, ou sous forme de séquence de touches. Lorsque l'on utilise la forme touche:nom_de_fonction ou macro, touche est le nom de la séquence de touches épelée en Anglais. Par exemple :
Control-u: universal-argument Dans ces exemples, C-u est assigné à la fonction universal-argument, M-DEL à la fonction backward-kill-word, et C-o est affecté à la macro exprimée dans la partie gauche (c'est à dire insèrera >&sortie sur la ligne). Avec la seconde forme, "touches":nom_de_fonction ou macro, touches n'est plus un nom symbolique, mais décrit une séquence complète de touches entre guillemets. Certaines séquences d'échappement dans le style GNU Emacs peuvent être utilisée, comme dans l'exemple suivant :
"\C-u": universal-argument Dans cet exemple, C-u est à nouveau assigné à la fonction universal-argument, C-x C-r à la fonction re-read-init-file, et ESC [ 1 1 ~ insèrera le texte Touche Fonction 1. L'ensemble complet des séquences d'échappement est le suivant :
Lorsque l'on saisit le texte d'une macro, il faut utiliser des apostrophes ou des guillemets pour indiquer la définition de la macro. Les textes non protégés sont considérés comme des noms de fonctions. Le backslash protègera n'importe quel caractère dans la définition d'une macro, y compris " et '. Bash permet d'afficher ou de modifier les affectations des touches avec la commande interne bind. On peut changer de mode d'édition durant une session interactive en utilisant l'option -o de la commande interne set (voir le paragraphe COMMANDES INTERNES DU SHELL plus bas). Readline dispose de variables permettant de personnaliser encore plus son comportement. Une variable peut être configurée dans le fichier inputrc avec une déclaration de la forme
Sauf contre-indication, les variables de readline prennent les valeurs On ou Off. Les variables, et leurs valeurs par défaut, sont :
Readline propose un mécanisme inspiré des possibilités de compilation conditionnelle en C, qui permet d'effectuer certaines assignations de variables, ou affectations de touches en fonction du résultat d'un test. Il y a trois directives utilisables.
Les commandes de readline peuvent recevoir un argument numérique, généralement un nombre de répétitions. Parfois il arrive que le signe de cet argument soit significatif. En passant un argument négatif à une commande qui agit vers l'avant (par exemple kill-line), on inversera le sens d'action de cette commande. On détaillera les commandes dont les arguments ont un comportement particulier. Quand une commande est décrite comme destructive (killing), le texte effacé est sauvegardé pour une éventuelle récupération ulterieure (yanking). Le texte est sauvegardé dans des tampons circulaires(kill-ring). Les destructions successives accumulent les textes dans le même tampon qui peut être récupéré en une seule fois. Les commandes qui ne détruisent pas de texte permettent de séparer les différents tampons. Voici une liste des noms de commandes, ainsi que les séquences de touches auxquelles elles sont attribuées par défaut. Commandes de déplacement
Commandes de manipulation de l'historique
Commande d'édition de texte
Effacement et récuperation
Arguments numériques
Complétion
Macros Claviers
Divers
HistoriqueEn mode interactif, l'interpréteur donne accès à un historique des commandes, c'est à dire la liste des commandes précédemment utilisées. Le texte des HISTSIZE dernières commandes (par défaut 500) est mémorisé dans l'historique. Le shell les enregistre avant expansion des paramètres et variables (voir le paragraphe EXPANSION plus haut) mais après avoir effectué l'expansion historique, sous contrôle des variables command_oriented_history et HISTCONTROL. Au démarrage, l'historique est initialisé avec le fichier dont le nom est contenu dans la variable HISTFILE (par défaut ~/.bash_history). HISTFILE est tronqué si nécessaire, pour ne pas dépasser HISTFILESIZE lignes. La commande interne fc (voir le paragraphe COMMANDES INTERNES DU SHELL plus bas) permet d'afficher, d'éditer, ou de ré-exécuter une partie de l'historique. La commande interne history permet d'afficher l'historique et de manipuler le fichier d'historique. Quelque soit le mode d'édition en ligne de commande, des commandes de recherche sont disponibles pour accéder à l'historique. Lorsqu'un shell interactif se termine, les HISTSIZE dernières lignes de l'historique sont copiées dans le fichier HISTFILE. Si la variable HISTFILE n'existe pas, ou si le fichier n'est pas accessible en écriture, l'historique n'est pas enregistré.Expansion De L'historiqueLe shell propose des possibilités d'expansion de l'historique qui sont semblables à celles de csh. Ce paragraphe décrit la syntaxe de ces commandes. Elles sont utilisables par défaut dans les shells interactifs, il est toutefois possible de les désactiver en utilisant l'option +H de la commande interne set (voir le paragraphe COMMANDES INTERNES DU SHELL plus bas). Les shells non-interactifs n'effectuent pas d'expansion d'historique. Le développement de l'historique est fait immédiatement après la lecture d'une ligne complète, avant que le shell ne fasse la séparation des mots. Il se déroule en deux parties. La première consiste à déterminer la ligne de l'historique à utiliser pour les substitutions, la seconde permet de sélectionner les parties de la lignes à inclure dans la nouvelle ligne. La ligne sélectionnée dans l'historique est l'évènement, et les parties de cette ligne à réutiliser sont des mots. La ligne est découpée en mots de la même manière que lors d'une saisie, ainsi plusieurs mots séparés par des méta-caractères, et protégés par des guillemets sont considérés comme un unique mot. Seul le backslash (\) et les apostrophes permettent de protéger le caractère d'échappement de l'historique, par défaut !. Le shell offre le contrôle des divers caractères utilisés par le mécanisme d'expansion de l'historique (voir la description de histchars plus haut dans le paragraphe Variables du Shell). Indicateur d'évènementUn indicateur d'évènement est une référence à une ligne de commande dans la liste d'historique.
Indicateurs de motsUn : sépare l'indicateur d'évènements de l'indicateur de mot. On peut l'omettre si l'indicateur de mot commence par ^, $, *, ou %. Les mots sont numérotés depuis le début de la ligne, le premier étant note 0 (zéro).
ModificateursAprès l'éventuel indicateur de mot, vous pouvez ajouter une séquence de modificateurs, chacun précédé par un `:'.
|