BASH(1) General Commands Manual BASH(1) NOM bash - Interpréteur de commandes GNU Bourne-Again SHell SYNOPSIS bash [options] [chaîne_de_commande | fichier] COPYRIGHT Bash is Copyright (C) 1989-2022 by the Free Software Foundation, Inc. DESCRIPTION Bash est un interpréteur de commandes (shell) compatible sh qui exécute les commandes lues depuis l'entrée standard ou depuis un fichier. Bash inclut aussi des fonctionnalités utiles des interpréteurs de commandes Korn et C (ksh et csh). Bash vise à être une implémentation conforme à la partie relative aux interpréteurs de commandes et utilitaires des spécifications IEEE POSIX (norme IEEE 1003.1). Bash peut être configuré pour être conforme à la norme POSIX par défaut. OPTIONS Toutes les options d'interpréteur monocaractères documentées dans la description de la commande interne set, y compris -o, peuvent être uti- lisées comme options si l'interpréteur est invoqué. De plus, bash ac- cepte les options suivantes lors de son appel : -c Si l'option -c est présente, les commandes sont lues depuis le premier argument chaîne_de_commande qui n’est pas une op- tion. Si des arguments suivent la chaîne_de_commande, le pre- mier argument est assigné à $0 et tous les autres sont affec- tés aux paramètres positionnels. Le nom de l'interpréteur, utilisé pour les messages d'avertissement et d'erreur, est fixé par l'assignation à $0. -i Si l'option -i est présente, l'interpréteur est interactif. -l Faire que bash se comporte comme s'il avait été appelé comme interpréteur de commandes de connexion (consultez APPEL ci-dessous). -r Si l'option -r est présente, l'interpréteur devient restreint (consultez INTERPRÉTEUR RESTREINT ci-dessous). -s Si l'option -s est présente ou s'il ne reste plus d'argument après le traitement des options, alors les commandes sont lues depuis l'entrée standard. Cette option permet d'affecter les paramètres positionnels lors de l'appel d'un interpréteur interactif ou de la lecture de l'entrée à travers un tube. -v Afficher les lignes en entrée de l'interpréteur lorsqu'elles sont lues. -x Afficher les commandes et leurs arguments à mesure qu'elles sont exécutées. -D Une liste de toutes les chaînes entre guillemets doubles pré- cédées de $ est affichée sur la sortie standard. Ce sont les chaînes qui sont soumises à une traduction quand le paramètre linguistique régional n'est ni C ni POSIX. Cela implique l'option -n ; aucune commande ne sera exécutée. [-+]O [option_shopt] option_shopt est une des options de l'interpréteur acceptées par la commande interne shopt (consultez COMMANDES INTERNES DE L'INTERPRÉTEUR ci-dessous). Si option_shopt est présente, -O crée cette option ; +O la détruit. Si option_shopt n'est pas fournie, les noms et valeurs des options de l'interpré- teur acceptées par shopt sont affichés sur la sortie stan- dard. Si l'option d'appel est +O, la sortie est affichée dans un format réutilisable en entrée. -- Deux caractères -- indiquent la fin des options et désac- tivent le traitement des arguments. Tous les arguments après le -- sont traités comme des noms de fichiers et paramètres. - est équivalent à --. Bash reconnaît également plusieurs options multicaractères. Ces options doivent, pour être reconnues, apparaître sur la ligne de commande avant les options monocaractères. --debugger Prend les dispositions pour que le paramétrage du traçage soit exécuté avant que l'interpréteur démarre. Enclenche le mode de traçage étendu (consultez ci-dessous la description de l'option extdebug de la commande interne shopt). --dump-po-strings Équivalent à -D, mais la sortie est dans le format des fichiers po (objets portables) de l'outil GNU gettext. --dump-strings Équivalent à -D. --help Affiche un message d'aide sur la sortie standard et termine avec succès. --init-file fichier --rcfile fichier Exécuter les commandes contenues dans fichier plutôt que celles du fichier d'initialisation commun à tout le système /etc/bash.bashrc et que le fichier d'initialisation personnel standard ~/.bashrc si l'interpréteur est interactif (consultez APPEL ci-dessous). --login Équivalent à -l. --noediting Ne pas utiliser la bibliothèque GNU readline pour lire les lignes de commande, lorsque l'interpréteur est interactif. --noprofile Ne lire ni le fichier d'initialisation commun à tout le système /etc/profile ni les fichiers personnels d'initialisation ~/.bash_profile, ~/.bash_login ou ~/.profile. Par défaut, bash lit ces fichiers lorsqu'il est appelé comme interpréteur de com- mandes de connexion (consultez APPEL ci-dessous). --norc Ne pas lire ou exécuter le fichier de configuration commun à tout le système /etc/bash.bashrc, ni le fichier personnel d'ini- tialisation ~/.bashrc lorsque l'interpréteur est interactif. Cette option est activée par défaut si l'interpréteur est appelé sous le nom sh. --posix Aligner le comportement de bash sur la norme (mode POSIX), en ce qui concerne les options dont l'action par défaut diffère de la norme POSIX. La section VOIR AUSSI ci-dessous référence un docu- ment précisant la façon dont le mode POSIX affecte le comporte- ment de bash. --restricted L'interpréteur devient restreint (consultez INTERPRÉTEUR RES- TREINT ci-dessous). --verbose Équivalent à -v. --version Affiche le numéro de version de bash sur la sortie standard et termine avec succès. ARGUMENTS S'il reste des arguments sur la ligne de commande après traitement des options et que ni l'option -c, ni l'option -s n'ont été fournies, le premier argument est supposé être le nom du fichier dans lequel lire les commandes d'interpréteur. Si bash est appelé de cette façon, le nom du fichier est affecté à $0 et les arguments restants aux autres pa- ramètres positionnels. Bash lit et exécute les commandes depuis ce fi- chier, puis termine. L'état final de bash est l'état final de la der- nière commande exécutée dans le script. Si aucune commande n'a été exé- cutée, l'état final est 0. Une tentative est d'abord faite de trouver le fichier dans le répertoire actuel et, si aucun fichier n'est trouvé, l'interpréteur cherche le script dans les répertoires contenus dans PATH. APPEL Un interpréteur de commandes est dit de connexion (login shell) si le premier caractère de son argument numéro zéro est un - ou s'il est ap- pelé avec l'option --login. Un interpréteur est interactif s'il est appelé sans argument autre que des options (à moins que l'option -s soit spécifiée) et sans l'option -c, dont l'entrée standard et la sortie d'erreur sont toutes deux connectées à des terminaux (comme déterminé par la fonction isatty(3)), ou s'il est appelé avec l'option -i. PS1 est créée et $- contient la lettre i si bash est interactif, ce qui permet à un script ou à un fi- chier d’initialisation de tester cet état. Le paragraphe suivant décrit comment bash exécute ses fichiers d'ini- tialisation. Si un de ces fichiers existe mais n'est pas accessible en lecture, bash signale une erreur. Les tildes sont remplacés par des noms de fichiers comme décrit ci-dessous dans Développement du tilde dans le paragraphe DÉVELOPPEMENTS. Lorsque bash est lancé comme interpréteur de commandes de connexion in- teractif ou comme interpréteur non interactif avec l'option --login, il lit et exécute tout d'abord les commandes se trouvant dans le fichier /etc/profile si ce fichier existe. Après lecture de ce fichier, il re- cherche ~/.bash_profile, ~/.bash_login et ~/.profile, dans cet ordre, puis lit et exécute les commandes se trouvant dans le premier fichier existant et accessible en lecture. L'option --noprofile peut être uti- lisée à l'appel de l'interpréteur pour empêcher ce comportement. Lorsqu'un interpréteur de commandes de connexion interactif termine, ou qu'un interpréteur de commandes de connexion non interactif exécute la commande interne exit, bash lit et exécute les commandes du fichier ~/.bash_logout, s'il existe. Quand un interpréteur interactif démarre sans être un interpréteur de commandes de connexion, bash lit et exécute les commandes se trouvant dans /etc/bash.bashrc et ~/.bashrc s'ils existent. Ce comportement peut être empêché à l'aide de l'option --norc. L'option --rcfile fichier forcera bash à lire et exécuter les commandes dans fichier plutôt que dans /etc/bash.bashrc et ~/.bashrc. Quand bash est démarré de façon non interactive, par exemple pour lan- cer un script, il consulte la variable BASH_ENV dans l'environnement, développe son contenu si elle existe et considère cette valeur comme le nom d'un fichier à lire et exécuter. Bash se comporte comme si la com- mande suivante était exécutée : if [ -n "$BASH_ENV" ]; then . "$BASH_ENV"; fi mais la valeur de la variable PATH n'est pas utilisée pour rechercher le fichier. Si bash est appelé sous le nom sh, il essaye d'imiter le comportement de démarrage des versions historiques de sh aussi fidèlement que pos- sible, tout en restant conforme à la norme POSIX. Lorsqu'il est appelé comme interpréteur de commandes de connexion interactif ou non interac- tif avec l'option --login, il essaye d'abord de lire et exécuter, dans cet ordre, les commandes de /etc/profile puis de ~/.profile. L'option --noprofile peut être utilisée pour empêcher ce comportement. Quand il est appelé en tant qu'interpréteur interactif sous le nom sh, bash consulte la variable ENV, développe sa valeur si elle est définie et utilise le résultat en tant que nom de fichier à lire et exécuter. Comme un interpréteur appelé sous le nom sh n'essaye ni de lire, ni d'exécuter des commandes d'un autre fichier de démarrage, l'option --rcfile n'a aucun effet. Un interpréteur non interactif appelé sous le nom sh n'essaie de lire aucun autre fichier d'initialisation. Quand il est appelé sous le nom sh, bash entre en mode POSIX après avoir lu les fichiers d'initialisation. Quand bash est appelé en mode POSIX comme avec l'option --posix sur la ligne de commande, il suit la norme POSIX pour les fichiers de démar- rage. Dans ce mode, les interpréteurs interactifs développent la va- riable ENV et les commandes sont lues et exécutées à partir du fichier dont le nom est la valeur développée. Aucun autre fichier d'initialisa- tion n'est lu. Bash tente de déterminer s'il est exécuté avec son entrée standard re- liée à une connexion réseau, comme quand il est exécuté par le démon lançant les interpréteurs de commandes à distance historiques, généra- lement rshd, ou le démon d'interpréteur sécurisé sshd. Si bash conclut qu'il est exécuté de façon non interactive de cette manière, il lit et exécute les commandes de /etc/bash.bashrc et ~/.bashrc si ces fichiers existent et sont accessibles en lecture. Il n'a pas ce comportement lorsqu'il est appelé sous le nom sh. L'option --norc peut être utilisée pour empêcher ce comportement et l'option --rcfile peut être utilisée pour forcer la lecture d'un autre fichier, mais rshd et sshd n'ap- pellent généralement pas l'interpréteur avec ces options et ne per- mettent pas de les indiquer. Si l'interpréteur est lancé avec un identifiant (de groupe) d'utilisa- teur effectif différent de l'identifiant (de groupe) d'utilisateur réel et si l'option -p n'est pas fournie, aucun fichier d'initialisation n'est lu, les fonctions de l'interpréteur ne sont pas importées depuis l'environnement, les variables SHELLOPTS, BASHOPTS, CDPATH, et GLOBI- GNORE, si présentes dans l'environnement, sont ignorées, et l'identi- fiant de l'utilisateur effectif est configuré à celui de l'utilisateur réel. Si l'option -p est fournie à l'appel, le comportement au démar- rage est le même mais l'identifiant d'utilisateur effectif n'est pas modifié. DÉFINITIONS Les définitions suivantes sont utilisées dans toute la suite ce docu- ment. blanc Une espace ou une tabulation. mot Une suite de caractères considérée comme une unité élémentaire par l'interpréteur. On parle également de lexème (« token »). nom Un mot ne contenant que des caractères alphanumériques et des tirets bas (« underscore »), commençant par une lettre ou un ti- ret bas. On s'y réfère également sous le terme identificateur. métacaractère Un caractère qui, non protégé, sépare les mots. Un de ceux-ci : | & ; ( ) < > space tab newline opérateur de contrôle Un lexème ayant une fonction de contrôle. C'est l'un des sym- boles suivants : || & && ; ;; ;& ;;& ( ) | |& <newline> MOTS RÉSERVÉS Les mots réservés sont des mots qui ont une signification spéciale pour l'interpréteur. Les mots suivants sont reconnus comme réservés lorsqu'ils ne sont pas protégés et sont soit le premier mot d'une com- mande (consultez GRAMMAIRE DE L'INTERPRÉTEUR ci-dessous), le troisième mot d'une commande case ou select (seul in est valable), ou le troi- sième mot d'une commande for (seuls in et do sont valables) : ! case coproc do done elif else esac fi for function if in select then until while { } time [[ ]] GRAMMAIRE DE L'INTERPRÉTEUR Cette partie décrit la syntaxe des différentes formes de commande de l'interpréteur. Commandes simples Une commande simple est une suite d'affectations facultatives de va- riables, suivie de mots séparés par des blancs et de redirections, et terminée par un opérateur de contrôle. Le premier mot indique la com- mande à exécuter et est passé comme argument zéro. Les mots restants sont transmis comme arguments à la commande appelée. La valeur renvoyée par une commande simple est son état final ou 128+n si la commande a été terminée par le signal n. Pipelines Un pipeline est une suite d'une ou plusieurs commandes séparées par un des opérateurs de contrôle | ou |&. Le format d'un pipeline est : [time [-p]] [!] commande_1 [ [|⎪|&] commande_2 ... ] La sortie standard de la commande_1 est connectée par un tube à l'en- trée standard de la commande_2. Cette connexion est effectuée avant toute redirection indiquée par la commande_1 (consultez REDIRECTIONS ci-dessous). Si |& est utilisé, la sortie d'erreur standard de la com- mande_1, en plus de sa sortie standard, est connectée à l'entrée stan- dard de la commande_2 dans le tube ; c'est un raccourci pour 2>&1 |. Cette redirection implicite de la sortie d'erreur standard vers la sor- tie standard est réalisée après toute redirection précisée par la com- mande_1. L'état renvoyé par un pipeline est l'état final de la dernière com- mande, à moins que l'option pipefail soit activée. Si pipefail est ac- tivée, l'état renvoyé par le pipeline est la valeur de la dernière com- mande (la plus à droite) à terminer avec un état différent de zéro ou zéro si toutes les commandes se terminent avec succès. Si le mot ré- servé ! précède un pipeline, l'état final de ce pipeline sera la néga- tion logique de l'état final tel que décrit ci-dessus. L'interpréteur attend que toutes les commandes du pipeline soient terminées avant de renvoyer une valeur. Si le mot réservé time précède un pipeline, les temps passés par le programme en modes utilisateur et système sont indiqués quand le pipe- line se termine. L'option -p modifie le format de sortie pour celui in- diqué par POSIX. Quand l'interpréteur est en mode POSIX, il ne recon- naît pas time comme un mot réservé si le lexème suivant commence par un « - ». La variable TIMEFORMAT peut contenir une chaîne de format indi- quant comment les informations de chronométrage doivent être affi- chées ; consultez ci-dessous la description de TIMEFORMAT dans Va- riables de l'interpréteur. Quand l'interpréteur est en mode POSIX, time peut être suivi d'un chan- gement de ligne. Dans ce cas, l'interpréteur affiche le temps utilisa- teur et système total consommé par l'interpréteur et ses enfants. La variable TIMEFORMAT peut être utilisée pour indiquer le format des in- formations de temps. Toute commande dans un pipeline multicommande, où les tubes sont créés, est exécutée dans un sous-interpréteur qui est un processus séparé. Consultez ENVIRONNEMENT D'EXÉCUTION DES COMMANDES pour une description des sous-interpréteurs et d'un environnement de sous-interpréteur. Si l'option lastpipe est activée en utilisant la commande interne shopt (consultez la description de shopt ci-dessous), le dernier élément d'un pipeline peut être exécuté par le processus de l'interpréteur quand le contrôle des tâches est désactivé. Listes Une liste est une suite d'un ou plusieurs pipelines séparés par l'un des opérateurs ;, &, && ou || et facultativement terminée par ;, & ou <changement de ligne>. Dans cette liste d'opérateurs, && et || ont une priorité identique, suivis par ; et &, qui ont également une priorité identique. Une suite d'un ou plusieurs changements de ligne peut apparaître dans une liste à la place d'un point-virgule pour délimiter les commandes. 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-interpréteur. L'interpré- teur n'attend pas que la commande se termine et l'état renvoyé est 0. Elles sont désignées comme des commandes asynchrones. Les commandes sé- parées par un ; sont exécutées successivement, l'interpréteur attend que chaque commande se termine tour à tour. L'état renvoyé est l'état final de la dernière commande exécutée. Les listes ET et OU sont des suites d'un ou plusieurs pipelines séparés respectivement par les opérateurs de contrôle && et ||. Les listes ET et OU sont exécutées avec associativité à gauche. Une liste ET est de la forme commande_1 && commande_2 commande_2 est exécutée si, et seulement si, commande_1 renvoie zéro comme état final (succès). Une liste OU a la forme commande_1 || commande_2 commande_2 est exécutée si, et seulement si, commande_1 renvoie un état final différent de zéro. L'état renvoyé par des listes ET et OU est l'état final de la dernière commande exécutée dans la liste. Commandes composées Une commande composée est l'une des constructions suivantes. Dans la plupart des cas, une liste dans une description de commande pourrait être séparée du reste de la commande par un ou plusieurs changements de ligne, et pourrait être suivie d’un changement de ligne à la place d’un point-virgule. (liste) liste est exécutée dans un sous-interpréteur (consultez ENVIRON- NEMENT D'EXÉCUTION DES COMMANDES ci-dessous pour une description d'un environnement de sous-interpréteur). Les affectations de variables et les commandes internes qui affectent l'environne- ment de l'interpréteur n'ont pas d'effet une fois que la com- mande se termine. L'état renvoyé est l'état final de la liste. { liste; } liste est simplement exécutée avec l'environnement de l'inter- préteur en cours. liste doit se terminer par un changement de ligne ou un point-virgule. Cette construction est connue sous le nom de commandes groupées. L'état renvoyé est l'état final de la liste. Remarquez que contrairement aux métacaractères ( et ), { et } sont des mots réservés qui ne doivent apparaître que là où un mot réservé peut être reconnu. Puisqu'ils ne conduiront pas à un découpage en mots, ils doivent être séparés de la liste par un blanc ou un autre métacaractère de l'interpréteur. ((expression)) L'expression est évaluée selon les règles décrites ci-dessous dans ÉVALUATION ARITHMÉTIQUE. Si la valeur arithmétique de l'ex- pression est différente de zéro, l'état renvoyé est 0 ; sinon l'état renvoyé est 1. L'expression est sujette aux mêmes déve- loppements que si elle était entre guillemets doubles, mais les caractères guillemet double dans l'expression ne sont pas trai- tés expressément et sont supprimés. [[ expression ]] Renvoie un état de 0 ou 1 selon l'évaluation de la condition ex- pression. Les conditions sont composées de primitives décrites ci-dessous dans CONDITIONS. Les mots entre [[ et ]] ne sont su- jets ni au découpage en mots ni au développement des chemins. L'interpréteur effectue le développement des tildes, des pa- ramètres, des variables, le développement arithmétique, la sub- stitution de commande et de processus, ainsi que la suppression des protections sur ces mots (les développements qui se produi- raient si les mots étaient entre guillemets doubles). Les opéra- teurs conditionnels comme -f ne doivent pas être protégés afin d'être reconnus comme primitives. Lorsqu'ils sont utilisés avec [[, les opérateurs < et > or- donnent d'un point de vue lexicographique en utilisant les pa- ramètres linguistiques régionaux actuels. Consultez la description de la commande interne test (consultez COM- MANDES INTERNES DE L'INTERPRÉTEUR ci-dessous) pour la gestion des pa- ramètres (c'est-à-dire des paramètres manquants). Quand les opérateurs == et != sont utilisés, la chaîne placée à droite de l'opérateur est considérée comme étant un motif dont la correspon- dance est recherchée selon les règles décrites ci-dessous dans Motifs génériques, comme si l’option extglob de l’interpréteur était activée. L’opérateur = est équivalent à ==. Si l'option d'interpréteur nocase- match est activée, la mise en correspondance est effectuée sans tenir compte de la casse (différence majuscule/minuscule) des caractères al- phabétiques. La valeur renvoyée est 0 si les chaînes correspondent (==) ou ne correspondent pas (!=), au motif et 1 sinon. Toute partie du mo- tif peut être protégée pour forcer la partie protégée à correspondre en tant que chaîne. Un opérateur binaire supplémentaire, =~, est disponible, avec la même priorité que == et !=. Lorsqu'il est utilisé, la chaîne à droite de l'opérateur est considérée comme une expression rationnelle étendue PO- SIX et est mise en correspondance en conséquence (en utilisant habi- tuellement les interfaces POSIX regcomp et regexec comme avec re- gex(3)). La valeur renvoyée est 0 si la chaîne correspond au motif et 1 si elle ne correspond pas. Si l'expression rationnelle n'est pas syn- taxiquement correcte, la valeur renvoyée de l'expression conditionnelle est 2. Si l'option d'interpréteur nocasematch est activée, la mise en correspondance est effectuée sans tenir compte de la casse. Si une par- tie du motif est protégée, cette partie est mise en correspondance lit- téralement. Cela signifie que tout caractère dans la partie protégée doit correspondre lui-même, plutôt que d'avoir tout motif particulier correspondant ayant une signification. Si le motif est stocké dans une variable de l’interpréteur, la protection de développement de variable force le motif entier à correspondre littéralement. Traitez prudemment les expressions entre crochets des expressions rationnelles, car les caractères de protection et de motifs habituels perdent leur significa- tion entre crochets. Le motif correspondra s'il correspond à n'importe quelle partie de la chaîne. Ancrer le motif avec les opérateurs d'expression rationnelle ^ et $ pour le forcer à correspondre à la totalité de la chaîne. La va- riable tableau BASH_REMATCH enregistre quelle partie de la chaîne cor- respond au motif. L'élément de BASH_REMATCH d'indice 0 contient la par- tie de la chaîne correspondant à la totalité de l'expression ration- nelle. Les sous-chaînes correspondant aux sous-expressions entre paren- thèses dans l'expression rationnelle sont sauvegardées avec les indices restants de BASH_REMATCH. L'élément de BASH_REMATCH d'indice n est la partie de la chaîne correspondant à la n-ième sous-expression entre pa- renthèses. La configuration de BASH_REMATCH par bash est de portée glo- bale ; la déclarer comme une variable locale mènera à des résultats in- attendus. Les expressions peuvent être combinées en utilisant les opérateurs sui- vants, décrits par ordre de priorité décroissante : ( expression ) Renvoie la valeur de l'expression. Cela peut être utilisé pour surpasser la priorité normale des opérateurs. ! expression Vrai si expression est fausse. expression1 && expression2 Vrai si expression1 et expression2 sont toutes les deux vraies. expression1 || expression2 Vrai si expression1 ou expression2 est vraie. Les opérateurs && et || n'évaluent pas expression2 si la valeur de expression1 suffit à déterminer la valeur renvoyée par la condition tout entière. for nom [ [ in [ mot ... ] ] ; ] do liste ; done La liste de mots suivant in est développée, produisant une liste d'éléments. La variable nom prend tour à tour la valeur de cha- cun des éléments et liste est exécutée à chaque fois. Si in mot est omis, la commande for exécute la liste une fois pour chacun des paramètres positionnels existants (consultez PARAMÈTRES ci-dessous). L'état renvoyé est l'état final de la dernière com- mande exécutée. Si le développement des éléments suivant in conduit à une liste vide, aucune commande n'est exécutée et l'état renvoyé est 0. for (( expr1 ; expr2 ; expr3 )) ; do liste ; done L'expression arithmétique expr1 est d'abord évaluée selon les règles décrites ci-dessous sous ÉVALUATION ARITHMÉTIQUE. L'ex- pression arithmétique expr2 est ensuite évaluée répétitivement jusqu'à valoir zéro. Chaque fois que expr2 est évaluée en une valeur différente de zéro, liste est exécutée et l'expression arithmétique expr3 est évaluée. Si l'une des expressions est omise, elle est considérée comme s'évaluant à 1. La valeur ren- voyée est l'état final de la dernière commande dans liste qui est exécutée ou faux si l'une des expressions est incorrecte. select nom [ in mot ] ; do liste ; done La liste de mots à la suite de in est développée, produisant une liste d'éléments et l'ensemble des mots développés est imprimé sur la sortie d'erreur standard, chacun précédé par un nombre. Si in mot est omis, les paramètres positionnels sont imprimés (consultez PARAMÈTRES ci-dessous). select affiche alors l'invite PS3 et lit une ligne depuis l'entrée standard. Si la ligne est constituée d'un nombre correspondant à l'un des mots affichés, alors ce mot est affecté à la valeur de la variable nom. Si la ligne est vide, les mots et l'invite sont affichés à nouveau. Si une fin de fichier (EOF) est lue, la commande select se termine et renvoie 1. Toute autre valeur lue force la variable nom à être définie à NULL. La ligne lue est conservée dans la variable REPLY. La liste est exécutée après chaque sélection, jusqu'à ce qu'une commande break soit atteinte. L'état final de select est l'état final de la dernière commande exécutée dans la liste ou zéro si aucune commande n'a été exécutée. case mot in [ [(] motif [ | motif ] ... ) liste ;; ] ... esac Une commande case commence d'abord par développer le mot, puis essaye de le mettre en correspondance tour à tour avec chacun des motifs en utilisant les règles de mise en correspondance dans Motifs génériques ci-dessous. Le mot est développé en uti- lisant le développement du tilde, le développement des pa- ramètres et des variables, le développement arithmétique, la substitution de commande, la substitution de processus et la suppression des protections. Chaque motif examiné est développé en utilisant le développement du tilde, le développement des pa- ramètres et des variables, le développement arithmétique, la substitution de commande et la substitution de processus et la suppression des protections. Si l'option d'interpréteur nocase- match est activée, la mise en correspondance est effectuée sans tenir compte de la casse des caractères alphabétiques. Quand une correspondance est trouvée, la liste associée est exécutée. Dès qu'un motif correct a été trouvé, il n'y a plus d'autre essai si l'opérateur ;; est utilisé. Si ;& est utilisé au lieu de ;;, l'exécution continue avec la liste associée au jeu de motifs suivant. Si ;;& est utilisé au lieu de ;;, l'interpréteur essaye la liste de motifs suivante, si elle existe, et exécute toute liste associée à un motif correspondant, poursuivant l'exécution de la déclaration de cas comme si la liste de motifs n'avait pas de correspondance. Le code de retour est zéro si aucun motif ne correspond. Sinon il est le code de retour de la dernière com- mande exécutée dans la liste. if liste; then liste; [ elif liste; then liste; ] ... [ else liste; ] fi La liste du if est exécutée. Si son état final est zéro, la liste du then est exécutée. Sinon, chacune des listes des elif est exécutée tour à tour et si son état final est zéro, la liste du then associé est exécutée et la commande se termine. Sinon, la liste du else, si présente, est exécutée. L'état final est l'état final de la dernière commande exécutée ou zéro si aucune condition n'a été satisfaite. while liste-1; do liste-2; done until liste-1; do liste-2; done La commande while répète la liste liste-2 tant que la dernière commande de la liste liste-1 renvoie un état final de zéro. La commande until est identique à la commande while, sauf que le test est inversé : la liste-2 est exécutée tant que la dernière commande de la liste-1 renvoie un état final différent de zéro. L'état final des commandes while et until est l'état final de la dernière commande exécutée dans la liste-2 ou zéro si aucune commande n'a été exécutée. Coprocessus Un coprocessus est une commande d'interpréteur précédée par le mot ré- servé coproc. Un coprocessus est exécuté de façon asynchrone dans un sous-interpréteur, comme si la commande se terminait par l'opérateur de contrôle &, avec un tube bidirectionnel établi entre l'interpréteur d'exécution et le coprocessus. La syntaxe d'un coprocessus est : coproc [NOM] commande [redirections] Cela crée un coprocessus nommé NOM. commande peut être une commande simple ou une commande composée (voir plus haut). NOM est le nom d'une variable de l'interpréteur. Si NOM n'est pas fourni, le nom par défaut est COPROC. Le format recommandé à utiliser pour un coprocessus est le suivant : coproc [NOM] { commande [redirections]; } Cette forme est recommandée parce que des commandes simples font que le coprocessus est toujours appelé COPROC, et elle est plus simple à uti- liser et plus complète que les autres commandes composées. Si commande est une commande composée, NOM est optionnel. Le mot sui- vant coproc détermine si ce mot est interprété comme un nom de va- riable : il est interprété comme NOM si ce n'est pas un mot réservé qui introduit une commande composée. Si commande est une commande simple, NOM n'est pas permis ; cela est destiné à éviter une confusion entre NOM et le premier mot de la commande simple. Quand le coprocessus est exécuté, l'interpréteur crée une variable ta- bleau (consultez Tableaux ci-dessous) appelée NOM dans le contexte de l'interpréteur d'exécution. La sortie standard de commande est connec- tée par un tube à un descripteur de fichier dans l'interpréteur d'exé- cution, et ce descripteur de fichier est affecté à NOM[0]. L'entrée standard de commande est connectée par un tube à un descripteur de fi- chier dans l'interpréteur d'exécution, et ce descripteur de fichier est affecté à NOM[1]. Ce tube est établi avant toute redirection indiquée par la commande (consultez REDIRECTIONS ci-dessous). Les descripteurs de fichier peuvent être utilisés comme arguments aux commandes d'inter- préteur et redirections en utilisant les développements standards de mot. Les descripteurs de fichier autres que ceux créés pour exécuter des substitutions de commande et de processus, ne sont pas disponibles dans les sous-interpréteurs. L'identifiant du processus (PID) de l'interpréteur engendré pour exécu- ter le coprocessus est la valeur disponible de la variable NOM_PID. La commande interne wait peut être réutilisée pour attendre que le copro- cessus soit terminé. Puisque le coprocessus est créé comme une commande asynchrone, la com- mande coproc se termine toujours avec succès. L'état renvoyé d'un co- processus est l'état final de commande. Définitions des fonctions de l'interpréteur Une fonction de l'interpréteur est un objet qui est appelé comme une commande simple et qui exécute une commande composée avec un nouveau jeu de paramètres positionnels. Les fonctions de l'interpréteur sont déclarées de la façon suivante : nomfonction () commande-composée [redirection] function nomfonction [()] commande-composée [redirection] Cela définit une fonction possédant le nomfonction mentionné. Le mot réservé function est facultatif. S'il est fourni, les paren- thèses sont facultatives. Le corps de la fonction est la com- mande composée commande-composée (consultez Commandes composées ci-dessus). Cette commande est généralement une liste de com- mandes entre { et }, mais peut être n'importe quelle commande décrite dans Commandes composées ci-dessus. Si le mot réservé function est utilisé, mais que les parenthèses ne sont pas four- nies, les accolades sont recommandées. La commande-composée est exécutée chaque fois que nomfonction est indiqué comme le nom d'une commande normale. En mode POSIX, nomfonction doit un nom valable d'interpréteur et ne peut pas être le nom d’une des com- mandes internes spéciales de POSIX (« special builtins »). En mode par défaut, un nom de fonction peut être n'importe quel mot de l'interpréteur non protégé qui ne contient pas de $. Toutes les redirections (consultez REDIRECTIONS ci-dessous) indiquées lorsqu'une fonction est définie sont effectuées lorsque la fonc- tion est exécutée. Le code de retour d'une définition de fonc- tion est zéro, à moins qu'une erreur de syntaxe ne se produise ou qu'une fonction en lecture seule n'existe déjà avec le même nom. Lorsque la fonction est exécutée, le code de retour est ce- lui de la dernière commande exécutée dans le corps de la fonc- tion (consultez FONCTIONS ci-dessous). COMMENTAIRES Dans un interpréteur non interactif ou dans un interpréteur interactif avec l'option interactive_comments activée par la commande interne shopt (consultez COMMANDES INTERNES DE L'INTERPRÉTEUR ci-dessous), un mot commençant par # conduit à ignorer ce mot et tous les caractères restants sur la ligne. Un interpréteur interactif sans l'option inter- active_comments n'autorise pas les commentaires. L'option interac- tive_comments est activée par défaut dans les interpréteurs interac- tifs. PROTECTIONS Les 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 désactiver le traitement des caractères spéciaux, éviter la reconnaissance des mots réservés ou em- pêcher le développement des paramètres. Tous les métacaractères décrits ci-dessus dans DÉFINITIONS ont des si- gnifications spéciales pour l'interpréteur et doivent être protégés pour ne représenter que leur propre caractère. Lorsque les outils de développement de l'historique des commandes sont utilisés (consultez DÉVELOPPEMENT DE L'HISTORIQUE ci-dessous), le ca- ractère de développement de l'historique, généralement !, doit être protégé pour éviter le développement de l'historique. Il y a trois mécanismes de protection : le caractère de protection, les guillemets simples (« single quotes ») et les guillemets doubles (« double quotes »). Le caractère de protection est une contre-oblique (\) non protégée. Il préserve la valeur littérale du caractère qui le suit, à l'exception du <changement de ligne>. Si un couple \<changement de ligne> apparaît et si la contre-oblique n'est pas elle-même protégée, l'ensemble \<change- ment de ligne> est considéré comme une continuation de ligne (c'est-à-dire qu'il est supprimé du flux d'entrée et ignoré en pra- tique). Encadrer des caractères entre des guillemets simples préserve la valeur littérale de chacun des caractères entre guillemets simples. Un guille- met simple ne peut pas être placé entre deux guillemets simples, même s'il est précédé d'une contre-oblique. Encadrer des caractères entre des guillemets doubles préserve la valeur littérale de chacun des caractères sauf $, `, \ et, lorsque le dévelop- pement de l'historique est activé, !. Quand l'interpréteur et en mode POSIX, le ! n'a pas de signification particulière entre des guillemets doubles, même quand le développement de l'historique est activé. Les caractères $ et ` conservent leurs significations spéciales entre guillemets doubles. La contre-oblique ne conserve sa signification spé- ciale que lorsqu'elle est suivie par l'un des caractères suivants : $, `, ", \ ou <changement de ligne>. Un guillemet double peut être protégé entre deux guillemets doubles en étant précédé d'une contre-oblique. S'il est activé, le développement de l'historique sera effectué, à moins qu'un ! apparaissant entre guillemets doubles ne soit protégé par une contre-oblique. La contre-oblique précédant le ! n'est pas suppri- mée. Les caractères spéciaux * et @ ont des significations spéciales lorsqu'ils se trouvent entre des guillemets doubles (consultez PA- RAMÈTRES ci-dessous). Les séquences de caractères de la forme $'chaîne' sont traitées comme une variante spéciale des guillemets simples. La séquence est dévelop- pée en chaîne avec les caractères protégés par contre-oblique remplacés comme indiqué par la norme ANSI C. Les suites de protection par contre-oblique, si présentes, sont décodées comme suit : \a alerte (alarme) ; \b effacement arrière (« backspace ») ; \e \E caractère de protection ; \f saut de page (« form feed ») ; \n saut de ligne (« new line ») ; \r retour chariot (« carriage return ») ; \t tabulation horizontale ; \v tabulation verticale ; \\ contre-oblique ; \' guillemet simple ; \" guillemet double ; \? point d'interrogation ; \nnn le caractère 8 bits dont la valeur en octal vaut nnn (un à trois chiffres) ; \xHH le caractère 8 bits dont la valeur hexadécimale est HH (un ou deux chiffres hexadécimaux) ; \uHHHH le caractère Unicode (ISO/IEC 10646) dont la valeur hexa- décimale est HHHH (un à quatre chiffres hexadécimaux) ; \UHHHHHHHH le caractère Unicode (ISO/IEC 10646) dont la valeur hexa- décimale est HHHHHHHH (un à huit chiffres hexadécimaux) ; \cx un caractère contrôle-x. Le résultat développé est protégé par des guillemets simples comme si le symbole dollar n'avait pas été présent. Une chaîne entre guillemets doubles précédée d'un symbole dollar ($"chaine") conduira à la traduction de la chaîne selon les paramètres linguistiques régionaux en vigueur. L'infrastructure de gettext par- court la chaîne et effectue la traduction, en utilisant les variables de l'interpréteur LC_MESSAGES, TEXTDOMAINDIR et TEXTDOMAIN. Si les pa- ramètres linguistiques régionaux actuels sont C ou POSIX, s'il n'y a pas de traduction disponible ou si la chaîne n'est pas traduite, le symbole dollar est ignoré. C'est une forme de double protection, ainsi la chaîne demeure entre guillemets doubles par défaut qu'elle soit ou non traduite et remplacée. Si l'option noexpand_translation est activée en utilisant la commande interne shopt, les chaînes traduites sont pro- tégées par des guillemets simples au lieu de guillemets doubles. Consultez la description de shopt ci-dessous dans COMMANDES INTERNES DE L'INTERPRÉTEUR. PARAMÈTRES Un paramètre est une entité permettant de stocker des valeurs. Il peut être un nom, un nombre ou un des caractères spéciaux décrits ci-des- sous, dans Paramètres spéciaux. Une variable est un paramètre noté par un nom. Une variable possède une valeur et zéro ou plusieurs attributs. Les attributs sont affectés en utilisant la commande interne declare (consultez declare dans COMMANDES INTERNES DE L'INTERPRÉTEUR ci-des- sous). Un paramètre est créé si une valeur lui a été affectée. La chaîne NULL est une valeur correcte. Une fois qu'une variable est créée, elle ne peut être détruite qu'en utilisant la commande interne unset (consultez COMMANDES INTERNES DE L'INTERPRÉTEUR ci-dessous). Une variable peut recevoir une valeur par une affectation de la forme nom=[valeur] Si aucune valeur n'est indiquée, une chaîne NULL est affectée à la va- riable. Toutes les valeurs sont sujettes au développement du tilde, des paramètres et des variables, à la substitution de commande, au dévelop- pement arithmétique et à la suppression des protections (consultez DÉ- VELOPPEMENTS ci-dessous). Si une variable a son attribut integer confi- guré, alors la valeur est soumise à l'évaluation arithmétique, même si la syntaxe $((...)) n'est pas utilisée (consultez Développement arith- métique ci-dessous). Le découpage en mots et le développement des che- mins ne sont pas effectués. Les affectations peuvent également appa- raître comme arguments des commandes internes suivantes : alias, de- clare, typeset, export, readonly et local (commandes de déclaration). En mode POSIX, ces commandes internes pourraient apparaître dans une commande après une ou plusieurs instances de la commande interne com- mand et conserver ces propriétés d’affectation. Dans le contexte où une affectation affecte une valeur à une variable de l'interpréteur ou à un indice de tableau, l'opérateur += peut être utilisé pour ajouter ou additionner à la précédente valeur de la va- riable. Cela comprend des arguments pour les commandes internes, comme declare, qui acceptent des affectations (commandes de déclaration). Lorsque l'opérateur += est appliqué à une variable dont l'attribut in- teger (entier) a été positionné, la valeur est évaluée comme une ex- pression arithmétique et additionnée à la valeur actuelle de la va- riable qui est également évaluée. Lorsque += est appliqué à une va- riable tableau en utilisant l'affectation composée (consultez Tableaux ci-dessous), la valeur de la variable n'est pas détruite (comme elle l'est lorsque = est utilisé) et les nouvelles valeurs sont ajoutées au tableau, en commençant à l'indice maximal du tableau plus un (pour les tableaux indicés) ou ajoutées comme un couple clef valeur pour un ta- bleau associatif. Lorsque l'opérateur est appliqué à une variable de type chaîne, la valeur est développée et concaténée en valeur de la va- riable. L’attribut nameref peut être affecté à une variable en utilisant l’op- tion -n des commandes internes declare et local (consultez la descrip- tion des commandes declare et local ci-dessous) pour créer une nameref ou une référence vers une autre variable. Cela permet aux variables d’être manipulées indirectement. À chaque fois qu’une variable nameref est référencée, affectée, détruite ou a ses attributs modifiés (autre- ment qu'en utilisant ou en changeant l'attribut nameref lui-même), l’opération est en fait réalisée sur la variable indiquée par la valeur de la variable nameref. nameref est généralement utilisée dans des fonctions d’interpréteur pour référencer une variable dont le nom est passé en argument de la fonction. Par exemple, si un nom de variable est passé en premier argument à une fonction d’interpréteur, exécuter declare -n ref=$1 dans la fonction crée une variable de nameref ref dont la valeur est le nom de la variable passée en premier argument. Les références et affec- tations de ref et les modifications de ses attributs sont traitées comme des références, affectations et modifications d'attribut sur la variable dont le nom a été passé par $1. Si la variable de contrôle dans une boucle for a l’attribut nameref, la liste de mots peut être une liste de variables d’interpréteur et une référence de nom est éta- blie pour chaque mot de la liste, tour à tour, lorsque la boucle est exécutée. L’attribut nameref ne peut pas être donné aux variables de type tableau. Cependant, les variables nameref peuvent référencer des variables de type tableau et des variables de type tableau indicé. na- meref peut être détruit en utilisant l’option -n de la commande interne unset. Sinon, si unset est exécuté avec le nom d’une variable nameref en argument, la variable référencée par la variable nameref sera dé- truite. Paramètres positionnels Un paramètre positionnel est un paramètre noté par un ou plusieurs chiffres (à l'exception du chiffre 0 seul). Les paramètres positionnels sont affectés avec les arguments de l'interpréteur lors de son appel. Ils peuvent être réaffectés avec la commande interne set. On ne peut pas utiliser les affectations pour les paramètres positionnels. Ils sont temporairement remplacés lors de l'exécution d'une fonction de l'interpréteur (consultez FONCTIONS ci-dessous). Un paramètre positionnel constitué de plusieurs chiffres doit être en- cadré par des accolades lors de son développement (consultez DÉVELOPPE- MENTS ci-dessous). Paramètres spéciaux L'interpréteur traite plusieurs paramètres spécifiquement. Ces pa- ramètres peuvent uniquement être consultés, il n'est pas permis de leur affecter une valeur. * Se développe en l'ensemble des paramètres positionnels, commen- çant par le premier. Quand le développement n’est pas entre guillemets doubles, tous les paramètres positionnels se déve- loppent en mots séparés. Dans les contextes où il sont réalisés, ces mots sont soumis à d’autres découpages en mots et développe- ments de chemin. Quand le développement se produit entre des guillemets doubles, * se transforme en un seul mot constitué de la valeur de tous les paramètres positionnels séparés par le premier caractère de la variable spéciale IFS. C'est-à-dire que "$*" est équivalent à "$1c$2c...", où c est le premier caractère de la valeur de la variable IFS. Si IFS est inexistante, les pa- ramètres sont séparés par des espaces. Si IFS est NULL, les pa- ramètres sont accolés sans séparateurs. @ Se développe en ensemble des paramètres positionnels, commençant par le premier. Dans les contextes où le découpage en mots est réalisé, chaque paramètre positionnel se développe en un mot sé- paré ; si ces mots ne sont pas entre des guillemets doubles, ils sont sujets au découpage de mot. Dans les contextes où il n'y a pas de découpage en mots, chaque paramètre positionnel se déve- loppe en un mot distinct séparé par des espaces. Quand le déve- loppement a lieu entre guillemets doubles, chaque paramètre se développe en un mot distinct. C'est-à-dire que "$@" est équi- valent à "$1" "$2" .... Si le développement des guillemets doubles survient dans un mot, le développement du premier pa- ramètre est accolé à la première partie du mot d'origine et le développement du dernier paramètre est accolé à la dernière par- tie du mot d'origine. Quand il n'y a pas de paramètres position- nels, "$@" et $@ ne se développent en rien (c'est-à-dire qu'ils sont simplement éliminés). # Correspond au nombre de paramètres positionnels, en base déci- male. ? Se développe en état final du dernier pipeline exécuté au pre- mier plan. - Est remplacé par la liste des options de l'interpréteur indi- quées durant l'appel, configurées avec la commande interne set ou celles créées par l'interpréteur lui-même (comme avec l'op- tion -i). $ Se transforme en PID de l'interpréteur. Dans un sous-interpré- teur, il se transforme en PID de l'interpréteur et non pas du sous-interpréteur. ! Se transforme en PID de la dernière tâche placée en ar- rière-plan, soit exécutée comme une commande asynchrone, soit en utilisant la commande interne bg (consultez CONTRÔLE DES TÂCHES ci-dessous). 0 Se développe en nom de l'interpréteur ou du script. Ce paramètre est créé lors de l'initialisation de l'interpréteur. Si bash est appelé avec un fichier de commandes, $0 correspond au nom de ce fichier. Si bash est lancé avec l'option -c, alors $0 contient le premier argument, s'il y en a un, après la chaîne de com- mandes à exécuter. Sinon, ce paramètre contient le nom de fi- chier utilisé pour appeler bash, comme indiqué par l'argument zéro. Variables de l'interpréteur Les variables suivantes sont créées par l'interpréteur : _ Au lancement de l'interpréteur, contient le chemin d'accès uti- lisé pour appeler l'interpréteur, ou le script en cours d'exécu- tion tel qu'il est passé dans l'environnement ou dans la liste des arguments. Devient ensuite le dernier argument de la com- mande simple précédente exécutée au premier plan, après dévelop- pement. Contient également le chemin d'accès complet de chaque commande exécutée et se retrouve dans l'environnement exporté à cette commande. Lors de la vérification de l'arrivée de cour- rier, contient le nom du fichier de courrier en cours de consul- tation. BASH Se développe en chemin d'accès complet à l'instance actuelle de bash. BASHOPTS Liste des options activées de l'interpréteur, séparées par des deux-points « : ». Chaque mot de la liste est un argument cor- rect pour l'option -s de la commande interne shopt (consultez COMMANDES INTERNES DE L'INTERPRÉTEUR ci-dessous). Les options apparaissant dans BASHOPTS sont celles indiquées comme actives par shopt. Si cette variable est dans l'environnement au lance- ment de bash, chaque option de la liste est activée avant de lire les fichiers d’initialisation. Cette variable est en lec- ture seule. BASHPID Se transforme en PID du processus de l'interpréteur bash actuel. Diffère de $$ sous certaines conditions, comme dans les sous-in- terpréteurs ne nécessitant pas que bash soit réinitialisé. Les assignations à BASHPID n'ont pas d”effet. Si BASHPID est dé- truite, elle perd ses propriétés spéciales, même si elle est re- créée par la suite. BASH_ALIASES Une variable de type tableau associatif dont les éléments cor- respondent à une liste interne d'alias comme celle gérée par la commande interne alias. Les éléments ajoutés à ce tableau appa- raissent dans la liste d'alias ; cependant, la destruction d'éléments du tableau ne provoque pas actuellement le retrait des alias de la liste d'alias. Si BASH_ALIASES est détruite, elle perd ses propriétés spéciales, même si elle est recréée par la suite. BASH_ARGC Une variable de type tableau contenant le nombre de paramètres de chaque trame de la pile d'appel d'exécution de l'interpréteur bash actuel. Le nombre de paramètres du sous-programme actuel (fonction de l'interpréteur ou du script exécuté par . ou source) est au sommet de la pile. Lorsqu'un sous-programme est exécuté, le nombre de paramètres passés est placé dans BASH_ARGC. L'interpréteur crée BASH_ARGC seulement dans le mode de traçage étendu (consultez ci-dessous la description de l'op- tion extdebug de la commande interne shopt). La configuration de extdebug après que l'interpréteur ait démarré l'exécution d'un script, ou le référencement de cette variable quand extdebug n'existe pas, peut provoquer une incohérence des valeurs. BASH_ARGV Une variable de type tableau contenant tous les paramètres de la pile d'appel d'exécution de l'interpréteur bash actuel. Le der- nier paramètre du dernier sous-programme est au sommet de la pile ; le premier paramètre de l'appel initial est en bas. Lorsqu'un sous-programme est exécuté, les paramètres fournis sont placés dans BASH_ARGV. BASH_ARGV est créé uniquement dans le mode de traçage étendu (consultez ci-dessous la description de l'option extdebug de la commande interne shopt). La configu- ration de extdebug après que l'interpréteur ait démarré l'exécu- tion d'un script, ou le référencement de cette variable quand extdebug n'existe pas peut provoquer une incohérence des va- leurs. BASH_ARGV0 Quand elle est référencée, cette variable développe le nom de l'interpréteur ou du script de l'interpréteur (identique à $0 ; voir la description du paramètre spécial 0 ci-dessus). L'affec- tation d'une valeur à BASH_ARGV0 fait que cette valeur est aussi assignée à $0. Si BASH_ARGV0 est détruite, elle perd ses pro- priétés spéciales, même si elle est recréée par la suite. BASH_CMDS Une variable de type tableau associatif dont les éléments cor- respondent à une table de hachage interne de commandes comme celle gérée par la commande interne hash. Les éléments ajoutés à ce tableau apparaissent dans la table de hachage ; cependant, la destruction d'éléments du tableau ne provoque pas actuellement le retrait des noms de commandes de la table de hachage. Si BASH_CMDS est détruite, elle perd ses propriétés spéciales, même si elle est recréée par la suite. BASH_COMMAND La commande en cours d'exécution ou sur le point d'être exécu- tée, à moins que l'interpréteur n'exécute une commande à la suite d'une capture, auquel cas c'est la commande s'exécutant au moment de la capture. Si BASH_COMMAND est détruite, elle perd ses propriétés spéciales, même si elle est recréée par la suite. BASH_EXECUTION_STRING L'argument commande de l'option d'appel -c. BASH_LINENO Une variable de type tableau dont les éléments sont les numéros de ligne des fichiers sources où chaque élément correspondant de FUNCNAME a été invoqué. ${BASH_LINENO[$i]} est le numéro de la ligne dans le fichier source (${BASH_SOURCE[$i+1]}) où ${FUNC- NAME[$i]} a été appelé (ou ${BASH_LINENO[$i-1]} si consulté de- puis une autre fonction de l'interpréteur). Utilisez LINENO pour obtenir le numéro de ligne actuel. BASH_LOADABLES_PATH Liste des répertoires, séparés par des deux-points « : », que l'interpréteur consulte lorsqu'il cherche les commandes internes chargeables dynamiquement spécifiées par la commande enable. BASH_REMATCH Une variable de type tableau dont les éléments sont affectés avec l'opérateur binaire =~ dans la commande conditionnelle [[. L'élément d'indice 0 est la partie de la chaîne correspondant à l'expression rationnelle complète. L'élément d'indice n est la partie de la chaîne correspondant à la n-ième sous-expression entre parenthèses. BASH_SOURCE Une variable de type tableau dont les éléments sont les noms des fichiers source où les noms des fonctions d'interpréteur corres- pondants à la variable de type tableau FUNCNAME sont définis. La fonction d'interpréteur ${FUNCNAME[$i]} est définie dans le fi- chier ${BASH_SOURCE[$i]} et appelée depuis ${BASH_SOURCE[$i+1]}. BASH_SUBSHELL Incrémentée dans tous les sous-interpréteurs et environnements de sous-interpréteur quand l’interpréteur commence à s’exécuter dans cet environnement. La valeur initiale est 0. Si BASH_COM- MAND est détruite, elle perd ses propriétés spéciales, même si elle est recréée par la suite. BASH_VERSINFO Une variable de type tableau protégée en écriture dont les élé- ments représentent la version de cette instance de bash. Cette valeur est affectée aux éléments du tableau comme suit : BASH_VERSINFO[0] Le numéro majeur de la version (re- lease). BASH_VERSINFO[1] Le numéro mineur de la version (ver- sion). BASH_VERSINFO[2] Le niveau de correctif. BASH_VERSINFO[3] Le numéro de compilation. BASH_VERSINFO[4] Le statut de cette version (par exemple beta1). BASH_VERSINFO[5] La valeur de MACHTYPE. BASH_VERSION Se développe en une chaîne décrivant le numéro de version de cette instance de bash. COMP_CWORD Un indice dans ${COMP_WORDS} du mot contenant la position ac- tuelle du curseur. Cette variable n'est disponible que dans les fonctions de l'interpréteur appelées par les outils de complète- ment programmables (consultez Complètement programmable ci-des- sous). COMP_KEY La touche (ou dernière touche d'une suite de touches) utilisée pour appeler la fonction de complètement actuelle. COMP_LINE La ligne de commande actuelle. Cette variable n'est disponible que dans les fonctions de l'interpréteur appelées par les outils de complètement programmables (consultez Complètement program- mable ci-dessous). COMP_POINT L'indice de la position actuelle du curseur relatif au début de la commande actuelle. Si la position actuelle du curseur est à la fin de la commande actuelle, la valeur de cette variable est égale à ${#COMP_LINE}. Cette variable n'est disponible que dans les fonctions de l'interpréteur et les commandes externes appe- lées par les outils de complètement programmables (consultez Complètement programmable ci-dessous). COMP_TYPE Configurée à une valeur entière correspondant au type de complè- tement essayé qui a provoqué l'appel d'une fonction de complète- ment : TAB pour un complètement normal, ? pour l'affichage des complètements après tabulations successives, ! pour l'affichage des alternatives de complètement de mot partiel, @ pour afficher les complètements si le mot n'est pas modifié, ou % pour le menu de complètement. Cette variable n'est disponible que dans les fonctions de l'interpréteur et les commandes externes appelées par les outils de complètement programmables (consultez Complè- tement programmable ci-dessous). COMP_WORDBREAKS Le jeu de caractères que la bibliothèque readline considère comme séparateurs de mots lors du complètement de mot. Si COMP_WORDBREAKS est détruite, elle perd ses propriétés spé- ciales, même si elle est recréée par la suite. COMP_WORDS Une variable de type tableau (consultez Tableaux ci-dessous) consistant en mots individuels de la ligne de commande actuelle. La ligne est découpée en mots comme readline la découperait, en utilisant COMP_WORDBREAKS tel que décrit ci-dessus. Cette va- riable n'est disponible que dans les fonctions de l'interpréteur appelées par les outils de complètement programmables (consultez Complètement programmable ci-dessous). COPROC Une variable de type tableau (consultez Tableaux ci-dessous) créée pour représenter les descripteurs de fichier pour les sor- ties depuis et les entrées vers un coprocessus non nommé (consultez Coprocessus ci-dessus). DIRSTACK Une variable de type tableau (consultez Tableaux ci-dessous) re- présentant le contenu actuel de la pile de répertoires. Les ré- pertoires apparaissent dans la pile dans l'ordre dans lequel la commande interne dirs les affiche. Les affectations des éléments de cette variable tableau peuvent être utilisés pour modifier les répertoires déjà dans la pile, mais les commandes internes pushd et popd doivent être utilisées pour ajouter et enlever des répertoires. L'affectation de cette variable ne modifiera pas le répertoire actuel. Si DIRSTACK est détruite, elle perd ses pro- priétés spéciales, même si elle est recréée par la suite. EPOCHREALTIME À chaque fois que ce paramètre est consulté, il se développe en nombre de secondes écoulées depuis l'Epoch Unix (consultez time(3)) comme valeur en virgule flottante avec une granularité d'une microseconde. Les affectations à EPOCHREALTIME sont igno- rées. Si EPOCHREALTIME est détruite, elle perd ses propriétés spéciales, même si elle est recréée par la suite. EPOCHSECONDS À chaque fois que ce paramètre est consulté, il se développe en nombre de secondes écoulées depuis l'Epoch Unix (consultez time(3)). Les affectations à EPOCHSECONDS sont ignorées. Si EPOCHSECONDS est détruite, elle perd ses propriétés spéciales, même si elle est recréée par la suite. EUID Contient l'UID effectif de l'utilisateur, initialisé au démar- rage de l'interpréteur. Cette variable est en lecture seule. FUNCNAME Une variable de type tableau contenant le nom de toutes les fonctions de l'interpréteur actuellement dans la pile d'appel d'exécution. L'élément d'indice 0 est le nom de l'une des fonc- tions en cours d'exécution dans l'interpréteur. L'élément le plus bas (celui avec l'indice le plus grand) est "main". Cette variable n'existe que si une fonction de l'interpréteur est en cours d'exécution. Les affectations de FUNCNAME n'ont aucun ef- fet. Si FUNCNAME est détruite, elle perd ses propriétés spé- ciales, même si elle est recréée par la suite. Cette variable peut être utilisée avec BASH_LINENO et BASH_SOURCE. Chaque élément de FUNCNAME a des éléments corres- pondant dans BASH_LINENO et BASH_SOURCE pour décrire la pile d'appel. Par exemple, ${FUNCNAME[$i]} a été appelé depuis le fi- chier ${BASH_SOURCE[$i+1]} à la ligne numéro ${BASH_LINENO[$i]}. La commande interne caller affiche la pile d'appel actuelle uti- lisant ces renseignements. GROUPS Une variable de type tableau contenant la liste des groupes dont l'utilisateur est membre. Les affectations de GROUPS n'ont aucun effet. Si GROUPS est détruite, elle perd ses propriétés spé- ciales, même si elle est recréée par la suite. HISTCMD Le numéro d'historique, ou l'indice dans la file d'historique, de la commande en cours. Les affectations de HISTCMD sont igno- rées. Si HISTCMD est détruite, elle perd ses propriétés spé- ciales, même si elle est recréée par la suite. HOSTNAME Automatiquement configurée au nom de la machine actuelle. HOSTTYPE Automatiquement configurée en chaîne décrivant de façon unique le type de machine sur laquelle bash s'exécute. La valeur par défaut dépend du système. LINENO Chaque fois que ce paramètre est consulté, l'interpréteur le remplace par un nombre décimal représentant le numéro de la ligne actuelle (commençant à 1), au sein du script ou de la fonction. Hors d'un script ou d'une fonction, la valeur n'a pas nécessairement de sens. Si LINENO est détruite, elle perd ses propriétés spéciales, même si elle est recréée par la suite. MACHTYPE Automatiquement configurée en chaîne décrivant le type du sys- tème sur lequel bash s'exécute, dans le format standard de GNU processeur-compagnie-système. La valeur par défaut dépend du système. MAPFILE Une variable de type tableau (consultez Tableaux ci-dessous) créée pour représenter le texte lu par la commande interne map- file si aucun nom de variable n'a été fourni. OLDPWD Le répertoire de travail précédent tel que configuré par la com- mande cd. OPTARG La valeur du dernier argument d'option traité par la commande interne getopts (consultez COMMANDES INTERNES DE L'INTERPRÉTEUR ci-dessous). OPTIND L'indice du prochain argument à traiter par la commande interne getopts (consultez COMMANDES INTERNES DE L'INTERPRÉTEUR ci-des- sous). OSTYPE Automatiquement configurée en chaîne décrivant le système d'ex- ploitation sur lequel bash s'exécute. La valeur par défaut dé- pend du système. PIPESTATUS Une variable de type tableau (consultez Tableaux ci-dessous) contenant une liste des états finaux des processus exécutés dans le pipeline exécuté le plus récemment au premier plan (qui peut éventuellement contenir une seule commande). PPID L'identifiant du processus parent de l'interpréteur. Cette va- riable est en lecture seule. PWD Le répertoire de travail actuel tel que configuré par la com- mande cd. RANDOM À chaque fois que ce paramètre est consulté, un entier aléatoire entre 0 et 32767 est engendré. L'affectation d'une valeur à RAN- DOM initialise (ensemence) la suite de nombres aléatoires. Si RANDOM est détruite, elle perd ses propriétés spéciales, même si elle est recréée par la suite. READLINE_ARGUMENT Tout argument numérique donné à une commande readline qui a été définie en utilisant "bind -x" (consultez COMMANDES INTERNES DE L'INTERPRÉTEUR ci-dessous) quand il a été invoqué. READLINE_LINE Le contenu du tampon de ligne readline, pour utiliser avec "bind -x" (consultez COMMANDES INTERNES DE L'INTERPRÉTEUR ci-dessous). READLINE_MARK La position de la marque (point d'insertion enregistré) dans le tampon de ligne readline, pour utiliser avec "bind -x" (consul- tez COMMANDES INTERNES DE L'INTERPRÉTEUR ci-dessous). Les carac- tères entre le point d'insertion et la marque sont souvent appe- lés la zone. READLINE_POINT La position du point d'insertion dans le tampon de ligne read- line, pour utiliser avec "bind -x" (consultez COMMANDES INTERNES DE L'INTERPRÉTEUR ci-dessous). REPLY Configurée en ligne de saisie lue par la commande interne read lorsqu'aucun argument n'a été fourni. SECONDS À chaque fois que ce paramètre est consulté, il se développe en nombre de secondes écoulées depuis le lancement de l'interpré- teur. Si une valeur est affectée à SECONDS, la valeur renvoyée lors d’une consultation ultérieure est le temps en seconde écoulé depuis l'affectation, ajouté à la valeur affectée. Le nombre de secondes entre le moment du lancement de l'interpré- teur et l'heure actuelle sont toujours déterminés en interro- geant l'horloge système. Si SECONDS est détruite, elle perd ses propriétés spéciales, même si elle est recréée par la suite. SHELLOPTS Liste des options activées de l'interpréteur, séparées par des deux-points « : ». Chaque mot de la liste est un argument cor- rect pour l'option -o de la commande interne set (consultez COM- MANDES INTERNES DE L'INTERPRÉTEUR ci-dessous). Les options appa- raissant dans SHELLOPTS sont celles indiquées comme actives par set -o. Si cette variable est dans l'environnement au lancement de bash, chaque option de la liste est activée avant de lire les fichiers d’initialisation. Cette variable est en lecture seule. SHLVL Incrémenté de 1 à chaque appel d'une instance de bash. SRANDOM Cette variable engendre un nombre pseudo-aléatoire de 32 bits chaque fois qu'elle est consultée. Le générateur de nombres aléatoires n'est pas linéaire sur les systèmes qui prennent en charge /dev/urandom ou arc4random, aussi chaque nombre renvoyé n'a aucune relation avec les nombres précédents. Le générateur de nombre aléatoire ne peut pas être ensemencé, aussi les affec- tations à cette variable n'ont aucun effet. Si SRANDOM est dé- truite, elle perd ses propriétés spéciales, même si elle est re- créée par la suite. UID Contient l'UID de l'utilisateur actuel, initialisé au démarrage de l'interpréteur. Cette variable est en lecture seule. Les variables suivantes sont utilisées par l'interpréteur. Dans cer- tains cas, bash affecte des valeurs par défaut aux variables ; ces cas sont décrits ci-dessous. BASH_COMPAT La valeur est utilisée pour définir le niveau de compatibilité de l’interpréteur. Consultez MODE DE COMPATIBILITÉ DE L'INTER- PRÉTEUR ci-dessous pour une description des différents niveaux de compatibilité et leurs conséquences. La valeur peut être un nombre décimal (par exemple 4.2) ou entier (par exemple 42) cor- respondant au niveau de compatibilité voulu. Si BASH_COMPAT est détruite ou définie comme une chaîne vide, le niveau de compati- bilité est défini à la valeur par défaut de la version actuelle. Si BASH_COMPAT est définie à une valeur de niveau de compatibi- lité impossible, l’interpréteur affiche un message d’erreur et définit le niveau de compatibilité à la valeur par défaut de la version actuelle. Les valeurs possibles correspondent aux ni- veaux de compatibilité décrits ci-dessous dans MODE DE COMPATI- BILITÉ DE L'INTERPRÉTEUR. Par exemple, 4.2 et 42 sont des va- leurs possibles qui correspondent à l'option compat42 de shopt et définissent le niveau de compatibilité à 42. La version ac- tuelle est aussi une valeur possible. BASH_ENV Si ce paramètre existe lorsque bash exécute un script, sa valeur est considérée comme un nom de fichier contenant les commandes d'initialisation de l'interpréteur, comme dans ~/.bashrc. La va- leur de BASH_ENV est soumise au développement des paramètres, à la substitution de commande et au développement arithmétique avant d'être considérée comme un nom de fichier. PATH n'est pas utilisée pour rechercher le fichier obtenu. BASH_XTRACEFD Si configurée à une valeur entière correspondant à un descrip- teur de fichier correct, bash écrira la trace de sortie si set -x est activé vers ce descripteur de fichier. Le descripteur de fichier est fermé quand BASH_XTRACEFD est détruite ou qu'une nouvelle valeur lui est affectée. Détruire BASH_XTRACEFD ou lui affecter la chaîne vide conduit la trace de sortie à être en- voyée vers la sortie d'erreur standard. Remarquez que configurer BASH_XTRACEFD à 2 (le descripteur de fichier de la sortie d'er- reur standard) puis la détruire revient à fermer la sortie d'er- reur standard. CDPATH Le chemin de recherche de la commande interne cd. Il s'agit d'une liste de répertoires, séparés par des deux-points « : », que l'interpréteur consulte lorsqu'il cherche un sous-répertoire destination de la commande cd. Un exemple de valeur est ".:~:/usr". CHILD_MAX Définir le nombre de valeurs d’état de sortie des enfants dont l’interpréteur doit se souvenir. Bash ne permettra pas à cette valeur d’être inférieure à un minimum imposé par POSIX, ni d’être supérieure à une valeur maximale (8192 pour l’instant). La valeur minimale dépend du système. COLUMNS Utilisée par la commande composée select pour déterminer la lar- geur du terminal lors de l'affichage des listes de sélection. Automatiquement configurée si l’option checkwinsize est activée ou dans un interpréteur interactif à la réception d'un signal SIGWINCH. COMPREPLY Une variable de type tableau dans lequel bash lit les complète- ments possibles produits par une fonction de l'interpréteur ap- pelée par les outils de complètement programmables (consultez Complètement programmable ci-dessous). Chaque élément du tableau contient un complètement possible. EMACS Si bash trouve cette variable dans l'environnement lorsque l'in- terpréteur démarre avec la valeur "t", il considère que l'inter- préteur est lancé dans un tampon d'interpréteur d'Emacs et désactive l'édition en ligne. ENV Développé et exécuté de façon similaire à BASH_ENV (consultez APPEL ci-dessus) quand l'interpréteur interactif est invoqué en mode POSIX. EXECIGNORE Une liste, séparée par des deux-points « : », de motifs de l'in- terpréteur (voir Motifs génériques) définissant la liste de noms de fichier à ignorer par la commande de recherche utilisant PATH. Les fichiers dont les noms de chemin complets corres- pondent à un de ces motifs ne sont pas considérés comme des fi- chiers exécutables en vue du complètement et de l'exécution de commande au moyen d'une recherche dans PATH. Cela n'affecte pas le comportement des commandes [, test et [[. Les noms de chemin complets dans la table de hachage des commandes ne sont pas su- jets à EXECIGNORE. Utiliser cette variable pour ignorer des fi- chiers de bibliothèque partagée dont le bit exécutable est pré- sent, mais qui ne sont pas des fichiers exécutables. La corres- pondance de motif respecte la configuration de l'option d'inter- préteur extglob. FCEDIT L'éditeur par défaut utilisé par la commande interne fc. FIGNORE Une liste de suffixes, séparés par des deux-points « : », que bash ignorera lors du complètement des noms de fichiers (consul- tez READLINE ci-dessous). Un nom de fichier dont le suffixe cor- respond à l'un de ceux mentionnés dans FIGNORE est exclu de la liste des noms de fichiers correspondant pour le complètement. Par exemple, cette variable peut prendre la valeur ".o:~" (des protections sont nécessaires pour l'affectation d'une valeur à cette variable qui contient des tildes). FUNCNEST Si configurée à une valeur numérique strictement positive, cela définit le niveau maximal d'imbrication de fonctions. Les invo- cations de fonctions qui dépassent ce niveau d'imbrication for- ceront la commande actuelle à abandonner. GLOBIGNORE Une liste de motifs séparés par des deux-points « : », définis- sant l'ensemble des noms de fichier à ignorer lors du développe- ment des chemins. Si un nom de fichier correspondant à un des motif de développement des chemins correspond également à un des motifs dans GLOBIGNORE, il est supprimé de la liste des corres- pondances. HISTCONTROL Une liste de valeurs, séparées par des deux-points « : », com- mandant la façon dont les commandes sont sauvegardées dans la file d'historique. Si la liste des valeurs contient la valeur ignorespace, les lignes commençant par une espace ne sont pas sauvegardées dans la file d'historique. La valeur ignoredups conduit à ne pas sauvegarder une ligne correspondant exactement à la ligne de commande précédente. La présence de ignoreboth est un condensé pour ignorespace et ignoredups. La valeur erasedups conduit à retirer de la file d'historique toutes les lignes pré- cédant la ligne actuelle et lui correspondant avant que cette ligne y soit sauvegardée. Toute valeur qui ne fait pas partie de la liste ci-dessus est ignorée. Si HISTCONTROL est inexistante ou si elle ne contient pas une valeur correcte, toutes les lignes lues par l'analyseur de l'interpréteur seront sauvegar- dées dans la file d'historique, selon la valeur de HISTIGNORE. La seconde ligne et les suivantes d'une commande multiligne ne sont pas testées et sont ajoutées dans l'historique indépendam- ment de la valeur de HISTCONTROL. HISTFILE Le nom du fichier dans lequel l'historique des commandes est sauvegardé (consultez HISTORIQUE ci-dessous). Par défaut, il s'agit de ~/.bash_history. Si inexistante, l'historique des com- mandes n'est pas sauvegardé lorsqu'un interpréteur se termine. HISTFILESIZE Le nombre maximal de lignes contenues dans le fichier d'histo- rique. Quand cette variable contient une valeur, le fichier d’historique est tronqué, si besoin, pour ne pas contenir plus que ce nombre de lignes en enlevant les entrées les plus an- ciennes. Ce fichier est aussi tronqué à cette taille après son écriture quand un interpréteur se termine. Si la valeur est 0, le fichier d’historique est tronqué à une taille nulle. Les va- leurs non numériques ou négatives empêchent la troncature. L’in- terpréteur définit la valeur par défaut à la valeur de HISTSIZE après avoir lu tous les fichiers d’initialisation. HISTIGNORE Une liste de motifs, séparés par des deux-points « : », détermi- nant quelles lignes de commande devraient être sauvegardées dans la file d'historique. Chaque motif est accroché au début de la ligne et doit correspondre à celle-ci complètement (aucun ajout de « * » implicite). Chaque motif est comparé à chaque ligne après application des vérifications de HISTCONTROL. En plus des motifs génériques usuels de l'interpréteur, « & » correspond à la ligne précédente de l'historique. « & » peut être protégée par une contre-oblique ; la contre-oblique est supprimée avant de tenter une comparaison. La seconde ligne et les suivantes d'une commande composée multiligne ne sont pas testées et sont ajoutées dans l'historique quelque soit la valeur de HISTIGNORE. La correspondance de motif respecte la configuration de l'option d'interpréteur extglob. HISTSIZE Le nombre de commandes à mémoriser dans l'historique (consultez HISTORIQUE ci-dessous). Si la valeur est 0, les commandes ne sont pas sauvegardées dans la liste d’historique. Les valeurs négatives permettent de sauvegarder toutes les commandes dans la liste d’historique (sans limite). L’interpréteur définit la va- leur par défaut à 500 après avoir lu tous les fichiers d’initia- lisation. HISTTIMEFORMAT Si cette variable existe et n'est pas NULL, sa valeur est utili- sée comme une chaîne de caractères par strftime(3) afin d'impri- mer l'horodatage associé à chaque élément de l'historique affi- ché par la commande interne history. Si cette variable existe, les horodatages sont écrits dans le fichier d'historique afin d'être conservés au fur et à mesure des sessions de l'interpré- teur. Cela utilise le caractère de commentaire d'historique pour distinguer l'horodatage des autres lignes de l'historique. HOME Le répertoire d'accueil de l'utilisateur actuel ; l'argument par défaut de la commande interne cd. La valeur de cette variable est aussi utilisée lors du développement du tilde. HOSTFILE Contient le nom d'un fichier ayant le même format /etc/hosts qui devra être lu lorsque l'interpréteur aura besoin de compléter un nom de machine. La liste des complètements possibles de noms de machine peut être changée pendant l'exécution de l'interpré- teur ; à la tentative de complètement de nom de machine suivant le changement de valeur, bash ajoute le contenu du nouveau fi- chier à la liste existante. Si HOSTFILE existe mais est vide, ou désigne un fichier non accessible en lecture, bash essaie de lire /etc/hosts pour obtenir la liste des complètements de noms de machine possibles. Lorsque HOSTFILE est détruite, la liste des noms de machine est effacée. IFS Le séparateur de champs interne (« Internal Field Separator ») qui est utilisé pour le découpage en mots après les développe- ments et pour découper les lignes en mots avec la commande in- terne read. La valeur par défaut est « <espace><tab><change- ment_de_ligne> ». IGNOREEOF Commande le comportement d'un interpréteur interactif à la ré- ception d'un caractère EOF (fin de fichier) comme unique saisie. Si elle existe, la valeur est le nombre de caractères EOF consé- cutifs qui doivent être tapés comme premiers caractères sur une ligne de saisie avant que bash ne termine. Si la variable existe mais que sa valeur n'est pas numérique ou si elle n'a pas de va- leur, la valeur par défaut est 10. Si elle n'existe pas, EOF si- gnifie la fin de la saisie pour l'interpréteur. INPUTRC Le nom du fichier d’initialisation pour readline, prioritaire sur le fichier par défaut de ~/.inputrc (consultez READLINE ci-dessous). INSIDE_EMACS Si cette variable apparaît dans l'environnement quand le script démarre, bash considère qu'il s'exécute dans un tampon d'inter- préteur d'Emacs et peut désactiver l'édition de ligne, suivant la valeur de TERM. LANG Utilisée pour déterminer le paramètre linguistique régional pour toute catégorie non spécifiquement sélectionnée par une variable commençant par LC_. LC_ALL Cette variable surpasse LANG et toute autre variable LC_ indi- quant une catégorie de paramètres linguistiques régionaux. LC_COLLATE Cette variable détermine l'ordre de collation utilisé pour trier les résultats du développement des chemins et détermine le com- portement des expressions d’intervalle, des classes d'équiva- lences et des suites de collations dans le développement des chemins et la correspondance de motifs. LC_CTYPE Cette variable détermine l'interprétation des caractères et le comportement des classes de caractères lors du développement des chemins et de la recherche de correspondances de motifs. LC_MESSAGES Cette variable détermine le paramètre linguistique régional uti- lisé pour traduire les chaînes entre guillemets doubles précé- dées d'un $. LC_NUMERIC Cette variable détermine le paramètre linguistique régional uti- lisé pour formater les nombres. LC_TIME Cette variable détermine le paramètre linguistique régional uti- lisé pour les données et le temps. LINES Utilisée par la commande composée select pour déterminer la taille des colonnes lors de l'affichage des listes de sélection. Automatiquement configurée si l’option checkwinsize est activée ou dans un interpréteur interactif à la réception d'un signal SIGWINCH. MAIL Si ce paramètre correspond à un nom de fichier ou de répertoire et si la variable MAILPATH est inexistante, bash informe l'uti- lisateur de l'arrivée de messages dans le fichier indiqué ou le répertoire au format Maildir. MAILCHECK Indique la durée (en seconde) au bout de laquelle bash vérifie si un nouveau message est arrivé. La valeur par défaut est 60 secondes. Lorsque le délai est écoulé, l'interpréteur véri- fiera la présence d'un courrier électronique avant d'afficher son invite de base. Si cette variable est inexistante, ou contient une valeur strictement négative, l'interpréteur désac- tive la vérification du courrier. MAILPATH Une liste de noms de fichiers séparés par des deux-points « : », dans lesquels on vérifiera l'arrivée de courrier. Le nom d'un fichier peut être suivi d'un point d'interrogation « ? », puis d'une chaîne de caractères indiquant le message à afficher en cas de courrier. Dans cette chaîne, le paramètre $_ correspond au nom du fichier de courrier actuel. Exemple : MAILPATH='/usr/spool/mail/bfox?"Vous avez du cour- rier":~/shell-mail?"$_ a du courrier !"' Bash peut être configurée pour fournir une valeur par défaut pour cette variable (il n'y a pas de valeur par défaut), mais l'emplacement du fichier de boîte à lettres dépend du système (par exemple /var/mail/$USER). OPTERR Si configurée à la valeur 1, bash affiche les messages d'erreurs engendrés par la commande interne getopts (consultez COMMANDES INTERNES DE L'INTERPRÉTEUR ci-dessous). OPTERR est initialisée avec la valeur 1 à chaque appel de l'interpréteur ou au lance- ment d'un script. PATH Le chemin de recherche des commandes à exécuter. Il s'agit d'une liste de répertoires, séparés par des deux-points « : » dans lesquels l'interpréteur recherche les commandes (consultez EXÉ- CUTION DES COMMANDES ci-dessous). Un nom de répertoire de taille nulle (NULL) dans la valeur de PATH désigne le répertoire ac- tuel. Un répertoire NULL peut apparaître comme deux deux-points consécutifs ou comme des deux-points en début ou en fin. Le che- min par défaut dépend du système et est choisi par l'administra- teur installant bash. Une valeur commune est ``/usr/local/bin: /usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin''. POSIXLY_CORRECT Si cette variable existe dans l'environnement lorsque bash dé- marre, l'interpréteur passe en mode POSIX avant de lire les fi- chiers d’initialisation comme si l'option --posix avait été fournie. Si elle est créée pendant que l'interpréteur est en cours d'exécution, bash active le mode POSIX comme si la com- mande set -o posix a été exécutée. Quand l'interpréteur passe en mode POSIX, il configure cette variable si elle ne l'a pas déjà été. PROMPT_COMMAND Si cette variable existe et est un tableau, la valeur de chaque élément existant est exécutée comme commande préalablement à l'affichage de chaque invite de base. Si elle existe mais n'est pas une variable de type tableau, sa valeur est utilisée comme commande à exécuter à la place. PROMPT_DIRTRIM Si elle contient un nombre supérieur à zéro, cette valeur est utilisée comme nombre de répertoires finaux à conserver lors du développement des protections de chaîne d'invite \w et \W (consultez INVITES ci-dessous). Les caractères supprimés sont remplacés par une ellipse. PS0 La valeur de ce paramètre est développée (consultez INVITES ci-dessous) puis affichée par les interpréteurs interactifs après la lecture d'une commande et avant son exécution. PS1 La valeur de ce paramètre est développée puis utilisée comme chaîne d'invite de base (consultez INVITES ci-dessous). La va- leur par défaut est « \s-\v\$ ». PS2 La valeur de ce paramètre est développée comme PS1 puis utilisée comme chaîne d'invite secondaire. La valeur par défaut est « > ». PS3 La valeur de ce paramètre est utilisée comme invite de la com- mande select (consultez GRAMMAIRE DE L'INTERPRÉTEUR ci-dessus). PS4 La valeur de ce paramètre est développée comme PS1 puis affichée avant chaque commande affichée par bash lors d'un suivi d'exécu- tion. Le premier caractère de PS4 est répété autant de fois que nécessaire pour indiquer le niveau d'imbrication. La valeur par défaut est « + ». SHELL Cette variable développe le chemin d'accès complet à l'interpré- teur de commandes. Si elle est inexistante au démarrage de l'in- terpréteur, bash lui affecte le chemin d'accès complet à l'in- terpréteur de commandes de connexion de l'utilisateur actuel. TIMEFORMAT La valeur de ce paramètre est utilisée en tant que chaîne de format indiquant comment les informations de paramétrage doivent être affichées pour les pipelines précédés du mot réservé time. Le caractère % introduit une suite de caractères de protection qui est développée en valeur de temps ou autre information. Les suites de caractères de protection et leurs significations sont les suivantes ; les crochets marquent les parties facultatives. %% Un % seul (non interprété). %[p][l]R Le temps écoulé en seconde. %[p][l]U Le temps processeur écoulé en mode utilisateur en se- conde. %[p][l]S Le temps processeur écoulé en mode système en seconde. %P Le pourcentage de temps processeur utilisé calculé avec (%U + %S) / %R. Le p facultatif est un chiffre indiquant la précision, le nombre de chiffres après la virgule. Une valeur de 0 conduit à affi- chage de nombres entiers. Trois chiffres au plus peuvent être affichés après la virgule ; toute valeur supérieure à 3 sera mo- difiée en 3. Si p n'est pas précisé, la valeur 3 est utilisée. Le l facultatif indique un format plus long, incluant les mi- nutes, de la forme MMmSS.DDs. La valeur de p détermine si la partie décimale est affichée ou non. Si cette variable n'existe pas, bash agit comme si elle avait la valeur $'\nreal\t%3lR\nuser\t%3lU\nsys\t%3lS'. Si la valeur est NULL, aucune information de chronométrage n'est affichée. Un ca- ractère final de changement de ligne est ajouté quand la chaîne de format est affichée. TMOUT Si configurée en valeur strictement positive, TMOUT est traitée comme le délai par défaut pour la commande interne read. La com- mande select se termine s'il n'y a pas de saisie au bout de TMOUT secondes lorsque l'entrée vient d'un terminal. Dans un in- terpréteur interactif, la valeur est interprétée comme une durée en seconde à attendre une ligne de saisie après avoir affiché l'invite de base. Bash se termine après avoir attendu pendant ce temps en seconde si aucune saisie de ligne complète n'est arri- vée. TMPDIR Si existante, bash utilise sa valeur comme nom de répertoire dans lequel bash crée les fichiers temporaires nécessaires au fonctionnement de l'interpréteur. auto_resume Cette variable commande le comportement de l'interpréteur vis-à-vis de l'utilisateur et du contrôle des tâches. Si cette variable existe, les commandes simples constituées d'un seul mot, sans redirection, sont considérées comme de possibles re- lances de tâches suspendues. Aucune ambiguïté n'est possible, si plusieurs tâches commencent par la chaîne saisie, la tâche à la- quelle il a été accédé le plus récemment est sélectionnée. Le nom d'une tâche suspendue, dans ce contexte, est la ligne de commande utilisée pour la lancer. Si configurée à la valeur exact, la chaîne fournie doit correspondre exactement au nom d'une tâche suspendue ; si configurée à substring, la chaîne fournie doit correspondre à une sous-chaîne du nom de la tâche suspendue. La valeur substring donne une fonctionnalité analogue à l'identificateur de tâche %? (consultez CONTRÔLE DES TÂCHES ci-dessous). Si configurée à toute autre valeur, la chaîne four- nie doit être le préfixe du nom d'une tâche suspendue ; cela fournit une fonctionnalité analogue à l'identificateur de tâche %string. histchars Les deux ou trois caractères commandant le développement de l'historique et le découpage en lexèmes (consultez DÉVELOPPEMENT DE L'HISTORIQUE ci-dessous). Le premier caractère est le carac- tère de développement de l'historique, celui qui indique le dé- but d'un développement d'historique (normalement « ! »). Le se- cond caractère est celui de substitution rapide, utilisé comme raccourci pour relancer la commande précédente, en modifiant une partie de la chaîne (par défaut « ^ »). Le troisième caractère facultatif est celui qui indique, lorsqu'on le trouve en début de mot que le reste de la ligne est un commentaire (normalement « # »). Ce caractère de commentaire empêche le développement de l'historique pour tous les mots restants sur la ligne. Il ne conduit pas nécessairement l'analyseur de l'interpréteur à considérer le reste de la ligne comme un commentaire. Tableaux Bash fournit des variables de type tableau indicé ou associatif, à une dimension. Toute variable peut être utilisée comme tableau indicé ; la commande interne declare peut servir à déclarer explicitement un ta- bleau. Il n'y a pas de limitation maximale à la taille d'un tableau, ni d'obligation à indicer les éléments ou les affecter de façon contiguë. Les tableaux indicés sont consultés avec des entiers (évaluations arithmétiques comprises) commençant à zéro ; les tableaux associatifs sont consultés avec des chaînes arbitraires. Sauf mention contraire, les indices de tableaux indicés ne doivent pas être des entiers néga- tifs. Un tableau indicé est créé automatiquement si une variable quelconque est affectée en utilisant la syntaxe nom[indice]=valeur. L'indice est traité comme une expression arithmétique et doit s'évaluer en un nombre. declare -a nom permet de déclarer explicitement un tableau in- dicé (consultez COMMANDES INTERNES DE L'INTERPRÉTEUR ci-dessous). de- clare -a nom[indice] est aussi accepté ; l'indice est ignoré. Les tableaux associatifs sont créés en utilisant declare -A nom. Des attributs peuvent être indiqués pour une variable tableau en utili- sant les commandes internes declare et readonly. Les attributs s'ap- pliquent à tous les éléments d'un tableau. Les tableaux sont affectés en utilisant l'affectation composée de la forme nom=(valeur_1 ... valeur_n), où chaque valeur peut être de la forme [indice]=chaîne. Les affectations de tableau indicé ne néces- sitent rien d’autre que chaîne. Chaque valeur de la liste est dévelop- pée en utilisant tous les développements de l'interpréteur décrits ci-dessous dans DÉVELOPPEMENTS. Lors de l'affectation de tableaux indi- cés, si les crochets et les indices facultatifs sont fournis, les af- fectations ont lieu en conséquence ; sinon l'indice de l'élément af- fecté est le dernier indice affecté plus un. L'indexation commence à zéro. Lors de l'affectation à un tableau associatif, les mots d'une affecta- tion composée peuvent être soit des affectations pour lesquelles un in- dice est requis, soit une liste de mots qui est interprétée comme une séquence alternant clés et valeurs : nom=( clé1 valeur1 clé2 valeur2 ...). Elles sont traitées de la même manière que nom=( [clé1]=valeur1 [clé2]=valeur2 ...). Le premier mot de la liste détermine comment les autres mots sont interprétés ; toutes les affectations d'une liste doivent être du même type. Lors de l'utilisation de paires clé/valeur, les clés ne peuvent pas être absentes ou vides ; une valeur finale ab- sente est traitée comme une chaîne vide. Cette syntaxe est aussi acceptée par la commande interne declare. Les éléments individuels du tableau sont affectés en utilisant la syntaxe nom[indice]=valeur présentée ci-dessus. Lors de l’affectation vers un tableau indicé, si nom est indicé avec un nombre négatif, ce nombre est considéré comme ajouté à l'indice maximal de nom plus un, ainsi, un in- dice négatif compte à rebours depuis la fin du tableau et un indice -1 fait référence au dernier élément du tableau. L'opérateur += ajoutera à une variable tableau lors d'une affectation en utilisant la syntaxe d'affectation composée ; consultez PARAMÈTRES ci-dessous. Tout élément d'un tableau est accessible avec la notation ${nom[in- dice]}. Les accolades sont nécessaires pour éviter les conflits avec le développement des chemins. Si indice est @ ou *, le mot se développe en tous les éléments de nom. Ces deux indices ne diffèrent que lorsque le mot apparaît entre guillemets doubles. Si le mot est entre guillemets doubles, ${nom[*]} se développe en un seul mot contenant les valeurs de chaque élément du tableau séparées par le premier caractère de la va- riable spéciale IFS et ${nom[@]} développe chaque élément de nom en un mot distinct. Quand il n'y a pas d'élément dans le tableau, ${nom[@]} ne se développe en rien. Si le développement entre guillemets doubles survient à l'intérieur d'un mot, le développement du premier paramètre est accolé à la première partie du mot original et le développement du dernier paramètre est accolé à la dernière partie du mot original. Le comportement est analogue à celui des paramètres spéciaux * et @ (consultez Paramètres spéciaux ci-dessus). ${#nom[indice]} s'évalue en longueur de l'élément ${nom[indice]}. Si l'indice est * ou @, il s'éva- lue en nombre d'éléments dans le tableau. Si l'indice utilisé pour ré- férencer un élément de tableau indicé s'évalue en un nombre négatif, il est considéré comme ajouté à l'indice maximal du tableau plus un, ainsi, un indice négatif compte à rebours depuis la fin du tableau et un indice -1 fait référence au dernier élément du tableau. Le référencement d'une variable tableau sans indice est équivalent au référencement d'un tableau avec un indice de 0. Toute référence à une variable utilisant un indice valable est légale et bash créera un ta- bleau si nécessaire. Une variable tableau est considérée configurée si une valeur a été af- fectée à un indice. La chaîne NULL est une valeur possible. Les clefs (indices) d’un tableau peuvent être aussi bien obtenues que les valeurs. ${!nom[@]} et ${!nom[*]} se développent en indices assi- gnés dans la variable tableau nom. Le traitement entre guillemets doubles est similaire au développement des paramètres spéciaux @ et * entre guillemets doubles. La commande interne unset sert à détruire les tableaux. unset nom[in- dice] détruit l'élément de tableau d'indice indice, pour à la fois les tableaux indicés et les tableaux associatifs. Les indices négatifs des tableaux indicés sont traités comme décrit précédemment. Supprimer le dernier élément d'une variable tableau ne détruit pas la variable. un- set nom, où nom est un tableau, supprime le tableau entier. unset nom[indice], où indice est un * ou un @, se comporte différemment selon que nom est un tableau indicé ou associatif. Si nom est un tableau as- sociatif, la commande détruit l'élément avec un indice * ou @. Si nom est un tableau indicé, unset supprime tous les éléments mais ne sup- prime pas le tableau lui-même. Lors de l'utilisation d'un nom de variable avec un indice comme argu- ment d'une commande comme avec unset, sans utiliser la syntaxe des dé- veloppements de mots décrite précédemment, l'argument est sujet au dé- veloppement de chemin. Si le développement de chemin n'est pas sou- haité, l'argument doit être protégé. Les commandes internes declare, local et readonly acceptent toutes une option -a pour préciser un tableau indicé et une option -A pour préci- ser un tableau associatif. Si les deux options sont fournies, -A est prioritaire. La commande interne read accepte une option -a pour affec- ter une liste de mots lus depuis l'entrée standard dans un tableau. Les commandes internes set et declare affichent les valeurs d'un tableau d'une façon qui permet de les réutiliser pour des affectations. DÉVELOPPEMENTS Les développements sont appliqués à la ligne de commande après avoir été découpée en mots. Sept types de développements sont effectués : le développement des accolades, le développement du tilde, le développe- ment des paramètres et des variables, la substitution de commande, le développement arithmétique, le découpage en mots et le développement des chemins. L'ordre des développements est : développement des accolades ; dévelop- pement du tilde, des paramètres, des variables et arithmétique, et sub- stitution de commande (effectuée de la gauche vers la droite) ; décou- page en mots ; et développement des chemins. Sur les systèmes qui le permettent, un développement supplémentaire a lieu : la substitution de processus. Il est réalisé en même temps que le développement du tilde, des paramètres, des variables et arithmé- tique, et que la substitution de commande. Après la réalisation de ces développements, les caractères de protec- tion présents dans le mot original sont supprimés à moins qu'ils n'aient été protégés eux-mêmes (suppression des protections) Seuls le développement des accolades, le découpage en mots et le déve- loppement des chemins peuvent modifier le nombre de mots. Les autres développements transforment un mot unique en un autre mot unique. La seule exception à cette règle est le développement de « $@ » et « ${nom[@]} », ainsi que, dans la plupart des cas, $* et ${name[*]} comme expliqué précédemment (consultez PARAMÈTRES). Développement des accolades Le développement des accolades est un mécanisme permettant de produire des chaînes quelconques. Il est similaire au développement des chemins, mais les noms de fichiers produits n'existent pas nécessairement. Les motifs qui seront développés prennent la forme d'un préambule faculta- tif, suivi soit par une série de chaînes séparées par des virgules, soit par l'expression d'une série entre accolades, et suivi par un post-scriptum facultatif. Le préambule est inséré devant chacune des chaînes contenues entre les accolades et le post-scriptum est concaténé à la fin de chacune des chaînes résultantes, le développement se fai- sant de gauche à droite. Plusieurs développements d'accolades peuvent être imbriqués. Les résul- tats de chaque développement ne sont pas triés, l'ordre de gauche à droite est conservé. Par exemple a{d,c,b}e se développe en « ade ace abe ». Une expression de séquence est de la forme {x..y[..incr]}, où x et y sont soit des entiers, soit des lettres uniques, et incr, un incrément facultatif, est un entier. Lorsqu'il s'agit d'entiers, l'expression est remplacée par la liste des nombres entre x et y inclus. Les entiers fournis peuvent être préfixés par 0 pour forcer chaque terme à avoir la même longueur. Si x ou y commencent par un zéro, l'interpréteur es- saiera de forcer tous les termes créés à la même longueur, en ajoutant des zéros au besoin. S'il s'agit de lettres, l'expression se développe en l’ensemble des caractères situés entre x et y, inclus, d'un point de vue lexicographique en utilisant les paramètres régionaux par défaut de C. Remarquez que x et y doivent être du même type (entier ou lettre). Si l'incrément est fourni, il est utilisé comme différence entre chaque terme. L'incrément par défaut est 1 ou -1 suivant les valeurs de x et y. Le développement des accolades est effectué avant tout autre développe- ment et tous les caractères ayant une signification spéciale pour les autres développements 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. Un développement d'accolades correctement formé doit contenir des acco- lades ouvrante et fermante non protégées et au moins une virgule non protégée ou une expression de série correcte. Tout développement d'ac- colades incorrectement formé est laissé inchangé. Un { ou un , peuvent être protégés par une contre-oblique pour éviter d'être considérés comme partie d'une expression entre accolades. Pour éviter tout conflit avec le développement des paramètres, la chaîne ${ n'est pas considérée comme éligible au développement des accolades, et empêche le développe- ment d'accolades jusqu'au } fermant. Cette construction est typiquement utilisée comme raccourci lorsque le préfixe commun aux chaînes à engendrer est plus long que dans les exemples précédents : mkdir /usr/local/src/bash/{old,new,dist,bugs} 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 historiques de sh. sh n'effectue aucun traitement sur les accolades ouvrantes et fermantes lorsqu'elles apparaissent dans un mot et les laisse inchangées. Bash supprime les accolades dans les mots, après développement. Par exemple, si le mot file{1,2} est fourni à sh, il reste inchangé en sortie. En revanche, il est transformé en file1 file2 par bash. Si une compatibilité stricte avec sh est nécessaire, lancez bash avec l'option +B ou désactivez le développement des acco- lades avec l'option +B de la commande set (consultez COMMANDES INTERNES DE L'INTERPRÉTEUR ci-dessous). Développement du tilde Si un mot commence par un caractère tilde (« ~ ») non protégé, tous les caractères précédant la première barre oblique non protégée (voire tous les caractères s'il n'y a pas de barre oblique non protégée), sont considérés comme un préfixe tilde. Si aucun caractère du préfixe tilde n'est protégé, les caractères suivant le tilde sont traités comme un identifiant de connexion possible. Si cet identifiant de connexion est la chaîne NULL, le tilde est remplacé par la valeur du paramètre d'in- terpréteur HOME. Si HOME n'existe pas, le répertoire d'accueil de l'utilisateur exécutant l'interpréteur est utilisé à la place. Sinon le préfixe tilde est remplacé par le répertoire d'accueil associé à l'identifiant de connexion indiqué. Si le préfixe tilde est « ~+ », la valeur de la variable de l'interpré- teur PWD le remplace. Si le préfixe tilde est « ~- », la valeur de la variable de l'interpréteur OLDPWD, si existante, lui est substituée. Si les caractères à la suite du tilde dans le préfixe tilde représentent un nombre N préfixé facultativement par un « + » ou un « - » le préfixe tilde est remplacé par l'élément correspondant de la pile de réper- toires telle qu'il serait affiché par la commande interne dirs appelée avec le préfixe tilde en argument. Si les caractères à la suite du tilde dans le préfixe tilde représentent un nombre sans un « + » ou « - » en tête, on suppose qu'il s'agit de « + ». Si l'identifiant de connexion est incorrect ou si le développement du tilde échoue, le mot est inchangé. Chaque affectation de variable vérifie immédiatement la présence de préfixes tilde non protégés suivant un : ou le premier =. Dans ces cas, le développement des tildes est aussi effectué. On peut donc utiliser des noms de fichiers avec des tildes dans des affectations de PATH, MAILPATH et CDPATH et l'interpréteur affectera la valeur développée. Bash effectue aussi le développement des tildes sur les mots satisfai- sant les conditions d'affectations de variable (comme décrit précédem- ment dans PARAMÈTRES) quand elles apparaissent comme arguments de com- mandes simples. Bash ne le fait pas en mode POSIX sauf pour les com- mandes de déclaration listées ci-dessus. Développement des paramètres Le caractère « $ » permet d'introduire le développement des paramètres, la substitution de commande ou le développement arithmétique. Le nom du paramètre ou du symbole à développer peut être encadré par des acco- lades facultatives mais permettant d'éviter le développement de la va- riable à partir de caractères la suivant immédiatement et qui pour- raient être considérés comme appartenant à son nom. Lorsque les accolades sont utilisées, l'accolade de fin correspondante est le premier caractère « } » ni protégé par une contre-oblique, ni inclus dans une chaîne protégée, un développement arithmétique, une substitution de commande ou un développement des paramètres. ${paramètre} est remplacé par la valeur du paramètre. Les accolades sont né- cessaires quand le paramètre est un paramètre positionnel ayant plusieurs chiffres, ou si le paramètre est suivi de caractères n'appartenant pas à son nom. Le paramètre est un paramètre d’in- terpréteur (comme décrit précédemment dans PARAMÈTRES) ou une référence de tableau (Tableaux). Si le premier caractère du paramètre est un point d'exclamation (!), et si le paramètre n'est pas un nameref, il introduit un niveau d'indirec- tion de variable. Bash utilise la valeur formée par le développement du reste du paramètre en tant que nouveau paramètre. Cette variable est alors développée et la valeur utilisée pour le reste du développement plutôt que le développement du paramètre original. On appelle ce méca- nisme le développement indirect. La valeur est sujette au développement de tildes et de paramètres, à la substitution de commande ou au déve- loppement arithmétique. Si le paramètre est un nameref, le développe- ment porte sur le nom du paramètre référencé par le paramètre plutôt que sur le développement indirecte complet. Les exceptions à cela sont les développements de ${!préfixe*} et de ${!nom[@]} décrits ci-dessous. Le point d'exclamation doit immédiatement suivre l'accolade ouvrante afin d'introduire l'indirection. Dans chacun des cas ci-dessous, le mot est soumis au développement de tilde, au développement des paramètres, à la substitution de commande et au développement arithmétique. Quand il n'effectue pas de développement de sous-chaîne, en utilisant les formes documentées ci-dessous (par exemple :-), bash teste si le paramètre est inexistant ou NULL. L'absence de deux-points induit un test sur la seule inexistence du paramètre. ${paramètre:-mot} Utilisation de valeur par défaut. Si le paramètre est inexistant ou NULL, le développement du mot est substitué. Sinon, c'est la valeur du paramètre qui est substituée. ${paramètre:=mot} Affectation de valeur par défaut. Si le paramètre est inexistant ou NULL, le développement du mot lui est affecté. La valeur du paramètre est alors substitué. Les paramètres positionnels et spéciaux ne peuvent pas être affectés de cette façon. ${paramètre:?mot} Affichage d'erreur si NULL ou inexistant. Si le paramètre est inexistant ou NULL, le développement du mot (ou un message ap- proprié si aucun mot n'est fourni) est affiché sur la sortie d'erreur standard et l'interpréteur termine, s'il n'est pas in- teractif. Sinon, la valeur du paramètre est substituée. ${paramètre:+mot} Utilisation de valeur alternative. Si le paramètre est NULL ou inexistant, rien n'est substitué. Sinon le développement du mot est substitué. ${paramètre:début} ${paramètre:début:longueur} Développement des sous-chaînes. Se développe pour fournir la sous-chaîne de longueur indiquée (en caractère) commençant au début. Si le paramètre est @ ou *, un tableau indicé par @ ou *, ou un nom de tableau associatif, le résultat diffère comme dé- crit ci-dessous. Si la longueur est omise, fournit la sous-chaîne commençant au caractère indiqué par début et s'éten- dant jusqu'à la fin de la valeur. La longueur et le début sont des expressions arithmétiques (consultez ÉVALUATION ARITHMÉTIQUE ci-dessous). Si le début est négatif, sa valeur est considérée à partir de la fin du contenu du paramètre. Si longueur est négatif, sa valeur est considérée comme une position en caractère à partir de la fin de la valeur du paramètre plutôt que comme un nombre de ca- ractères, et le développement est constitué des caractères entre le début et cette position. Remarquez que les positions néga- tives doivent être séparées des deux-points par au moins une es- pace pour éviter d’être confondues avec le développement de :-. Si le paramètre est @ ou *, le résultat correspond à longueurpa- ramètres positionnels commençant au début. Une valeur négative de début est considérée relative au plus grand paramètre posi- tionnel plus un (ainsi un indice -1 fait référence au dernier paramètre positionnel). C’est une erreur de développement si longueur est évaluée en nombre négatif. Si le paramètre est un nom de tableau indicé par @ ou *, le ré- sultat est les longueur éléments du tableau commençant à ${pa- ramètre[début]}. Une valeur négative de début est prise relati- vement à la valeur maximale de l'indice du tableau considéré plus un. C’est une erreur de développement si longueur est éva- luée en nombre négatif. Le développement de sous-chaîne appliqué à un tableau associatif produit des résultats non définis. L'indexation des sous-chaînes commence à zéro, sauf pour les pa- ramètres positionnels pour lesquels l'indexation commence à 1 par défaut. Si début est 0, et que les paramètres positionnels sont utilisés, la liste est préfixée par $0. ${!préfixe*} ${!préfixe@} Noms correspondant au préfixe. Se développe en noms des va- riables dont les noms commencent par préfixe, séparés par le premier caractère de la variable spéciale IFS. Si @ est utilisé et que le développement apparaît entre guillemets doubles, chaque nom de variable se développe séparément. ${!nom[@]} ${!nom[*]} Liste des clefs du tableau. Si nom est une variable de type ta- bleau, elle se développe en liste des indices (clefs) du tableau affecté à nom. Si nom n'est pas un tableau, se développe en 0 si nom existe et en NULL sinon. Quand @ est utilisé et que le déve- loppement apparaît entre guillemets doubles, chaque clef se dé- veloppe en un mot séparé. ${#paramètre} Longueur du paramètre. Est remplacé par la longueur, en carac- tères, de la valeur du paramètre. Si le paramètre est * ou @, la valeur est le nombre de paramètres positionnels. Si le paramètre est un nom de tableau indicé par * ou @, la valeur donnée est le nombre d'éléments du tableau. Si le paramètre est un nom de ta- bleau indicé par un nombre négatif, ce nombre est considéré comme ajouté à l'indice maximal de paramètre plus un (ainsi un indice négatif compte à rebours depuis la fin du tableau et un indice -1 fait référence au dernier élément). ${paramètre#mot} ${paramètre##mot} Retrait du motif correspondant au préfixe. Le mot est développé pour fournir un motif, comme dans le développement des chemins et mis en correspondance avec la valeur développée du paramètre avec les règles décrites dans Motifs génériques ci-dessous. Si le motif correspond au début de la valeur du paramètre, alors le développement prend la valeur développée du paramètre après sup- pression du plus court (cas « # ») ou du plus long (cas « ## ») motif correspondant. Si le paramètre est @ ou *, l'opération de suppression de motif est appliquée à chaque paramètre position- nel tour à tour et le développement est la liste résultante. Si le paramètre est une variable tableau indicée par @ ou *, l'opé- ration de suppression de motif est appliquée à chaque élément du tableau tour à tour et le développement est la liste résultante. ${paramètre%mot} ${paramètre%%mot} Retrait du motif correspondant au suffixe. Le mot est développé pour fournir un motif, comme dans le développement des chemins et mis en correspondance avec la valeur développée du paramètre avec les règles décrites dans Motifs génériques ci-dessous. Si le motif correspond à une portion finale de la valeur développée du paramètre, alors le développement prend la valeur développée du paramètre après suppression du plus court (cas « % ») ou du plus long (cas « %% ») motif correspondant. Si le paramètre est @ ou *, l'opération de suppression de motif est appliquée à chaque paramètre positionnel tour à tour et le développement est la liste résultante. Si le paramètre est une variable tableau indicée par @ ou *, l'opération de suppression de motif est ap- pliquée à chaque élément du tableau tour à tour et le développe- ment est la liste résultante. ${paramètre/motif/chaîne} ${paramètre//motif/chaîne} ${paramètre/#motif/chaîne} ${paramètre/%motif/chaîne} Substitution de motif. Le motif est développé produire un motif comme dans le développement des chemins. Le paramètre est déve- loppé et la plus longue portion correspondant au motif est rem- placée par la chaîne. La chaîne est sujette au développement du tilde, des paramètres et des variables, au développement arith- métique, à la substitution de commande et de processus, et à la suppression des protections. La mise en correspondance est réa- lisée en utilisant les règles décrites dans Motifs génériques ci-dessous. Dans la première forme ci-dessus, seule la première correspondance est remplacée. S'il y a deux barres obliques sé- parant le paramètre et le motif, (la seconde forme ci-dessus) toutes les correspondances au motif sont remplacées par la chaîne. Si le motif est précédé par # (la troisième forme ci-dessus), il doit correspondre au début de la valeur dévelop- pée du paramètre. Si le motif est précédé par % (la quatrième forme ci-dessus), il doit correspondre à la fin de la valeur du développement du paramètre. Si la chaîne est NULL, les portions correspondant au motif sont supprimées et le / suivant le motif peut être omis. Si l'option d'interpréteur patsub_replacement est activée en utilisant shopt, toutes les instances non protégées de & dans la chaîne sont remplacées par la partie correspondante du motif. La protection d'une partie de la chaîne empêche les remplace- ments dans le développement de la partie protégée, y compris le remplacement des chaînes stockées dans les variables de l'inter- préteur. La contre-oblique protégera & dans la chaîne ; la contre-oblique est supprimée afin de permettre un & littéral dans la chaîne de remplacement. La contre-oblique peut aussi être utilisée pour protéger une contre-oblique ; \\ résulte en une contre-oblique littérale dans le remplacement. Les utilisa- teurs doivent faire attention si la chaîne est protégée entre des guillemets doubles pour éviter des interactions non souhai- tées entre la contre-oblique et les guillemets doubles, dans la mesure où la contre-oblique a une signification particulière avec des guillemets doubles. La substitution de motif réalise la vérification de la présence de & non protégée après le dévelop- pement de chaîne ; les développeurs de programmes d’interpréteur doivent protéger toutes les occurrences de & qu'ils souhaitent être traitées littéralement dans le remplacement et s'assurer que toutes les instances de & qu'ils souhaitent voir remplacées ne soient pas protégées. Si l'option d'interpréteur nocasematch est activée, la mise en correspondance est réalisée sans tenir compte de la casse des caractères alphabétiques. Si le paramètre est @ ou *, la substi- tution est appliquée à chaque paramètre positionnel tour à tour et le développement est la liste résultante. Si le paramètre est une variable tableau indicée par @ ou *, l'opération de substi- tution est appliquée à chaque élément du tableau tour à tour et le développement est la liste résultante. ${paramètre^motif} ${paramètre^^motif} ${paramètre,motif} ${paramètre,,motif} Modification de la casse. Ce développement modifie la casse des caractères alphabétiques du paramètre. Le motif est développé pour fournir un motif, comme dans le développement des chemins. Chaque caractère de la valeur développée du paramètre est testé par rapport au motif et, en cas de correspondance, sa casse est convertie. Le motif ne devrait pas essayer de correspondre à plus d’un caractère. L'opérateur ^ convertit les lettre minus- cules correspondant à ce motif en majuscules ; l'opérateur , convertit les lettre majuscules correspondant à ce motif en mi- nuscules. Les développements ^^ et ,, convertissent tous les ca- ractères correspondant à leur valeur développée ; les développe- ments ^ et , convertissent seulement le premier caractère de la valeur développée correspondant. Si motif est omis, il est traité comme un ?, ce qui correspond à n'importe quel caractère. Si le paramètre est @ ou *, la modification de casse s'applique à chaque paramètre positionnel tour à tour et le développement est la liste résultante. Si le paramètre est une variable ta- bleau indicée par @ ou *, la modification de casse s'applique à chaque élément du tableau tour à tour et le développement est la liste résultante. ${paramètre@opérateur} Transformation de paramètre. Le développement est soit une transformation de la valeur du paramètre ou des informations sur paramètre lui-même, selon la valeur de opérateur. Chaque opéra- teur est une lettre unique : U Le développement est une chaîne qui est la valeur de l'argument avec des caractères alphabétiques en minuscule convertis en majuscule. u Le développement est une chaîne qui est la valeur de l'argument avec son premier caractère converti en majus- cule, si c'est un caractère alphabétique. L Le développement est une chaîne qui est la valeur de l'argument avec les caractères alphabétiques en majuscule convertis en minuscule. Q Le développement est une chaîne qui est la valeur de l'argument protégée dans un format réutilisable en entrée de l'interpréteur. E Le développement est une chaîne qui est la valeur du pa- ramètre avec des suites de caractères de protection par contre-oblique développée comme avec le mécanisme de pro- tection $'...'. P Le développement est une chaîne qui est le résultat du développement de lavaleur du paramètre comme s'il s'agis- sait d'une chaîne d'invite (consultez INVITES ci-des- sous). A Le développement est une chaîne sous la forme d'une af- fectation ou d'une commande declare qui, lorsqu'elle est évaluée, recréera paramètre avec sa valeur et ses attri- buts. K Produit une version potentiellement protégée de la valeur de l'argument, sauf qu'il affiche les valeurs des ta- bleaux indicés et associatifs comme une séquence de paires clé/valeur protégées (consultez Tableaux ci-des- sus). a Le développement est une chaîne consistant en valeurs d'indicateur représentant les attributs de paramètre. k Comme la transformation K, mais développe les clés et les valeurs des tableaux indicés et associatifs pour séparer les mots après le découpage en mots. Si le paramètre est @ ou *, l'opération est appliquée à chaque paramètre positionnel tour à tour et le développement est la liste résultante. Si le paramètre est une variable tableau indi- cée par @ ou *, l'opération est appliquée à chaque élément du tableau tour à tour et le développement est la liste résultante. Le résultat du développement est sujet au découpage en mots et au développement des chemins comme décrit ci-dessous. Substitution de commande La substitution de commande permet de remplacer le nom d'une commande par son résultat. Il en existe deux formes : $(commande) ou `commande` Bash effectue le développement en exécutant la commande dans un envi- ronnement de sous-interpréteur et en remplaçant la substitution de com- mande par sa sortie standard dont les éventuels sauts de lignes finaux sont supprimés. Les changements de ligne internes ne sont pas supprimés mais peuvent disparaître lors du découpage en mots. La substitution de commande $(cat fichier) peut être remplacée par l'équivalent plus ra- pide $(< fichier). Quand l'ancienne forme de substitution avec les accents graves « ` » est utilisée, le caractère contre-oblique garde sa signification propre sauf lorsqu'il est suivi de $, ` ou \. Le premier accent grave non pro- tégé par une contre-oblique termine la substitution de commande. Quand on utilise la forme $(commande), tous les caractères entre parenthèses constituent la commande ; aucun n'est traité spécifiquement. Les substitutions de commande peuvent être imbriquées. Pour imbriquer en utilisant la forme à accents graves, il faut protéger les accents graves internes avec des contre-obliques. Si la substitution apparaît entre guillemets doubles, le découpage en mots et le développement des chemins ne sont pas effectués sur ses ré- sultats. Développement arithmétique Le développement arithmétique permet de remplacer une expression arith- métique par le résultat de son évaluation. Le format du développement arithmétique est : $((expression)) L'ancien format $[expression] est obsolète et sera supprimé dans les prochaines versions de bash. L'expression est traitée comme si elle était entre guillemets doubles, mais des caractères guillemet double dans l'expression ne sont pas traités spécifiquement et sont supprimés. Tous les lexèmes dans l'ex- pression sont sujets au développement des paramètres et des variables, à la substitution de commande et à la suppression des protections. Le résultat est traité comme l’expression arithmétique à évaluer. Les dé- veloppements arithmétiques peuvent être imbriqués. L'évaluation est effectuée en suivant les règles décrites ci-dessous dans ÉVALUATION ARITHMÉTIQUE. Si l'expression est incorrecte, bash af- fiche un message indiquant l'échec et aucune substitution n'a lieu. Substitution de processus La substitution de processus permet à une entrée ou une sortie d'un processus d’être référencée en utilisant un nom de fichier. Elle prend la forme <(liste) ou >(liste). La liste de processus est exécutée de façon asynchrone est son entrée ou sortie apparaît comme un nom de fi- chier. Le nom de ce fichier est passé en argument à la commande ac- tuelle comme résultat de ce développement. Si on utilise la forme >(liste), le fichier passé en argument devra être lu pour obtenir la sortie de la liste. La substitution de processus est prise en charge sur les systèmes acceptant le mécanisme des tubes nommés (FIFO) ou la méthode /dev/fd de nommage de fichiers ouverts. Sur les systèmes qui le permettent, la substitution de processus est effectuée simultanément au développement des paramètres et variables, à la substitution de commande et au développement arithmétique. Découpage en mots Les résultats du développement des paramètres, de la substitution de commande et du développement arithmétique qui ne se trouvent pas entre guillemets doubles sont analysés par l'interpréteur afin d'appliquer le découpage en mots. L'interpréteur considère chaque caractère du paramètre IFS comme un dé- limiteur et découpe le résultat des autres développements en mots uti- lisant ces caractères comme terminaisons de champ. Si IFS est inexis- tante ou si sa valeur est exactement <espace><tab><change- ment_de_ligne>, la valeur par défaut, alors les suites de caractères <espace>, <tab> et <changement_de_ligne> au début ou à la fin du résul- tat des développements précédents sont ignorés, et toute suite de ca- ractères de IFS ni au début ni à la fin sert à délimiter les mots. Si IFS a une valeur autre que celle par défaut, alors les suites de carac- tères blancs espace et tabulation et changement_de_ligne sont ignorées en début et fin de mot, à condition que ces caractères blancs se trouvent dans la valeur de IFS (un caractère blanc de IFS). Tout carac- tère de IFS qui n'est pas un caractère blanc, se trouvant à côté d'un caractère blanc de IFS, délimite un champ. Une suite de caractères blancs de IFS est également traitée comme un délimiteur. Si la valeur de IFS est NULL, aucun découpage en mots n'a lieu. Les arguments NULL explicites ("" ou '') sont conservés et passés à des commandes comme chaînes vides. Les arguments NULL implicites non proté- gés, résultant du développement des paramètres qui n'ont pas de va- leurs, sont supprimés. Si un paramètre sans valeur est développé entre guillemets doubles, le résultat est un argument NULL qui est conservé et passé à une commande comme une chaîne vide. Quand un argument NULL protégé apparaît comme appartenant à un mot dont l'expansion n'est pas NULL, l'argument NULL est supprimé. C'est-à-dire que le mot -d'' de- vient -d après le découpage en mots et le retrait de l'argument NULL. Remarquez que si aucun développement n'a lieu, le découpage en mots n'est pas effectué. Développement des chemins Après le découpage en mots, à moins que l'option -f soit présente, bash recherche dans chaque mot les caractères *, ? et [. Si l'un d'eux appa- raît et n'est pas protégé, le mot est considéré comme un motif et rem- placé par une liste, classée par ordre alphabétique, de noms de fi- chiers correspondant à ce motif (consultez Motifs génériques ci-des- sous). Si aucun nom de fichier ne correspond et si l'option d'interpré- teur nullglob n'est pas activée, le mot reste inchangé. Si l'option nullglob existe et si aucune correspondance n'est trouvée, le mot est supprimé. Si l'option d'interpréteur failglob existe et si aucune cor- respondance n'est trouvée, un message d'erreur est affiché et la com- mande n'est pas exécutée. Si l'option d'interpréteur nocaseglob est ac- tivée, la correspondance est effectuée sans tenir compte de la casse des caractères alphabétiques. Remarquez que lorsque des expressions d’intervalle comme [a-z] (voir ci-dessous) sont utilisées, les lettres de l'autre casse peuvent être incluses, selon le paramétrage de LC_COL- LATE. Quand un motif est utilisé pour le développement des chemins, le caractère « . » au début d'un nom ou immédiatement à la suite d'une barre oblique doit être explicitement mis en correspondance, à moins que l'option d'interpréteur dotglob n'existe. Pour être mis en corres- pondance avec les noms de fichier « . » et « .. », le motif doit débu- ter par un « . (par exemple, « .? »), même si l'option dotglob existe. Si l'option d'interpréteur globskipdots est activée, les noms de fi- chier « . » et « .. » ne sont jamais mis en correspondance, même si le motif débute par un « .. Quand il ne s'agit pas de correspondance avec des chemins, le caractère « . » n'est pas traité spécifiquement. Lors de la correspondance avec un chemin, le caractère barre oblique doit toujours être mis en correspondance explicitement par une barre oblique dans le motif, mais dans les autres contextes de correspondance, il peut être mis en correspondance par un caractère de motif spécial comme décrit ci-dessous dans Motifs génériques. Voyez la description de la commande shopt dans COMMANDES INTERNES DE L'INTERPRÉTEUR pour une des- cription des options d'interpréteur nocaseglob, nullglob, globskipdots, failglob et dotglob. La variable de l'interpréteur GLOBIGNORE peut servir à restreindre l'ensemble des noms de fichiers correspondant à un motif. Si GLOBIGNORE existe, chaque nom de fichier qui correspond aussi à un motif de GLOBI- GNORE est supprimé de la liste des correspondances. Si l'option nocase- glob existe, la mise en correspondance avec les motifs dans GLOBIGNORE est réalisée sans tenir compte de la casse. Les noms de fichiers « . » et « .. » sont toujours ignorés quand GLOBIGNORE existe et n'est pas NULL. Toutefois, configurer GLOBIGNORE avec une valeur non NULL a pour effet d'activer l'option d'interpréteur dotglob, ainsi tous les autres noms de fichiers commençant par « . » correspondront. Pour obtenir l'ancien comportement ignorant les noms commençant par « . », placez « .* » dans l'un des motifs de GLOBIGNORE. L'option dotglob est désac- tivée si la variable GLOBIGNORE est inexistante. La correspondances de motifs respecte la configuration de l'option d'interpréteur extglob. Motifs génériques Tout caractère apparaissant dans un motif, hormis les caractères spé- ciaux décrits ci-dessous, correspond à lui-même. Le caractère NUL ne peut pas se trouver dans un motif. Une contre-oblique protège le carac- tère qui la suit ; la contre-oblique de protection est supprimée lors de la recherche de correspondance. Les caractères spéciaux de motifs doivent être protégés s'ils sont destinés à une correspondance litté- rale. Les caractères spéciaux ont les significations suivantes : * Correspond à n'importe quelle chaîne, y compris la chaîne NULL. Si l'option globstar de l'interpréteur est activée, et que * est utilisé dans un contexte de développement des chemins, deux * adjacents sont utilisés pour un seul motif correspondant à tous les fichiers et zéro ou plus de répertoires et sous-répertoires. Lorsqu'il sont suivis de /, deux * adjacents correspondront seulement aux ré- pertoires et sous-répertoires. ? Correspond à n'importe quel caractère. [...] Correspond à tout caractère entre les crochets. Un couple de caractères séparés par un trait d'union indique une expression d’intervalle ; tout caractère qui correspond à n'importe quel caractère situé entre les deux bornes in- cluses, en utilisant les suites de collations et le jeu de caractères des paramètres linguistiques régionaux ac- tuels, est capturé. Si le premier caractère suivant le [ est un ! ou un ^ alors la correspondance se fait sur tous les caractères hors intervalle. L'ordre de tri des carac- tères dans les expressions d’intervalle et les caractères inclus dans l'intervalle sont déterminés par les pa- ramètres linguistiques régionaux actuels et par les va- leurs des variables de l'interpréteur LC_COLLATE et LC_ALL si existantes. Pour obtenir l’interprétation tra- ditionnelle des expressions d’intervalle, où [a-d] est équivalent à [abcd], configurez la valeur de la variable d’interpréteur LC_ALL à C ou activez l’option d’interpré- teur globasciiranges. Un - peut faire partie du motif de correspondance à condition d’être le premier ou le der- nier caractère de l'ensemble. Un ] peut faire partie du motif de correspondance à condition d’être le premier ca- ractère de l'ensemble. Entre [ et ], on peut indiquer une classe de caractère en utilisant la syntaxe [:classe:], où classe est l'une des classes suivantes, définies dans la norme POSIX : alnum alpha ascii blank cntrl digit graph lower print punct space upper word xdigit Une classe correspond à n'importe quel caractère qui s'y trouve. La classe de caractères word correspond aux lettres, aux chiffres et au caractère souligné « _ ». Entre [ et ], on peut indiquer une classe d'équivalence en utilisant la syntaxe [=c=] qui correspond à n'importe quel caractère ayant le même poids de collation (comme indiqué par les paramètres linguistiques régionaux ac- tuels) que le caractère c. Entre [ et ], la syntaxe [.symbole.] correspond au sym- bole de collation symbole. Si l'option extglob d'interpréteur est activée par la commande interne shopt l'interpréteur reconnaît plusieurs opérateurs de correspondance étendue. Dans la description suivante, une liste-motif est une liste d'un ou plusieurs motifs séparés par des |. Les motifs composés sont formés en utilisant un ou plusieurs sous-motifs comme suit : ?(liste-motif) Correspond à zéro ou une occurrence des motifs indiqués. *(liste-motif) Correspond à zéro ou plusieurs occurrences des motifs in- diqués. +(liste-motif) Correspond à une ou plusieurs occurrences des motifs in- diqués. @(liste-motif) Correspond à une occurrence exactement des motifs indi- qués. !(liste-motif) Correspond à tout sauf l'un des motifs indiqués. L'option extglob d'interpréteur modifie le comportement de l'analyseur dans la mesure où les parenthèses sont normalement traitées comme des opérateurs avec une signification syntaxique. Pour être sûr que les mo- tifs développés mis en correspondance sont analysés correctement, il faut s'assurer que extglob est activé avant d'analyser les construc- tions contenant les motifs, y compris les fonctions de l'interpréteur et les substitutions de commande. Lors de la correspondance avec des noms de fichier, l'option de l'in- terpréteur dotglob détermine l'ensemble de noms de fichiers à tester : quand dotglob est activé, l'ensemble de noms de fichier inclut tous les fichiers commençant par « . », mais « . » et « .. » doivent être mis en correspondance avec un motif ou un sous-motif qui commence par un point ; quand dotglob est désactivé, l'ensemble ne comprend pas tous les fichiers commençant par « . », à moins que le motif ou le sous-mo- tif débute par un « . ». Comme précédemment, « . » tout seul a une si- gnification particulière lors de la correspondance avec des noms de fi- chiers. La mise en correspondance de motifs étendus complexes avec de longues chaînes est lente surtout quand les motifs contiennent des alternances et les chaînes contiennent plusieurs correspondances. L'utilisation de correspondances séparées avec des chaînes plus courtes ou en utilisant des tableaux de chaînes à la place d'une longue chaîne unique peut être plus court. Suppression des protections Après les développements précédents, toutes les occurrences non proté- gées des caractères \, ' et " qui ne résultent pas d'un des développe- ments ci-dessus sont supprimées. REDIRECTIONS Avant qu'une commande ne soit exécutée, il est possible de rediriger son entrée ou sa sortie en utilisant une notation spéciale prise en compte par l'interpréteur. La redirection permet aux descripteurs de fichier d’être dupliqués, ouverts, fermés, de faire référence à d’autres fichiers et peut modifier les fichiers lus et écrits par la commande. Les redirections permettent également de modifier les des- cripteurs de fichier dans l'environnement d’exécution actuel de l'in- terpréteur. Les opérateurs de redirection suivants peuvent précéder ou apparaître n'importe où dans une commande simple ou suivre une com- mande. Les redirections sont traitées dans leur ordre d'apparition, de gauche à droite. Toutes les redirections pouvant être précédées par un numéro de des- cripteur de fichier peuvent aussi être précédées par un mot de la forme {nom_de_variable}. Dans ce cas, pour chaque opérateur de redirection à part >&- et <&-, l'interpréteur de commande allouera un descripteur de fichier supérieur ou égal à 10 et l'affectera à nom_de_variable. Si >&- ou <&- sont précédés de {nom_de_variable}, la valeur de nom_de_variable définit le descripteur de fichier à fermer. Si {nom_de_variable} est fournie, la redirection persiste au-delà de la portée de la commande, permettant au programmeur de l'interpréteur de gérer manuellement la durée de vie du descripteur de fichier. L'option de l'interpréteur var- redir_close gère ce comportement. 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 <, la redirection se rapporte à l'entrée standard (descripteur de fi- chier 0). Si le premier caractère de l'opérateur de redirection est >, la redirection se rapporte à la sortie standard (descripteur de fichier 1). Le mot qui suit l'opérateur de redirection dans les descriptions sui- vantes, à moins qu'il en soit fait état autrement, est soumis au déve- loppement des accolades, du tilde, des paramètres et des variables, à la substitution de commande, au développement arithmétique, à la sup- pression des protections, au développement des chemins et au découpage en mots. S'il se développe en plusieurs mots, bash signale une erreur. Remarquez que l'ordre des redirections est important. Par exemple, la commande ls > liste_répertoires 2>&1 redirige à la fois la sortie standard et la sortie d'erreur standard vers le fichier liste_répertoires, alors que la commande ls 2>&1 > liste_répertoires ne redirige que la sortie standard vers le fichier liste_répertoires, car la sortie d'erreur standard a été dupliquée de la sortie standard avant que celle-ci ne soit redirigée vers liste_répertoires. Bash gèrent plusieurs noms de fichier spécifiquement quand ils sont utilisés dans des redirections. Si le système d'exploitation sur lequel bash s'exécute fournit ces fichiers spéciaux, bash les utilise ; sinon, il les émule en interne avec le comportement décrit ci-dessous. /dev/fd/df Si df est un entier correct, le descripteur de fichier df est dupliqué. /dev/stdin Le descripteur de fichier 0 est dupliqué. /dev/stdout Le descripteur de fichier 1 est dupliqué. /dev/stderr Le descripteur de fichier 2 est dupliqué. /dev/tcp/hôte/port Si hôte est un nom de machine ou une adresse Internet corrects et si port est un numéro de port entier ou un nom de service, bash tentera d'ouvrir la socket TCP cor- respondante. /dev/udp/hôte/port Si hôte est un nom de machine ou une adresse Internet corrects et si port est un numéro de port entier ou un nom de service, bash tentera d'ouvrir la socket UDP cor- respondante. Un échec à l'ouverture ou à la création de fichier conduit à l'échec de la redirection. Les redirections utilisant des descripteurs de fichier supérieurs à 9 doivent être utilisées avec précaution, car des conflits peuvent surve- nir avec les descripteurs de fichier utilisés en interne par l'inter- préteur. Notez que la commande interne exec peut faire appliquer les redirec- tions à l'interpréteur de commande en cours. Redirection d'entrée Une redirection d'entrée conduit à l'ouverture en lecture avec le des- cripteur de fichier numéro n du fichier dont le nom résulte du dévelop- pement du mot ou en tant qu'entrée standard (descripteur de fichier 0) si n n'est pas indiqué. Le format général des redirections d'entrée est : [n]<mot Redirection de sortie Une redirection de sortie conduit à l'ouverture en écriture du fichier dont le nom résulte du développement du mot avec comme descripteur de fichier n ou en tant que sortie standard (descripteur de fichier 1) si n n'est pas indiqué. Si le fichier n'existe pas, il est créé. S'il existait déjà, sa taille est réduite à zéro. Le format général des redirections de sortie est le suivant : [n]>mot Si l'opérateur de redirection est > et si l'option noclobber de la com- mande interne set est activée, la redirection échouera si le fichier dont le nom résulte du développement du mot existe et est un fichier normal. Si l'opérateur de redirection est >| ou l'opérateur > avec l'option noclobber de la commande interne set n'est pas activée, la re- direction sera tentée même si le fichier dont le nom résulte du déve- loppement du mot existe. Ajout d'une sortie redirigée La redirection de la sortie de cette façon conduit à l'ouverture du fi- chier dont le nom résulte du développement du mot pour ajouter au des- cripteur de fichier n ou à la sortie standard (descripteur de fichier 1) si n n'est pas indiqué. Si le fichier n'existe pas, il est créé. Le format général pour les sorties avec ajout est : [n]>>mot Redirection de la sortie standard et de la sortie d'erreur standard Cette construction permet la redirection simultanée de la sortie stan- dard (descripteur 1) et de la sortie d'erreur standard (descripteur 2), dans un fichier dont le nom est le résultat du développement du mot. Il y a deux formes pour rediriger les sortie standard et sortie d'er- reur standard : &>mot et >&mot La première des deux formes est préférée. C'est sémantiquement équi- valent à >mot 2>&1 En utilisant la deuxième forme, mot ne peut pas être développé en nombre ou -. Si c’est le cas, les autres opérateurs de redirection s’appliquent (consultez Dédoublement de descripteurs de fichier ci-des- sous) pour des raisons de compatibilité. Ajout de la sortie standard et de la sortie d'erreur standard Cette construction permet l'ajout simultané de la sortie standard (des- cripteur 1) et de la sortie d'erreur standard (descripteur 2), dans un fichier dont le nom est le résultat du développement du mot. La forme pour ajouter les sortie standard et sortie d'erreur standard est : &>>mot C'est sémantiquement équivalent à >>mot 2>&1 (consultez Dédoublement de descripteurs de fichier ci-dessous). Document en ligne Ce type de redirection commande à l'interpréteur de lire son entrée de la source actuelle jusqu'à ce qu'il voit une ligne contenant seulement le délimiteur prévu (sans blancs finaux). Toutes les lignes lues jusqu'à ce point sont ensuite utilisées comme entrée standard (ou comme descripteur de fichier n, si n est spécifié) pour une commande. Le format des documents en ligne est le suivant : [n]<<[-]mot document_en_ligne délimiteur Aucun développement des paramètres ou des variables, ni substitution de commande, ni développement arithmétique ou des chemins n’est effectué sur le mot. Si une partie du mot est protégée, le délimiteur est le ré- sultat de la suppression des protections sur mot et les lignes du docu- ment_en_ligne ne sont pas développées. Si mot n'est pas protégé, toutes les lignes du document_en_ligne sont soumises au développement des pa- ramètres, à la substitution de commande et au développement arithmé- tique, la suite de caractères \<changement_de_ligne> est ignorée et \ doit être utilisée 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 de l'entrée, y compris dans la ligne contenant délimiteur. Cela permet d'indenter de façon naturelle les do- cuments en ligne au sein des scripts. Chaînes en ligne Une variante aux documents en ligne, le format est : [n]<<<mot Le mot est sujet au développement du tilde, des paramètres et des va- riables, à la substitution de commande, au développement arithmétique et à la suppression des protections. Ni le développement des chemins, ni le découpage en mots ne sont réalisés. Le résultat est fourni comme une seule chaîne, avec l'ajout d'un caractère de changement de ligne, à la commande sur son entrée standard (ou sur le descripteur de fichier n, si n est spécifié). Dédoublement de descripteurs de fichier L'opérateur de redirection [n]<&mot permet de dupliquer les descripteurs de fichier en entrée. Si le mot se transforme en un ou plusieurs chiffres, le descripteur de fichier noté par n devient une copie de ce descripteur. Si les chiffres du mot ne correspondent pas à un descripteur ouvert en lecture, une erreur de re- direction se produit. Si le mot prend la forme -, le descripteur n est fermé. Si n n'est pas mentionné, l'entrée standard (descripteur 0) est utilisée. L'opérateur [n]>&mot est utilisé de façon similaire pour dupliquer les descripteurs de sor- tie. Si n n'est pas explicité, la sortie standard (descripteur 1) est utilisée. Si les chiffres du mot ne correspondent pas à un descripteur en écriture, une erreur de redirection se produit. Si mot est évalué en -, le descripteur de fichier n est fermé. Dans le cas particulier où n est omis et où mot ne se développe pas en un ou plusieurs chiffres, ou -, les sorties standard et d'erreur standard sont toutes deux rediri- gées comme décrit précédemment. Déplacement de descripteurs de fichier L'opérateur de redirection [n]<&chiffre- déplace le descripteur de fichier chiffre vers le descripteur de fi- chier n ou sur l'entrée standard (descripteur de fichier 0) si n n'est pas indiqué. chiffre est fermé après avoir été dupliqué en n. De la même façon, l'opérateur de redirection [n]>&chiffre- déplace le descripteur de fichier chiffre vers le descripteur de fi- chier n ou sur la sortie standard (descripteur de fichier 1) si n n'est pas indiqué. Ouverture en Lecture/Écriture d'un descripteur de fichier L'opérateur de redirection [n]<>mot conduit à l'ouverture du fichier dont le nom résulte du développement du mot, à la fois en lecture et en écriture et lui affecte le descrip- teur de fichier n ou bien le descripteur 0 si n n'est pas mentionné. Si le fichier n'existe pas, il est créé. ALIAS Les alias permettent de substituer une chaîne à un mot lorsqu'il est utilisé comme premier mot d'une commande simple. L'interpréteur gère une liste d'alias qui peuvent être créés et détruits avec les commandes internes alias et unalias (consultez COMMANDES INTERNES DE L'INTERPRÉ- TEUR ci-dessous). L'interpréteur vérifie si le premier mot de chaque commande simple, si non protégé, est un alias. Si c'est le cas, ce mot est remplacé par le texte de l'alias. Les caractères /, $, ` et = et tout métacaractère de l'interpréteur ou caractère de protection décrits ci-dessus ne peuvent pas apparaître dans un nom d'alias. Le texte de remplacement peut contenir toute entrée correcte pour l'interpréteur, y compris les métacaractères de l'interpréteur. L'interpréteur vérifie si le premier mot du texte de remplacement est à son tour un alias, mais un mot identique à un alias en cours de développement n'est pas déve- loppé une seconde fois. Cela signifie qu'on peut, par exemple, créer un alias ls valant ls -F et bash n'essaiera pas de développer récursive- ment le texte de substitution. Si le dernier caractère de la valeur de l'alias est un blanc, alors le prochain mot de commande suivant l'alias connaîtra aussi le développement d'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. S'ils sont nécessaires, utilisez une fonction de l'interpréteur (consultez FONCTIONS ci-dessous). Les alias ne sont pas développés quand l'interpréteur n'est pas inter- actif sauf si l'option expand_aliases de l'interpréteur est créée par la commande shopt (consultez la description de shopt dans COMMANDES IN- TERNES DE L'INTERPRÉTEUR ci-dessous). 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ète- ment et toutes les lignes qui composent une commande composée, avant d'exécuter une des commandes de cette ligne ou de la commande composée. Les alias sont développé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. Une commande placée à la suite d'une définition d'alias sur la même ligne ne sera pas affectée par ce nouvel alias. Ce comportement est également important lors de l'exécu- tion des fonctions. Les alias sont développés lorsque la définition de la fonction est lue et non pas lors de l'exécution de cette fonction, parce qu'une définition de fonction est elle-même une commande. Ainsi des alias définis dans une fonction ne sont pas disponibles avant la fin de l'exécution de la fonction. Pour plus de tranquillité, placez toujours les définitions d'alias sur des lignes isolées et n'utilisez jamais la commande alias dans les commandes composées. Les alias sont surpassés par les fonctions de l'interpréteur dans la plupart des situations. FONCTIONS Une fonction de l'interpréteur, définie comme décrit ci-dessus, dans GRAMMAIRE DE L'INTERPRÉTEUR, conserve une suite de commandes pour exé- cution ultérieure. Lorsque le nom d'une fonction de l'interpréteur est utilisée comme un simple nom de commande, la liste des commandes asso- ciées à ce nom de fonction est exécutée. Les fonctions sont exécutées dans le contexte de l'interpréteur actuel ; aucun nouveau processus n'est créé pour les interpréter (à la différence d'un script). Lorsqu'une fonction est exécutée, les arguments de la fonction de- viennent les paramètres positionnels pendant son exécution. Le pa- ramètre spécial # est mis à jour en conséquence. Le paramètre spécial 0 reste inchangé. Le premier élément de la variable FUNCNAME contient le nom de la fonction pendant son exécution. Tous les autres aspects de l'environnement d'exécution de l'interpré- teur sont identiques entre la fonction et le contexte d'appel, aux ex- ceptions suivantes : les captures de DEBUG et RETURN (consultez la des- cription de la commande interne trap dans COMMANDES INTERNES DE L'IN- TERPRÉTEUR ci-dessous) ne sont pas héritées, à moins que l'attribut trace ne soit positionné pour la fonction (consultez la description de la commande interne declare ci-dessous) ou que l'option d'interpréteur -o functrace n'ait été activée avec la commande interne set (auquel cas toutes les fonctions hériteront des captures de DEBUG et RETURN), et la capture ERR n'est pas héritée à moins que l'option d'interpréteur -o errtrace n'ait été activée. Les paramètres linguistiques régionaux des variables pour les fonctions peuvent être déclarés avec la commande interne local (local variables). Normalement, les variables et leurs valeurs sont partagées entre la fonction et son contexte d'appel. Si une variable est déclarée local, la portée visible de la variable est restreinte à cette fonction et à ses enfants (y compris les fonctions qu'elle appelle). Dans la description suivante, la portée actuelle est une fonction qui s'exécute actuellement. Les portées précédentes consistent en celles du contexte d'appel de la fonction et ainsi de suite, en remontant jusqu'à la portée « globale », où l'interpréteur n'exécute aucune fonction de l'interpréteur. Par conséquent, une variable locale pour la portée ac- tuelle est une variable déclarée avec les commandes internes local ou declare dans la fonction qui est exécutée actuellement. Les variables locales « suivent » les variables du même nom déclarées pour des portées précédentes. Par exemple, une variable locale déclarée dans une fonction masque une variable globale du même nom : les réfé- rences et les affectations se réfèrent à la variable locale, sans modi- fier la variable globale. Quand la fonction rend la main, la variable globale est à nouveau visible. L'interpréteur utilise les portées dynamiques pour contrôler la visibi- lité d'une variable dans les fonctions. Avec les portées dynamiques, les variables visibles et leurs valeurs sont le résultat d'une suite d'appels de fonction qui font que l'exécution atteint la fonction ac- tuelles. La valeur de la variable vue par une fonction dépend de sa va- leur dans son contexte d'appel, s'il existe, que le contexte d'appel soit la portée « globale » ou une autre fonction de l'interpréteur. C'est aussi la valeur qu'une déclaration de variable locale « suit », et la valeur qui est restaurée quand la fonction rend la main. Par exemple, si une variable var est déclarée comme locale dans la fonction fonc1, et que fonc1 appelle une autre fonction, fonc2, les ré- férences à var provenant de la fonc2 seront résolues à la valeur de la variable locale var provenant la fonc1, masquant toute variable globale nommée var. La commande interne unset fonctionne avec les mêmes portées dyna- miques : si une variable est locale pour la portée actuelle, unset la détruit ; autrement, la destruction se réfère à la variable trouvée dans une portée d'appel comme décrit ci-dessus. Si une variable pour la portée locale actuelle est désactivée, elle reste ainsi (apparaissant comme détruite) jusqu'à ce qu'elle soit réinitialisée dans cette portée ou jusqu'à ce que la fonction rende la main. Une fois que la fonction a rendu la main, toute instance de la variable dans la portée antérieure deviendra visible. Si la désactivation agit sur une variable dans une portée antérieure, toute instance d'une variable de ce nom qui avait été masquée deviendra visible (voir plus loin comment l'option de l'in- terpréteur localvar_unset modifie ce comportement). La variable FUNCNEST, si configurée à une valeur numérique strictement positive, définit le niveau maximal d'imbrication de fonctions. Les in- vocations de fonctions qui dépassent la limite forceront toute la com- mande à abandonner. 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. Toute commande associée à la capture de RETURN est exécutée avant que l'exécution reprenne. Quand une fonction se termine, les pa- ramètres positionnels et le paramètre spécial # reprennent les valeurs qu'ils avaient avant l'appel de la fonction. Les noms et les définitions de fonctions peuvent être affichés avec l'option -f des commandes internes declare ou typeset. L'option -F de declare ou typeset n'affichera que les noms de fonction (et facultati- vement le fichier source et le numéro de ligne, si l'option d'interpré- teur extdebug est activée). Les fonctions peuvent être exportées avec l'option -f de la commande interne export, afin d'être automatiquement définies dans les processus enfant de l'interpréteur (ceux créés lors de l'exécution d'un lancement séparé de l'interpréteur). Une définition de fonction peut être supprimée avec l'option -f de la commande interne unset. Les fonctions peuvent être récursives. La variable FUNCNEST peut être utilisée pour limiter la profondeur de la pile d'appel de la fonction et restreindre le nombre d'invocations de fonctions. Par défaut, aucune limite n'est imposée quant au nombre d'appels récursifs. ÉVALUATION ARITHMÉTIQUE L'interpréteur permet, dans certaines circonstances, l'évaluation d'ex- pressions arithmétiques (consultez les commandes internes let et de- clare ainsi que Développement arithmétique). L'évaluation est effectuée en utilisant des entiers de longueur fixe, sans vérification du débor- dement. Néanmoins, la division par 0 est capturée et marquée comme une erreur. Les opérateurs, leur priorité, leur associativité et leur va- leur sont identiques à ceux du langage C. La liste suivante d'opéra- teurs est groupée par opérateurs de niveaux de priorité identiques. Les niveaux sont décrits par ordre de priorité décroissante. id++ id-- post-incrément et post-décrément de variables - + moins et plus unaires ++id --id préincrément et prédécrément de variables ! ~ négations logique et binaire ** exponentiation * / % multiplication, division, reste + - addition, soustraction << >> décalage arithmétique à gauche et à droite <= >= < > comparaisons == != égalité et différence & ET binaire ^ OU exclusif binaire | OU binaire && ET logique || OU logique expr?expr:expr opérateur conditionnel = *= /= %= += -= <<= >>= &= ^= |= affectations expr1 , expr2 virgule Les variables de l'interpréteur sont utilisables comme opérandes, le développement des paramètres étant effectué avant l'évaluation arithmé- tique. Dans une expression, les variables de l'interpréteur peuvent également être référencées par leur nom, sans utiliser la syntaxe de développement des paramètres. Une variable d'interpréteur NULL ou in- existante est évaluée à 0 lorsqu'elle est consultée par son nom sans utiliser la syntaxe de développement des paramètres. La valeur d'une variable est évaluée comme une expression arithmétique lorsqu'elle est consultée, ou lorsqu'une valeur lui est affecté alors que son attribut integer (entier) a été positionné en utilisant declare -i. Une valeur NULL est évaluée à 0. Une variable d'interpréteur n'a donc pas besoin d'avoir son attribut integer positionné pour être utilisable dans un calcul. Les constantes de type entier suivent la définition du langage C, sans suffixes ou constantes de caractères. Les constantes commençant par 0 sont interprétées comme des nombres octaux. Un en-tête 0x ou 0X indique une valeur hexadécimale. Sinon, les nombres ont la forme [base#]n où la base facultative est un nombre décimal entre 2 et 64 représentant la base arithmétique et n est un nombre exprimé dans cette base. Si la base# est omise, la base 10 est utilisée. En indiquant n, si un carac- tère non chiffre est requis, les chiffres supérieurs à 9 sont représen- tés par les lettres minuscules, les lettres majuscules, le « @ » et le « _ », dans cet ordre. Si la base est inférieure ou égale à 36, les mi- nuscules et les majuscules sont interchangeables pour représenter les nombres entre 10 et 35. Les opérateurs sont évalués par ordre de priorité. Les sous-expressions entre parenthèses sont évaluées en premier, ce qui permet de surpasser les règles de priorité ci-dessus. CONDITIONS Les conditions sont utilisées par la commande composée [[ et les com- mandes internes test et [ pour vérifier les attributs d'un fichier et effectuer des comparaisons arithmétiques ou sur des chaînes. Les com- mandes test et [ déterminent comment elles se comportent à partir du nombre d'arguments ; consultez la description de ces commandes pour toutes les autres actions spécifiques aux commandes. Les conditions se forment à partir des primitives unaires ou binaires suivantes. Bash gère plusieurs noms de fichier spécifiquement quand ils sont utilisés dans des conditions. Si le système d'exploitation sur le- quel bash s'exécute fournit ces fichiers spéciaux, bash les utilise ; sinon, il les émule en interne avec ce comportement : si n'importe quel argument fichier de l'une des primitives est de la forme /dev/fd/n, alors le descripteur de fichier n est examiné. Si l'argument fichier de l'une des primitives est parmi /dev/stdin, /dev/stdout ou /dev/stderr, le descripteur de fichier 0, 1 ou 2, respectivement, est examiné. Sauf indication contraire, les primitives relatives aux fichiers suivent les liens symboliques et opèrent sur la cible du lien plutôt que sur le lien lui-même. Lorsqu'ils sont utilisés avec [[, les opérateurs < et > ordonnent d'un point de vue lexicographique en utilisant les paramètres linguistiques régionaux actuels. La commande test trie en utilisant l'ordre ASCII. -a fichier Vrai si le fichier existe. -b fichier Vrai si le fichier existe et est un fichier spécial bloc. -c fichier Vrai si le fichier existe et est un fichier spécial caractère. -d fichier Vrai si le fichier existe et est un répertoire. -e fichier Vrai si le fichier existe. -f fichier Vrai si le fichier existe et est un fichier normal. -g fichier Vrai si le fichier existe et a son bit Set-GID positionné. -h fichier Vrai si le fichier existe et est un lien symbolique. -k fichier Vrai si le fichier existe et a son bit « sticky » positionné. -p fichier Vrai si le fichier existe et est un tube nommé (FIFO). -r fichier Vrai si le fichier existe et est accessible en lecture. -s fichier Vrai si le fichier existe et a une taille strictement positive. -t df Vrai si le descripteur de fichier df est ouvert et se rapporte à un terminal. -u fichier Vrai si le fichier existe et a son bit Set-UID positionné. -w fichier Vrai si le fichier existe et est accessible en écriture. -x fichier Vrai si le fichier existe et est exécutable. -G fichier Vrai si le fichier existe et appartient au GID effectif du groupe. -L fichier Vrai si le fichier existe et est un lien symbolique. -N fichier Vrai si le fichier existe et a été modifié depuis sa dernière lecture. -O fichier Vrai si le fichier existe et appartient à l'UID effectif de l'utilisateur. -S fichier Vrai si le fichier existe et est une socket. fichier_1 -ef fichier_2 Vrai si le fichier_1 et le fichier_2 se rapportent au même péri- phérique et ont les mêmes numéros d'inœuds. fichier_1 -nt fichier_2 Vrai si le fichier_1 est plus récent que le fichier_2 (selon les dates de dernière modification) ou si fichier_1 existe et non fichier_2. fichier_1 -ot fichier_2 Vrai si le fichier_1 est plus ancien que le fichier_2 ou si fi- chier_2 existe et non fichier_1. -o nom_opt Vrai si l'option d'interpréteur nom_opt est activée. Consulter la liste des options ci-dessous dans la description de l'option -o de la commande interne set. -v nom_de_variable Vrai si la variable nom_de_variable de l'interpréteur est confi- gurée (si une valeur lui a été assignée). -R nom_de_variable Vrai si la variable nom_de_variable de l'interpréteur est confi- gurée et est une référence de nom. -z chaîne Vrai si la longueur de la chaîne est nulle. chaîne -n chaîne Vrai si la longueur de la chaîne est non nulle. chaîne_1 == chaîne_2 chaîne_1 = chaîne_2 Vrai si les deux chaînes sont égales. Le symbole = devrait être utilisé avec la commande test pour être en conformité POSIX. Utilisée avec la commande [[, cela réalise une correspondance de motif tel que décrit précédemment (Commandes composées). chaîne_1 != chaîne_2 Vrai si les deux chaînes sont différentes. chaîne_1 < chaîne_2 Vrai si chaîne_1 se trouve avant chaîne_2 dans l'ordre lexico- graphique. chaîne_1 > chaîne_2 Vrai si chaîne_1 se trouve après chaîne_2 dans l'ordre lexico- graphique. arg1 OP arg2 OP est l'un des opérateurs suivants -eq, -ne, -lt, -le, -gt ou -ge. Ces opérateurs arithmétiques binaires renvoient vrai si arg1 est respectivement égal, différent, inférieur, inférieur ou égal, supérieur, supérieur ou égal à arg2. arg1 et arg2 peuvent être des entiers positifs ou négatifs. Lorsqu'ils sont utilisés avec la commande [[, arg1 et arg2 sont évalués comme des expres- sions arithmétiques (consultez ÉVALUATION ARITHMÉTIQUE ci-des- sus). DÉVELOPPEMENT DES COMMANDES SIMPLES Lors de l'exécution d'une commande simple, l'interpréteur effectue les développements, affectations et redirections, de gauche à droite dans l'ordre suivant. 1. Les mots que l'analyseur a repéré comme affectations de va- riables (ceux qui précèdent le nom de la commande) et les redi- rections sont conservées pour un traitement ultérieur. 2. Les mots qui ne sont ni des affectations de variables ni des re- directions sont développés. S'il reste des mots après le déve- loppement, le premier mot est considéré comme le nom d'une com- mande et les suivants comme ses arguments. 3. Les redirections sont effectuées comme décrit ci-dessus dans RE- DIRECTIONS. 4. Le texte suivant le signe = de chaque affectation de variable est sujet au développement du tilde, des paramètres, à la sub- stitution de commande, au développement arithmétique et à la suppression des protections avant d'être affecté à la variable. Si aucun nom de commande ne résulte des précédentes opérations, les af- fectations de variables modifient l'environnement actuel de l'interpré- teur. Dans le cas de commandes de ce type (celles qui consistent uni- quement en affectations et en redirections), les affectations sont ef- fectuées avant les redirections. Sinon les variables sont ajoutées à l'environnement de la commande exécutée et n'affectent pas l'environne- ment de l'interpréteur actuel. Si l'une des tentatives d'affectation concerne une variable en lecture seule, une erreur se produit et la commande termine avec un état différent de zéro. Si aucun nom de commande n'est obtenu, les redirections sont effectuées mais ne modifient pas l'environnement de l'interpréteur actuel. Une er- reur de redirection conduit à la terminaison de la commande avec un état différent de zéro. S'il reste un nom de commande après le développement, l'exécution a lieu comme décrit ci-dessous. Sinon la commande termine. Si l'un des développements contient une substitution de commande, l'état final de la commande est l'état final de la dernière substitution de commande effectuée. S'il n'y avait aucune substitution de commande, la commande termine avec un état de zéro. EXÉCUTION DES COMMANDES Après le découpage de la ligne de commande en mots, si le résultat est une commande simple suivie d'une liste facultative d'arguments, les ac- tions suivantes sont effectuées. Si le nom de la commande ne contient aucune barre oblique, l'interpré- teur tente de la localiser. S'il existe une fonction de l'interpréteur de ce nom, elle est appelée comme nous l'avons vu ci-dessus dans FONC- TIONS. Si le nom n'est pas celui d'une fonction, l'interpréteur le re- cherche dans la liste des commandes internes. Si une correspondance est trouvée, cette commande interne est appelée. Si le nom n'est ni celui d'une fonction de l'interpréteur, ni celui d'une commande interne et s'il ne contient pas de barre oblique, bash va chercher dans chacun des éléments de PATH un répertoire contenant un fichier exécutable du nom désiré. Bash utilise une table de hachage pour mémoriser les chemins d'accès complets aux fichiers exécutables (consultez la commande hash dans COMMANDES INTERNES DE L'INTERPRÉTEUR ci-dessous). Une recherche complète dans les répertoires du PATH n'est effectuée que si la commande ne se trouve pas dans la table de hachage. Si la recherche est infructueuse, l'interpréteur recherche une fonction de l'interpréteur appelée command_not_found_handle. Si cette fonction existe, elle est appelée dans un environnement d'exécution séparé avec la commande d'origine et comme argument les arguments de celle-ci, et l'état final de la fonction devient l'état final de ce sous-interpré- teur. Si cette fonction n'est pas définie, l'interpréteur affiche un message d'erreur et renvoie un état final de 127. Si la recherche réussit ou si le nom de la commande contient une ou plusieurs barres obliques, l'interpréteur exécute le programme demandé dans un environnement d'exécution distinct. L'argument 0 est configuré au nom indiqué et les éventuels arguments restants de la commande sont configurés aux arguments indiqués. Si cette exécution échoue parce que le programme n'est pas un exécu- table et si le fichier n'est pas un répertoire, il est pris pour un script, un fichier contenant des commandes d'interpréteur, et l'inter- préteur crée une nouvelle instance de lui-même pour exécuter ce script. Ce sous-interpréteur se réinitialisera lui-même, comme si un nouvel in- terpréteur avait été appelé pour exécuter le script, à la différence qu'il continuera à mémoriser l'emplacement des commandes connues de son parent (consultez hash dans COMMANDES INTERNES DE L'INTERPRÉTEUR ci-dessous). Si le programme est un fichier commençant par #!, le reste de la pre- mière ligne indique un interprète pour ce programme. L'interpréteur se chargera d'exécuter l'interprète indiqué sur les systèmes d'exploita- tion qui ne gèrent pas eux-mêmes ce format d'exécutable. Les arguments de l'interprète consistent en un seul argument facultatif fourni sur la première ligne du fichier à la suite du nom de l'interprète, suivi du nom du programme, suivi des arguments de la commande s'il y en a. ENVIRONNEMENT D'EXÉCUTION DES COMMANDES L'interpréteur fournit un environnement d'exécution consistant en l'en- semble des éléments suivants : • les fichiers ouverts hérités par l'interpréteur à son appel et modifiés par les redirections fournies à la commande interne exec ; • le répertoire de travail actuel comme configuré par cd, pushd ou popd ou hérité par l'interpréteur à son appel ; • le masque de création de fichier comme configuré par umask ou hérité du parent de l'interpréteur ; • les captures actuelles configurées par trap ; • les paramètres de l'interpréteur configurés par des affectations de variables, avec la commande interne set, ou hérités de l'en- vironnement du parent de l'interpréteur ; • les fonctions de l'interpréteur définies lors de l'exécution ou héritées de l'environnement du parent de l'interpréteur ; • les options activées à l'appel (par défaut ou avec les arguments de ligne de commande) ou par set ; • les options activées par shopt ; • les alias de l'interpréteur définies par la commande alias ; • les ID des divers processus, y compris ceux des tâches en ar- rière-plan, la valeur de $$ et la valeur de PPID. Lorsqu'une commande différente d'une commande interne ou d'une fonction de l'interpréteur doit être exécutée, elle est appelée dans un environ- nement d'exécution séparé constitué de ce qui suit. Sauf indication contraire, les valeurs sont héritées de l'environnement de l'interpré- teur : • les fichiers ouverts de l'interpréteur, ainsi que toutes modifi- cations et ajouts précisés par les redirections de la commande ; • le répertoire de travail actuel ; • le masque de création de fichiers ; • les variables et les fonctions de l'interpréteur marquées pour l'exportation, ainsi que les variables exportées spécialement pour la commande ; • les captures interceptées par l'interpréteur sont réinitialisées aux valeurs héritées de l'interpréteur parent et les captures ignorées par l'interpréteur restent ignorées. Une commande appelée dans un environnement distinct ne peut pas affec- ter l'environnement d'exécution de l'interpréteur. Un sous-interpréteur est une copie du processus de l'interpréteur. Les substitutions de commande, les commandes groupées entre parenthèses et les commandes asynchrones sont appelées dans un environnement de sous-interpréteur qui est une copie de celui de l'interpréteur, mais les captures interceptées par l'interpréteur sont réinitialisées aux valeurs que l'interpréteur avait héritées de son parent à son appel. Les commandes internes appelées dans un pipeline sont aussi exécutées dans un environnement de sous-interpréteur. Les modifications apportées à l'environnement d'un sous-interpréteur n'affectent aucunement l'envi- ronnement d'exécution de l'interpréteur. Les sous-interpréteurs engendrés pour exécuter les substitutions de commande héritent de la valeur de l'option -e de l'interpréteur parent. En dehors du mode POSIX, bash efface l'option -e de tels sous-interpré- teurs. Si une commande est suivie par un & et que le contrôle des tâches n'est pas actif, l'entrée standard par défaut de la commande est le fichier vide /dev/null. Sinon, la commande appelée hérite des descripteurs de fichier de l'interpréteur appelant comme modifiés par les redirections. ENVIRONNEMENT Quand un programme est appelé, il reçoit un tableau de chaînes que l'on appelle environnement. Il s'agit d'une liste de couples nom-valeur, de la forme nom=valeur. L'interpréteur fournit plusieurs façons de gérer l'environnement. Au démarrage, l'interpréteur analyse son propre environnement et crée un paramètre pour chaque nom trouvé, en le marquant comme exportable vers les processus enfants. Les commandes exécutées héritent de cet environ- nement. Les commandes export et declare -x permettent d'ajouter ou de supprimer des paramètres ou des fonctions de l'environnement. Si la va- leur 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 toute commande exécutée est l'environnement initial de l'interpréteur, dont les valeurs peuvent être modifiées dans l'interpréteur, sans les éléments supprimés par la commande unset, et avec les éléments ajoutés par les commandes export et declare -x. L'environnement d'une commande simple ou d'une fonction peut être aug- menté temporairement, en la faisant précéder des affectations de pa- ramètres, comme nous l'avons vu ci-dessus dans PARAMÈTRES. Ces affecta- tions ne concernent que l'environnement vu par cette commande. Si l'option -k est configurée (consultez ci-dessous la commande interne set), alors toutes les affectations de paramètres sont placées dans l'environnement d'une commande exécutée et non seulement celles qui précèdent son nom. Quand bash appelle une commande externe, la variable _ est configurée en chemin d'accès complet à cette commande et elle est transmise dans l'environnement. CODE DE RETOUR L'état final d'une commande exécutée est la valeur renvoyée par l'appel système waitpid ou fonction équivalente. Les états finaux prennent leurs valeurs entre 0 et 255, néanmoins, comme expliqué ci-dessous, l'interpréteur peut utiliser les valeurs supérieures à 125 de façon particulière. Les états finaux des commandes internes et composées sont également limités à cet intervalle. Sous certaines conditions, l'inter- préteur utilisera des valeurs particulières pour indiquer des modes d'échec particuliers. Du point de vue de l'interpréteur, une commande qui termine avec état final valant zéro a réussi. Un état final de zéro indique le succès. Un état final différent de zéro indique un échec. Quand une commande se termine par un signal mortel N, bash utilise la valeur 128+N comme état final. Si une commande n'est pas trouvée, le processus enfant créé pour l'exé- cuter renvoie un état de 127. Si une commande est trouvée mais pas exé- cutable, la valeur renvoyée est 126. Si une commande échoue à cause d'une erreur survenue lors d'un dévelop- pement ou des redirections, l'état final est strictement plus grand que zéro. Les commandes internes renvoient un état de 0 (vrai) si réussies et une valeur différente de zéro (faux) si une erreur se produit pendant leur exécution. Toutes les commandes internes renvoient un état final de 2 pour indiquer un usage incorrect, en général des options non valables ou des arguments manquants. Le code de retour de la dernière commande est disponible dans le pa- ramètre spécial $?. Bash lui-même renvoie l'état final de la dernière commande exécutée, à moins qu'une erreur de syntaxe ne se produise, auquel cas il termine avec une valeur différente de zéro. Consultez aussi ci-dessous la com- mande interne exit. SIGNAUX Quand bash fonctionne de façon interactive, en absence de toute cap- ture, il ignore SIGTERM (c'est ainsi que kill 0 ne tue pas un interpré- teur interactif) et SIGINT est intercepté et géré (c'est ainsi que la commande interne wait est interruptible). Dans tous les cas, bash ignore SIGQUIT. Si le contrôle des tâches est actif, bash ignore SIGT- TIN, SIGTTOU et SIGTSTP. Les commandes externes lancées par bash ont les gestionnaires de si- gnaux configurés aux valeurs héritées par l'interpréteur de son parent. Quand le contrôle des tâches n'est pas actif, les tâches en ar- rière-plan ignorent les signaux SIGINT et SIGQUIT en plus des gestion- naires hérités. Les commandes exécutées en tant que résultat d'une sub- stitution de commande ignorent les signaux de contrôle de tâches émis par le clavier SIGTTIN, SIGTTOU et SIGTSTP. Par défaut, l'interpréteur termine à la réception de SIGHUP. Avant de terminer, un interpréteur interactif renvoie le SIGHUP à toutes les tâches en cours ou suspendues. Les tâches suspendues reçoivent aussi SIGCONT pour s'assurer qu'elles reçoivent bien le SIGHUP. Pour empêcher l'interpréteur d'envoyer le signal à une tâche particulière, elle de- vrait être supprimée de la table des tâches avec la commande interne disown (consultez COMMANDES INTERNES DE L'INTERPRÉTEUR ci-dessous) ou marquée comme exemptée de SIGHUP en utilisant disown -h. Si l'option d'interpréteur huponexit a été configurée avec la fonction shopt, bash envoie un signal SIGHUP à toutes les tâches lorsqu'un in- terpréteur de commandes de connexion interactif termine. Lorsque bash attend qu'une commande se termine et qu'il reçoit un si- gnal pour lequel une capture a été configurée, la capture ne sera pas exécutée tant que la commande n'est pas terminée. Lorsque bash attend la fin d'une commande asynchrone par la commande interne wait, la ré- ception d'un signal pour lequel une capture a été configurée conduira à un retour immédiat de la commande interne wait avec un état final supé- rieur à 128, à la suite de quoi la capture est immédiatement exécutée. Quand le contrôle des tâches n'est pas activé, et que bash est dans l'attente de l'achèvement d'une commande au premier plan, l'interpré- teur reçoit les signaux émis par le clavier comme SIGINT (généralement créé par ^C) que l'utilisateur a généralement l'intention d'envoyer à cette commande. Cela se produit parce que l'interpréteur et la commande sont dans le même groupe de processus que le terminal, et ^C envoie un SIGINT à tous les processus de ce groupe de processus. Quand bash est exécuté sans que le contrôle de tâche ne soit activé et reçoit un SIGINT pendant qu'il attend une commande au premier plan, il attend jusqu'à ce que la commande au premier plan s'achève et décide ensuite que faire du SIGINT : 1. Si la commande termine du fait du SIGINT, bash conclut que l'utilisateur a l'intention de mettre fin à tout le script et répond au SIGINT (par exemple en exécutant une capture de SIGINT ou en s'arrêtant lui-même) ; 2. Si la commande ne se termine pas du fait du SIGINT, le programme a géré le SIGINT lui même et ne l'a pas traité comme un signal fatal. Dans ce cas bash ne traite pas le SIGINT comme un signal fatal, en supposant plutôt soit que le SIGINT était utilisé comme un élément du déroulement normal du programme (par exemple, emacs l'utilise pour interrompre des commandes d'édi- tion) ou était abandonné délibérément. Néanmoins, bash exécutera toute capture définie par SIGINT, comme il le fait pour tout autre signal capturé reçu pendant qu'il attend que la commande au premier plan s'achève, pour des raisons de compatibilité CONTRÔLE DES TÂCHES Le contrôle des tâches se réfère à la capacité de suspendre (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 possibi- lité grâce à l'action conjointe du pilote de terminal du noyau de sys- tème d'exploitation et de bash. L'interpréteur associe une tâche à chaque pipeline. Il maintient une table des tâches en cours d'exécution, cette table pouvant être affi- chée avec la commande jobs. Quand bash lance une tâche de façon asyn- chrone (en arrière-plan), il affiche une ligne qui ressemble à : [1] 25647 Cette ligne indique que la tâche est la tâche numéro 1 et que le PID du dernier processus dans le pipeline associé à cette tâche est 25647. Tous les processus d'un même pipeline font partie de la même tâche. Bash utilise la notion de tâche comme base du contrôle des tâches. Pour faciliter l'implémentation d'une interface utilisateur pour le contrôle de tâches, le système introduit la notion d'ID de groupe de processus associés à un terminal. Les membres de ce groupe de processus (processus dont le GID est égal au Process Group ID du terminal actuel) reçoivent les signaux émis par le clavier comme SIGINT. Ces processus sont dits au premier plan. Les processus en arrière-plan sont ceux dont le Process-GID diffère de celui du terminal ; ils sont indifférents aux signaux émis par le clavier. Seuls les processus au premier plan peuvent lire depuis le terminal ou, si l'utilisateur l'indique avec stty tostop, y écrire. Les processus en arrière-plan qui tentent une lecture (ou une écriture si stty tostop est actif) dans le terminal re- çoivent un signal SIGTTIN (SIGTTOU) émis par le pilote du terminal du noyau, qui, sauf interception, suspend le processus. Si le système d'exploitation sur lequel bash fonctionne permet le contrôle des tâches, bash fournit des outils pour l'utiliser. La frappe d'un caractère de suspension (généralement ^Z, Contrôle-Z) pendant l'exécution d'un processus conduit à la suspension de celui-ci et re- donne la main à bash. La frappe d'un caractère de suspension différée (généralement ^Y, Contrôle-Y) conduira à la suspension du processus au moment où il tentera de lire des saisies depuis le terminal et la main reviendra à bash. L'utilisateur peut alors manipuler l'état de cette tâche en utilisant la commande bg (background = arrière-plan) pour en continuer l'exécution en arrière-plan, la commande fg (foreground = premier plan) pour la continuer au premier plan ou encore la commande kill pour la tuer. Un ^Z s'applique immédiatement et a pour effet de bord d'éliminer les sorties et saisies en attente. Plusieurs façons permettent de se rapporter à une tâche. Le caractère % introduit une spécification de tâche (jobspec). Il est possible de se rapporter à la tâche numéro n avec %n. Il est également possible de se rapporter à une tâche en utilisant un préfixe du nom utilisé pour la lancer ou une sous-chaîne qui apparaît dans sa ligne de commande. Par exemple, %ce se rapporte à une tâche suspendue dont le nom de commande commence par ce. Si ce préfixe correspond à plusieurs tâches, bash si- gnale une erreur. Utiliser %?ce, d'un autre côté, se rapporte à toute tâche contenant la chaîne ce dans sa ligne de commande. Si la sous-chaîne correspond à plusieurs tâches, bash signale une erreur. Les symboles %% et %+ se rapportent à la notion de tâche actuelle de l'in- terpréteur, c'est-à-dire la dernière tâche suspendue alors qu'elle était au premier plan ou démarrée en arrière-plan. La tâche précédente peut être désignée en utilisant %-. Si une seule tâche existe, %+ et %- peuvent tous deux être utilisés pour se rapporter à cette tâche. Dans les affichages se rapportant aux tâches (par exemple la sortie de la commande jobs), la tâche actuelle est toujours annotée d'un + et la tâche précédente d'un -. Un simple % (non accompagné de spécification de tâche) se rapporte également à la tâche actuelle. Il suffit de nommer une tâche pour la ramener au premier plan : %1 est synonyme de « fg %1 » et ramène la tâche 1 de l'arrière-plan vers le premier plan. De même, « %1 & » reprend la tâche 1 en arrière-plan, de façon équivalente à « bg %1 ». L'interpréteur est immédiatement prévenu lorsqu'une tâche change d'état. Normalement bash attend d'être prêt à afficher son interpréteur avant de signaler des changements dans l'état des tâches, afin de ne pas interrompre toute autre sortie. Si l'option -b de la commande in- terne set est activée, bash signalera de telles modifications immédia- tement. Toute capture sur SIGCHLD est exécutée pour chaque enfant qui se termine. Si une tentative visant à terminer bash est réalisée alors que des tâches sont suspendues (ou, si l'option d'interpréteur checkjobs a été activée par la commande interne shopt, en cours d'exécution), l'inter- préteur affiche un message d'avertissement, et, si l'option d'interpré- teur checkjobs est activée, affiche la liste les tâches et leurs états. La commande jobs peut alors être utilisée pour examiner leur état. Si une deuxième tentative est faite pour terminer sans commande interca- laire, l'interpréteur n'affiche aucun autre avertissement et les tâches suspendues sont terminées. Lorsque l'interpréteur est dans l'attente d'une tâche ou d'un processus utilisant la commande interne wait et que le contrôle des tâches est activé, wait rendra la main quand la tâche changera d'état. L'option -f fera que wait attendra que la tâche ou le processus termine avant de rendre la main. INVITES Quand il est exécuté de façon interactive, bash affiche l'invite de base PS1 dès qu'il est prêt à lire une commande et l'invite secondaire PS2 quand il a besoin de plus de saisies pour exécuter une commande. Bash affiche PS0 après avoir lu une commande, mais avant de l'exécuter. Bash affiche PS4 comme décrit ci-dessus avant de tracer chaque commande quand l'option -x est activée. Bash permet de personnaliser ces chaînes d'invite, en insérant un certain nombre de caractères spéciaux protégés par des contre-obliques qui sont décodés comme suit : \a un caractère ASCII d'alarme (07) ; \d la date au format « Jour_de_la_semaine Mois Quantième » (par exemple : « Tue May 26 ») ; \D{format} le format est passé à strftime(3) et le résultat est in- séré dans la chaîne de l'invite ; un format vide implique une représentation du temps spécifique aux paramètres linguistiques régionaux. Les accolades sont nécessaires ; \e un caractère de protection ASCII (033) ; \h le nom de la machine, jusqu'au premier point « . » ; \H le nom de la machine ; \j le nombre de tâches actuellement gérées par l'interpré- teur ; \l le nom de base du nom de périphérique de terminal de l'interpréteur ; \n changement de ligne ; \r retour chariot (« carriage return ») ; \s le nom de l'interpréteur, c'est-à-dire le nom de base de $0 (la portion suivant la dernière barre oblique) ; \t l'heure actuelle au format HH:MM:SS sur 24 heures ; \T l'heure actuelle au format HH:MM:SS sur 12 heures ; \@ l'heure actuelle au format HH:MM sur 12 heures ; \A l'heure actuelle au format HH:MM sur 24 heures ; \u le nom de l'utilisateur ; \v la version de bash (par exemple, 2.00) ; \V le numéro de version complet (avec niveau de correctifs) de bash, (par exemple, 2.00.0) ; \w la valeur de la variable de l'interpréteur ($PWD), avec $HOME abrégé en tilde « ~ » (utilise la valeur de la va- riable PROMPT_DIRTRIM) ; \W le nom de base de $PWD, avec $HOME abrégé en tilde (« ~ ») ; \! le numéro d'historique de la commande ; \# le numéro de la commande ; \$ # si l'UID effectif est 0, $ sinon ; \nnn le caractère de code octal nnn ; \\ une contre-oblique ; \[ débute une suite de caractères non imprimables, qui peuvent être utilisés pour inclure une suite de carac- tères de contrôle du terminal dans l'interpréteur ; \] finit une suite de caractères non imprimables. Le numéro de commande et le numéro d'historique sont généralement dif- férents : le numéro d'historique d'une commande correspond à sa posi- tion dans la file d'historique qui peut contenir des commandes relues depuis cette liste (consultez HISTORIQUE ci-dessous), alors que le nu- méro de commande est simplement une position dans la suite de commandes exécutées depuis le début de la session d'interpréteur actuelle. Après que la chaîne ait été décodée, elle est soumise au développement des paramètres, à la substitution de commande, au développement arithmé- tique, au découpage des mots et à la suppression des protections, selon la valeur de l'option d'interpréteur promptvars (consultez la descrip- tion de shopt dans COMMANDES INTERNES DE L'INTERPRÉTEUR ci-dessous). Cela peut avoir des effets non désirés si des portions protégées de la chaîne apparaissent à l'intérieur de la substitution de commande ou contiennent des caractères spéciaux pour le développement de mots. READLINE C'est la bibliothèque qui gère la lecture des saisies lors des sessions interactives de l'interpréteur, à moins que l'option --noediting ne soit indiquée à l'appel de l'interpréteur. Par défaut les commandes d'édition de ligne sont similaires à celles d'Emacs. Une interface d'édition de ligne dans le style vi est aussi disponible. Pour arrêter l'édition de ligne après le démarrage de l'interpréteur, utiliser l'op- tion +o emacs ou +o vi de la commande interne set (consultez COMMANDES INTERNES DE L'INTERPRÉTEUR ci-dessous). Notation readline Dans ce paragraphe on utilisera la notation « à la Emacs » pour indi- quer les frappes 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 no- tées par M-touche, ainsi M-x signifie Méta-X. (Sur les claviers sans touches Méta, M-x signifie ESC x, c'est-à-dire presser la touche d'Échappement puis la touche x. Cela fait de ESC le préfixe méta. La combinaison M-C-x signifie ESC-Contrôle-x ou encore presser la touche d'Échappement puis maintenir la touche Contrôle enfoncée tout en pres- sant la touche x.) Les commandes readline peuvent recevoir des arguments numériques, qui fonctionnent en règle générale comme compteurs de répétitions. Parfois, cependant, c'est le signe de l'argument qui est significatif. L'utili- sation d'un argument négatif pour une commande agissant dans un sens donné (par exemple kill-line) conduit cette commande à agir dans la di- rection opposée. Les commandes dont le comportement avec les arguments diffère de cela sont indiquées ci-dessous. Lorsqu'une commande est indiquée comme détruisant du texte, le texte effacé est en fait sauvegardé pour une éventuelle récupération ulté- rieure (« yanking »). Il est conservé dans un tampon circulaire (« kill ring »). Les suppressions successives conduisent à l'accumulation du texte en un seul bloc qui peut être récupéré en une fois. Les commandes non destructives séparent les blocs de textes dans le tampon circu- laire. Initialisation de readline Readline est personnalisé en plaçant des commandes dans un fichier d'initialisation (le fichier inputrc). Le nom de ce fichier est pris dans la variable de l'interpréteur INPUTRC. Si cette variable est in- existante, le nom par défaut est ~/.inputrc. Si ce fichier n'existe pas ou s'il ne peut pas être lu, le dernier fichier par défaut est /etc/in- putrc. Lorsqu'un programme utilisant la bibliothèque readline démarre, le fichier d'initialisation est lu et les raccourcis clavier et les va- riables sont mis en place. Il n'y a que quelques constructions élémen- taires possibles dans le fichier d'initialisation de readline. Les lignes blanches sont ignorées. Les lignes commençant par # sont des commentaires. Les lignes commençant par $ indiquent des constructions conditionnelles. Les autres lignes indiquent des raccourcis clavier et des paramétrages de variables. Les raccourcis clavier par défaut peuvent être modifiés par un fichier inputrc. D'autres programmes qui utilisent cette bibliothèque peuvent ajouter leurs propres commandes et raccourcis. Par exemple, en plaçant M-Control-u: universal-argument ou C-Meta-u: universal-argument dans le fichier inputrc, on associera la suite de touches 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'associer à une touche une chaîne de caractères qui sera insérée lorsque la touche est pressée (une macro). Raccourcis clavier readline La syntaxe pour contrôler les raccourcis clavier dans le fichier inpu- trc est simple. Tout ce qui est nécessaire est le nom de la commande ou le texte d'une macro et la suite de touches à laquelle il faut l'asso- cier. Les noms de touches peuvent être indiqués de l'une des deux fa- çons : comme un nom de touche symbolique, éventuellement précédé des préfixes Meta- ou Control- ou sous forme d'une suite de touches. En utilisant la forme touche:nom_de_fonction ou macro, touche est le nom de la touche en anglais. Par exemple : Control-u: universal-argument Meta-Rubout: backward-kill-word Control-o: "> sortie" Dans l'exemple ci-dessus, C-u est associé à la fonction universal-argu- ment, M-DEL à la fonction backward-kill-word et C-o à l'exécution de la macro exprimée dans la partie gauche (c'est-à-dire, insérer le texte ``> output'' sur la ligne). Avec la seconde forme, "touches":nom_de_fonction ou macro, touches dif- fère de touche ci-dessus en ce que les chaînes notant une suite com- plète de touches peuvent être indiquées en plaçant la suite entre guillemets doubles. Certaines suites de touches d'échappement dans le style GNU Emacs peuvent être utilisées, comme dans l'exemple suivant, mais les noms de caractères symboliques ne sont pas reconnus. "\C-u": universal-argument "\C-x\C-r": re-read-init-file "\e[11~": "Function Key 1" Dans cet exemple, C-u est à nouveau associé à la fonction universal-ar- gument, C-x C-r à la fonction re-read-init-file et ESC [ 1 1 ~ à l'in- sertion du texte ``Function Key 1''. Le jeu complet des suites de caractères de protection du style GNU Emacs est : \C- préfixe Contrôle ; \M- préfixe Méta ; \e caractère de protection ; \\ contre-oblique ; \" un guillemet " littéral ; \' un guillemet ' littéral. En plus des suites de caractères de protection dans le style GNU Emacs, un second jeu de suites de caractères de protection par contre-obliques est disponible : \a alerte (alarme) ; \b effacement arrière (« backspace ») ; \d effacement ; \f saut de page (« form feed ») ; \n changement de ligne ; \r retour chariot (« carriage return ») ; \t tabulation horizontale ; \v tabulation verticale ; \nnn le caractère 8 bits dont la valeur octale est nnn (un à trois chiffres) ; \xHH le caractère 8 bits dont la valeur hexadécimale est HH (un ou deux chiffres hexadécimaux) ; Lorsqu'on saisit le texte d'une macro, il faut utiliser des guillemets simples ou doubles pour indiquer la définition de la macro. Les textes non protégés sont considérés comme des noms de fonctions. Dans le corps de la macro, les protections par contre-oblique décrites ci-dessus sont développées. La contre-oblique protégera tout autre caractère dans le texte de la macro, y compris " et '. Bash permet d'afficher ou de modifier les raccourcis clavier readline avec la commande interne bind. On peut basculer d'un mode d'édition à l'autre en mode interactif en utilisant l'option -o de la commande in- terne set (consultez COMMANDES INTERNES DE L'INTERPRÉTEUR ci-dessous). Variables de readline Readline dispose de variables permettant de personnaliser encore plus son comportement. Une variable peut être configurée dans le fichier in- putrc avec une affectation de la forme set nom_de_variable valeur ou utilisant la commande interne bind (consultez COMMANDES INTERNES DE L'INTERPRÉTEUR ci-dessous). Sauf indication contraire, les variables de readline prennent les va- leurs On ou Off (la casse étant sans importance). Les noms de variables non reconnues sont ignorés. Lorsqu'une valeur de variable est lue, les variables vides ou de valeur NULL, « on » (insensible à la casse) et « 1 » sont équivalentes à On. Toutes les autres valeurs sont équiva- lentes à Off. Les variables et leurs valeurs par défaut, sont : active-region-start-color Une variable de chaîne qui contrôle la couleur du texte et du fond lors de l'affichage du texte dans la zone active (consultez la description de enable-active-region ci-dessous). Cette chaîne ne doit pas occuper l'emplacement d'un caractère physique quel- conque sur l'affichage, aussi elle devrait consister uniquement en séquences d'échappement du terminal. Elle est envoyée au ter- minal avant l'affichage du texte dans la zone active. Cette va- riable est remise à sa valeur par défaut chaque fois que le type de terminal change. La valeur par défaut est la chaîne qui place le terminal en mode standout tel qu'obtenu à partir de la des- cription terminfo du terminal. Cette valeur pourrait être par exemple "\e[01;33m". active-region-end-color Une variable de chaîne qui « annule » les effets de active-re- gion-start-color et rétablit l'apparence « normale » de l'affi- chage du terminal après l'affichage de texte dans la zone ac- tive. Cette chaîne ne doit pas occuper l'emplacement d'un carac- tère physique quelconque sur l'affichage, aussi elle devrait consister uniquement en séquences d'échappement du terminal. Elle est envoyée au terminal après l'affichage du texte dans la zone active. Cette variable est remise à sa valeur par défaut chaque fois que le type de terminal change. La valeur par défaut est la chaîne qui rétablit le terminal à partir du mode standout tel qu'obtenu à partir de la description terminfo du terminal. Cette valeur pourrait être par exemple "\e[0m". bell-style (audible) Cette variable commande readline lorsqu'il faut déclencher l'alarme du terminal. Si configurée à none, readline n'émet ja- mais d'alarme. Si configurée à visible, readline utilise une alarme visuelle s'il y en a une disponible. Si configurée à au- dible, readline essaie de faire sonner l'alarme du terminal. bind-tty-special-chars (On) Si configurée à On, readline tente d'associer les caractères de contrôle traités spécialement par le pilote de terminal du noyau à leurs équivalents readline. blink-matching-paren (Off) Si configurée à On, readline tente de déplacer brièvement le curseur vers une parenthèse ouvrante lors de l'insertion d'une parenthèse fermante. colored-completion-prefix (Off) Si configurée à On, lors du listage des complètements, readline affiche le préfixe commun du jeu des complètements possibles en utilisant une couleur différente. Les définitions de couleur sont prises selon la valeur de la variable d’environnement LS_COLORS. S'il y a une définition de couleur dans $LS_COLORS pour le suffixe personnalisé « readline-colored-completion-pre- fix », readline utilise cette couleur pour le suffixe commun plutôt que la valeur par défaut. colored-stats (Off) Si configurée à On, readline affiche les complètements possibles en utilisant des couleurs différentes pour indiquer leur type de fichier. Les définitions de couleur sont prises dans la valeur de la variable d’environnement LS_COLORS. comment-begin (« # ») Cette chaîne est insérée quand la commande readline insert-com- ment est exécutée. Cette commande est associée à M-# en mode Emacs et à # en mode de commande vi. completion-display-width (-1) Le nombre de colonnes d'écran utilisées pour afficher de pos- sibles correspondances lors de la réalisation du complètement. La valeur est ignorée si elle est inférieure à 0 ou supérieure à la largeur de l'écran du terminal. Une valeur de 0 fera que les correspondances seront affichées une par ligne. La valeur par défaut est -1. completion-ignore-case (Off) Si configurée à On, readline effectue les correspondances et complètements de noms de fichiers sans tenir compte de la casse. completion-map-case (Off) Si configurée à On et completion-ignore-case activée, readline traite les traits d'union (-) et les tirets bas (_) comme équi- valents lorsqu'elle réalise une recherche de correspondance et un complètement de nom de fichier insensibles à la casse. completion-prefix-display-length (0) La longueur, en caractères, du préfixe commun d'une liste de complètements possibles affiché sans modification. Si configurée en valeur positive, les préfixes communs plus longs que cette valeur sont remplacés par une ellipse lors de l'affichage des complètements possibles. completion-query-items (100) Cela détermine quand l'utilisateur est interrogé pour voir le nombre de complètements possibles produits par la commande pos- sible-completions. Elle peut être configurée à toute valeur en- tière positive. Si le nombre de complètements possibles est su- périeur ou égal à la valeur de cette variable, readline deman- dera à l'utilisateur s'il veut ou non les voir ; sinon, ils sont simplement affichés sur le terminal. Une valeur zéro signifie que readline ne demandera jamais ; des valeurs négatives sont traitées comme un zéro. convert-meta (On) Si configurée à On, readline transformera les caractères avec leur huitième bit réglé à une suite de caractères ASCII en sup- primant le huitième bit et en préfixant un caractère de protec- tion (en fait, en utilisant le caractère de protection comme préfixe méta). La configuration par défaut est On, mais readline la fixe à Off si le paramètre linguistique régional contient des caractères 8 bits. Cette variable dépend du paramètre linguis- tique régional LC_CTYPE et peut être modifiée si le paramètre linguistique régional est changé. disable-completion (Off) Si configurée à On, readline empêchera le complètement des mots. Les caractères de complètement seront insérés sur la ligne comme s'ils avaient été associés à self-insert. echo-control-characters (On) Si configurée à On, sur les systèmes d'exploitation le permet- tant, readline affiche un caractère correspondant à un signal provenant du clavier. editing-mode (emacs) Commande si readline doit démarrer avec des raccourcis clavier similaires à Emacs ou à vi. editing-mode peut être positionné soit à emacs, soit à vi. emacs-mode-string (@) Si la variable show-mode-in-prompt est activée, cette chaîne est affichée immédiatement avant la dernière ligne de la première invite quand le mode édition d'Emacs est activé. La valeur est développée comme un raccourci clavier, donc le jeu standard de préfixes meta- ou Control- et de séquences de protections par contre-oblique est disponible. Utiliser les caractères de pro- tection \1 et \2 pour ouvrir et fermer les séquences de carac- tères non imprimables, ce qui peut être utilisé pour inclure une suite de caractères de contrôle du terminal dans la chaîne de mode. enable-active-region (On) Le curseur (« point ») correspond à la position actuelle du cur- seur et la marque correspond à une position de curseur sauvegar- dée. Le texte entre le curseur et la marque est désigné comme la zone. Quand cette variable est réglée à On, readline permet à certaines commandes de désigner la zone comme active. Quand la zone est active, readline surligne le texte en utilisant la va- leur de active-region-start-color qui est par défaut la chaîne qui active le mode standout du terminal. La région active montre le texte inséré par collage spécial (bracketed-paste) et tout texte correspondant trouvé lors de recherches incrémentales et non-incrémentales dans l'historique. enable-bracketed-paste (On) Quand configurée à On, readline configurera le terminal pour pouvoir insérer chaque collage dans le tampon d'édition comme une chaîne de caractères uniques, plutôt que de traiter chaque caractère comme s'il avait été lu du clavier. Cela empêche read- line d'exécuter toute commande d'édition liée à des suites de touches apparaissant dans le texte collé. enable-keypad (Off) Quand configurée à On, readline essayera d'activer le pavé numé- rique de l'application une fois appelée. Sur certains systèmes, c'est nécessaire pour utiliser les flèches. enable-meta-key (On) Quand configurée à On, readline essayera d'activer toutes les touches de modificateur Méta que le terminal peut prendre en charge une fois appelé. Sur de nombreux terminaux, la touche Méta est utilisée pour saisir des caractères sur huit bits. expand-tilde (Off) Si configurée à On, le développement du tilde est effectué lorsque readline tente un complètement de commandes. history-preserve-point (Off) Si configurée à On, le programme d'historique tente de placer le curseur au même endroit sur chaque ligne d'historique récupérée avec previous-history ou next-history. history-size (unset) Configure le nombre maximal d'éléments sauvegardés dans la file de l'historique. Si configuré à zéro, tous les éléments sont ef- facés et aucun nouvel élément n’est sauvegardé. Si configuré à une valeur strictement négative, le nombre d'éléments de la file d’historique n'est pas limité. Par défaut, le nombre d’éléments est configuré à la valeur de la variable HISTSIZE de l'interpré- teur. En cas de tentative de régler history-size à une valeur non numérique, le nombre maximal d'éléments est configuré à 5OO. horizontal-scroll-mode (Off) Quand configurée à On, readline utilisera une seule ligne d'af- fichage et fera défiler la saisie horizontalement sur une seule ligne d'écran quand elle devient plus longue que la largeur de l'écran, plutôt que de faire un retour à la ligne. Ce réglage est activé automatiquement pour les terminaux de hauteur 1. input-meta (Off) Si configurée à On, readline acceptera des saisies sur huit bits (autrement dit il ne supprimera pas le huitième bit), quel que soit le terminal utilisé. Le nom meta-flag est un synonyme pour cette variable. La configuration par défaut est Off, mais read- line la fixe à On si le paramètre linguistique régional contient des caractères 8 bits. Cette variable dépend du paramètre lin- guistique régional LC_CTYPE et peut être modifiée si le pa- ramètre linguistique régional est changé. isearch-terminators (« C-[C-J ») La chaîne de caractères qui doit terminer une recherche incré- mentale sans que le caractère ne soit exécuté comme une com- mande. Si cette variable n'a pas reçu de valeur, les caractères ESC et C-J termineront une recherche incrémentale. keymap (emacs) Configure le jeu de raccourcis readline actuel. L'ensemble des noms corrects de jeux de raccourcis est emacs, emacs-standard, emacs-meta, emacs-ctlx, vi, vi-command et vi-insert. vi est équivalent à vi-command ; emacs est équivalent à emacs-standard. La valeur par défaut est emacs ; la valeur de editing-mode modi- fie aussi le jeu de raccourcis par défaut. keyseq-timeout (500) Indique le temps que readline attendra un caractère lors de la lecture d’une suite de touches ambiguë (c’est-à-dire qui peut former une suite de touches complète en utilisant l’entrée lue jusqu’à présent, ou accepter une entrée supplémentaire pour com- pléter une suite de touches plus longue). Si aucune entrée n’est reçue pendant le temps d’attente, readline utilisera la suite la plus courte, mais complète. La valeur est indiquée en millise- conde, donc une valeur de 1000 signifie que readline attendra pendant une seconde une entrée supplémentaire. Si cette variable est configurée à une valeur inférieure ou égale à zéro, ou à une valeur non numérique, readline attendra la saisie d’une autre touche pour décider de la suite de touches à compléter. mark-directories (On) Si configurée à On, une barre oblique est ajoutée aux noms de répertoires. mark-modified-lines (Off) Si configurée à On, les lignes d'historique qui ont été modi- fiées seront précédées à l'affichage d'un astérisque (*). mark-symlinked-directories (Off) Si configurée à On, une barre oblique est ajoutée aux noms com- plétés si ce sont des liens symboliques vers des répertoires (selon la valeur de mark-directories). match-hidden-files (On) Cette variable, quand elle est configurée à On, conduit readline à faire correspondre des fichiers dont le nom commence par un « . » (fichiers cachés) lors du complètement de noms de fi- chiers. Si configurée à Off, le « . » du début doit être fourni par l'utilisateur dans le nom de fichier à compléter. menu-complete-display-prefix (Off) Si configurée à On, le complètement de menu affiche le préfixe commun à la liste de complètements possibles (qui peut être vide) avant de tourner dans la liste. output-meta (Off) Si configurée à On, readline affichera directement les carac- tères ayant leur huitième bit défini plutôt que d'utiliser une suite de caractères de protection avec préfixe méta. La configu- ration par défaut est Off, mais readline la fixe à On si le pa- ramètre linguistique régional contient des caractères 8 bits. Cette variable dépend du paramètre linguistique régional LC_CTYPE et peut être modifiée si le paramètre linguistique ré- gional est changé. page-completions (On) Si configurée à On, readline utilise un afficheur de texte in- terne du type more pour afficher les complètements possibles sur un seul plein écran. print-completions-horizontally (Off) Si configurée à On, readline affichera les complètements corres- pondants triés horizontalement dans l'ordre alphabétique plutôt que verticalement. revert-all-at-newline (Off) Si configurée à On, readline annulera toutes les modifications des lignes d'historique avant de s'arrêter quand accept-line est exécuté. Par défaut les lignes d'historique peuvent être modi- fiées et conservent les listes d'annulation individuelles au fur et à mesure des appels à readline. show-all-if-ambiguous (Off) Cela modifie le comportement par défaut des fonctions de complè- tement. Si configurée à On, les mots qui ont plus d'un complète- ment possibles conduisent à l'affichage immédiat des correspon- dances plutôt qu'à l'émission d'une alarme. show-all-if-unmodified (Off) Cela modifie le comportement par défaut des fonctions de complè- tement de façon similaire à show-all-if-ambiguous. Si configurée à On, les mots qui ont plus d'un complètement possible sans au- cun complètement partiel possible (les complètements possibles ne partagent pas de préfixe commun) conduisent à l'affichage im- médiat des correspondances plutôt qu'à l'émission d'une alarme. show-mode-in-prompt (Off) Si configurée à On, ajoute une chaîne au début de l’invite indi- quant le mode d’édition : Emacs, commande Vi ou insertion Vi. L'utilisateur peut configurer la chaîne de mode (par exemple, emacs-mode-string). skip-completed-text (Off) Si configurée à On, modifie le comportement par défaut du com- plètement lors de l'insertion d'une unique correspondance dans la ligne. Elle n'est utilisée que lors d'un complètement effec- tué au milieu d'un mot. Si elle est activée, readline n'insère pas de caractères de complètement correspondant à des caractères situés après le curseur dans le mot en train d'être complété, ainsi les parties du mots situées après le curseur ne sont pas dupliquées. vi-cmd-mode-string ((cmd)) Si la variable show-mode-in-prompt est activée, cette chaîne est affichée immédiatement avant la dernière ligne de la première invite quand le mode d'édition de vi est activé et en mode com- mande. La valeur est développée comme un raccourci clavier, donc le jeu standard de préfixes meta- ou Control- et de séquences de protections par contre-oblique est disponible. Utiliser les ca- ractères de protection \1 et \2 pour ouvrir et fermer les sé- quences de caractères non imprimables, ce qui peut être utilisé pour inclure une suite de caractères de contrôle du terminal dans la chaîne de mode. vi-ins-mode-string ((ins)) Si la variable show-mode-in-prompt est activée, cette chaîne est affichée immédiatement avant la dernière ligne de la première invite quand le mode d'édition de vi est activé et en mode in- sertion. La valeur est développée comme un raccourci clavier, donc le jeu standard de préfixes meta- ou Control- et de sé- quences de protections par contre-oblique est disponible. Utili- ser les caractères de protection \1 et \2 pour ouvrir et fermer les séquences de caractères non imprimables, ce qui peut être utilisé pour inclure une suite de caractères de contrôle du ter- minal dans la chaîne de mode. visible-stats (Off) Si configurée à On, un caractère indiquant le type de fichier, comme signalé par stat(2) est ajouté aux noms de fichiers en af- fichant les complètements possibles. Constructions conditionnelles de readline Readline implémente un mécanisme inspiré des fonctionnalités de compi- lation conditionnelle du préprocesseur C qui permet d'effectuer le pa- ramétrage des raccourcis clavier et des variables selon les résultats de tests. Il y a quatre directives d'analyse utilisées. $if La structure $if permet de choisir les raccourcis selon le mode d'édition, le terminal utilisé ou l'application utilisant read- line. Le texte du test, après n’importe quel opérateur de compa- raison, va jusqu'à la fin de la ligne ; sauf notation contraire, aucun caractère n'est nécessaire pour le délimiter. mode La forme mode= de la directive $if est utilisée pour vé- rifier si readline est en mode emacs ou vi. Cela peut être utilisé conjointement à la commande set keymap, par exemple pour ne configurer les raccourcis des jeux de raccourcis emacs-standard et emacs-ctlx que si readline démarre en mode emacs. term La forme term= peut être utilisée pour ajouter des rac- courcis clavier spécifiques au terminal, comme associer des suites de touches produites par des touches de fonc- tion du terminal. Le mot à droite du signe = est comparé à la fois au nom complet du terminal et à la portion de nom du terminal qui précède le premier signe -. Cela per- met, par exemple, de faire correspondre sun avec à la fois sun et sun-cmd. version Le test de version peut être utilisé pour effectuer des comparaisons avec des versions particulières de readline. La version est développée selon la version actuelle de readline. L'ensemble d'opérateurs de comparaison inclut =, (et ==), !=, <=, >=, < et >. Le numéro de version fourni à droite de l'opérateur consiste en un numéro de version majeure, un point décimal facultatif et un numéro de version mineure facultatif (par exemple, 7.1). Si la version mineure est omise, on considère que c'est 0. L'opérateur peut être séparé de la chaîne version et de l'argument du numéro de version par une espace. application La structure application est utilisée pour inclure des paramétrages spécifiques à chaque application. Chaque programme utilisant la bibliothèque readline configure un nom d'application et un fichier d'initialisation peut tester une valeur particulière. Ce peut être utilisé pour associer des suites de touches à des fonctions utiles pour un certain programme. Par exemple, les commandes suivantes ajoutent une suite de touches qui protège le mot actuel ou précédant dans bash : $if Bash # Protéger le mot actuel ou le précédant "\C-xq": "\eb\"\ef\"" $endif variable La structure variable fournit des tests d'égalité simples pour les variables et les valeurs de readline. Les opéra- teurs de comparaison permis sont =, ==, et !=. Le nom de la variable doit être séparé de l'opérateur par une es- pace ; l'opérateur peut être séparé de la valeur à droite par une espace. Les variables de chaîne ainsi que les va- riables booléennes peuvent être testées. Les variables booléennes doivent être comparées aux valeurs on et off. $endif Cette commande, comme on l'a vu dans l'exemple ci-dessus, ter- mine une commande $if. $else Permet d'ajouter des commandes qui seront exécutées si un $if échoue. $include Cette directive prend un seul nom de fichier comme argument et y lit les commandes et les raccourcis. Par exemple, la directive suivante lirait le fichier /etc/inputrc : $include /etc/inputrc Recherche Readline fournit des commandes de recherche au sein de l'historique de commandes (consultez HISTORIQUE ci-dessous) des lignes contenant une chaîne donnée. Il y a deux modes de recherche : incrémental et non in- crémental. Les recherches incrémentales commencent avant même que l'utilisateur n'ait terminé de saisir la chaîne recherchée. À chaque caractère saisi, readline affiche l'élément suivant de l'historique qui correspond à la chaîne déjà entrée. Une recherche incrémentale nécessite seulement le nombre de caractères indispensable pour retrouver l'élément d'histo- rique désiré. Les caractères se trouvant dans la variable isearch-ter- minators servent à terminer une recherche incrémentale. Si aucune va- leur n'a été affectée à cette variable, les caractères Échappement (« Escape ») et Contrôle-J terminent une recherche incrémentale. Contrôle-G permet d'interrompre une recherche incrémentale et de res- taurer la ligne originale. Lorsque la recherche est finie, l'élément d'historique contenant la chaîne désirée devient la ligne actuelle. Pour trouver les autres éléments correspondant dans la file d'histo- rique, saisissez selon Contrôle-S ou Contrôle-R. Cela recherchera en avant ou en arrière dans l'historique l'élément suivant correspondant à la chaîne saisie jusque-là. Toute autre suite de touches associée à une commande readline interrompra la recherche et exécutera la commande. Par exemple, un changement de ligne interrompra la recherche et accep- tera la ligne, exécutant ainsi la commande de la file d'historique. Readline se souvient de la dernière chaîne de recherche incrémentale. Si deux Contrôle-R sont tapés sans caractère pour définir une nouvelle recherche de chaîne, toute chaîne mémorisée sera utilisée. Les recherches non incrémentales lisent la chaîne désirée en entier avant de démarrer la recherche de correspondance dans la file d'histo- rique. La chaîne peut être saisie par l'utilisateur ou faire partie du contenu de la ligne actuelle. Noms des commandes readline Ce qui suit est une liste des noms de commandes et les suites de touches auxquelles elles sont associées par défaut. Les noms de com- mandes sans suite de touche les accompagnant ne sont pas associées par défaut. Dans les descriptions suivantes, le curseur (« point ») se rap- porte à la position actuelle du curseur et la marque se rapporte à une position de curseur sauvegardée par la commande set-mark. Le texte entre le curseur et la marque est désigné comme la zone. Commandes de déplacement beginning-of-line (C-a) Reculer au début de la ligne actuelle. end-of-line (C-e) Avancer à la fin de la ligne. forward-char (C-f) Avancer d'un caractère. backward-char (C-b) Reculer d'un caractère. forward-word (M-f) Avancer jusqu'à la fin du mot suivant. Les mots sont composés de caractères alphanumériques (lettres et chiffres). backward-word (M-b) Reculer jusqu'au début du mot actuel ou du précédent. Les mots sont composés de caractères alphanumériques (lettres et chiffres). shell-forward-word Avancer jusqu'à la fin du mot suivant. Les mots sont séparés par des métacaractères non protégés de l'interpréteur. shell-backward-word Reculer jusqu'au début du mot actuel ou du précédent. Les mots sont séparés par des métacaractères non protégés de l'interpré- teur. previous-screen-line Tenter de déplacer le curseur vers la même colonne physique de l'écran sur la ligne physique précédente de l'écran. Cela n'aura pas l'effet désiré si la ligne actuelle de readline n'accepte pas sur d'une ligne physique ou si le but n'est pas supérieur à la longueur de l'invite plus la largeur de l'écran. next-screen-line Tenter de déplacer le curseur vers la même colonne de l'écran physique sur la ligne suivante de l'écran physique. Cela n'aura pas l'effet désiré si la ligne actuelle de readline n'accepte pas plus d'une ligne physique ou si la longueur de la ligne ac- tuelle de readline n'est pas supérieure à la longueur de l'in- vite plus la largeur de l'écran. clear-display (M-C-l) Effacer l'écran et, si possible, le tampon de défilement du ter- minal, puis rafraîchir la ligne actuelle, en laissant la ligne actuelle au sommet de l'écran. clear-screen (C-l) Effacer l'écran, puis rafraîchir la ligne actuelle, en laissant la ligne actuelle au sommet de l'écran. S'il y a un argument, rafraîchir la ligne actuelle sans effacer l'écran. redraw-current-line Rafraîchir la ligne actuelle. Commandes de manipulation de l'historique accept-line (changement de ligne, retour chariot) Valider la ligne, sans se soucier de l'emplacement du curseur. Si la ligne n'est pas vide, l'ajouter à la file d'historique, sous contrôle de la variable HISTCONTROL. Si cette ligne est une ligne d'historique modifiée, restaurer cette dernière. previous-history (C-p) Récupérer la commande précédente de la file d'historique, en re- montant dans la file. next-history (C-n) Récupérer la commande suivante dans la file d'historique, en descendant dans la file. beginning-of-history (M-<) Récupérer la première ligne de l'historique. end-of-history (M->) Retourner à la fin de l'historique de saisie, c'est-à-dire à la ligne en cours de saisie. operate-and-get-next (C-o) Valider la ligne actuelle pour exécution et récupérer de l'his- torique la ligne suivante liée à la ligne actuelle pour édition. Si un argument numérique est fourni, il spécifie l'entrée de l'historique à utiliser à la place de la ligne actuelle. fetch-history Avec argument numérique, récupérer cette entrée de la file d'historique et en faire la ligne actuelle. Sans argument, reve- nir à la première entrée de la file d'historique.' reverse-search-history (C-r) Rechercher en arrière dans l'historique, en remontant. C'est une recherche incrémentale. forward-search-history (C-s) Rechercher en avant dans l'historique, en descendant. C'est une recherche incrémentale. non-incremental-reverse-search-history (M-p) Rechercher une chaîne en arrière dans l'historique, en remontant depuis la ligne actuelle, utiliser une recherche non incrémen- tale pour une chaîne fournie par l'utilisateur. non-incremental-forward-search-history (M-n) Rechercher une chaîne en avant dans l'historique, utiliser une recherche non incrémentale pour une chaîne fournie par l'utili- sateur. history-search-forward Rechercher en avant dans l'historique la chaîne comprise entre le début de la ligne actuelle et la position du curseur. C'est une recherche non incrémentale. history-search-backward Rechercher en arrière dans l'historique la chaîne comprise entre le début de la ligne actuelle et la position du curseur. C'est une recherche non incrémentale. history-substring-search-backward Rechercher en arrière dans l'historique la chaîne comprise entre le début de la ligne actuelle et la position du curseur. La chaîne recherchée peut trouver une correspondance n'importe où dans une ligne de l'historique. C'est une recherche non incré- mentale. history-substring-search-forward Rechercher en avant dans l'historique la chaîne comprise entre le début de la ligne actuelle et la position du curseur. La chaîne recherchée peut trouver une correspondance n'importe où dans une ligne de l'historique. C'est une recherche non incré- mentale. yank-nth-arg (M-C-y) Insérer, à l'emplacement du curseur, le premier argument de la commande précédente. Généralement, il s'agit du second mot de la ligne précédente. Avec un argument n, insérer le n-ième mot de la commande précédente (les mots sont numérotés à partir de 0). Un argument négatif insère le n-ième mot en partant de la fin de la commande précédente. Une fois que l'argument n est traité, l'argument est extrait comme si le développement d'historique « !n » avait été indiqué. yank-last-arg (M-., M-_) Insérer le dernier argument de la commande précédente (le der- nier mot de l'élément précédent de la file d'historique). Avec un argument numérique, se comporte exactement comme yank-nth-arg. Les appels successifs à yank-last-arg remontent dans la file d'historique en insérant le dernier mot (ou le mot indiqué par l'argument du premier appel) de chaque ligne tour à tour. Tous les arguments numériques fournis à ces appels succes- sifs déterminent la direction de déplacement dans l'historique. Un argument négatif modifie la direction dans l'historique (en avant ou en arrière). Les outils de développement d'historique sont utilisés pour extraire le dernier mot, comme si le dévelop- pement d'historique « !$ » avait été indiqué. shell-expand-line (M-C-e) Développer, comme le fait l'interpréteur, la ligne actuelle. Cela effectue le développement des alias et d'historique, ainsi que tous les développements de mot de l'interpréteur. Consultez ci-dessous DÉVELOPPEMENT DE L'HISTORIQUE, pour une description détaillée du développement de l'historique. history-expand-line (M-^) Effectuer le développement d'historique sur la ligne actuelle. Consultez ci-dessous DÉVELOPPEMENT DE L'HISTORIQUE, pour une description détaillée. magic-space Effectuer le développement de l'historique sur la ligne actuelle et insérer une espace. Consultez ci-dessous DÉVELOPPEMENT DE L'HISTORIQUE, pour une description détaillée. alias-expand-line Effectuer le développement des alias sur la ligne actuelle. Consultez ALIAS ci-dessus pour une description des développe- ments d'alias. history-and-alias-expand-line Effectuer le développement de l'historique et des alias sur la ligne actuelle. insert-last-argument (M-., M-_) Un synonyme de yank-last-arg. edit-and-execute-command (C-x C-e) Appeler un éditeur sur la ligne de commande actuelle et exécuter le résultat comme une commande d'interpréteur. Bash tente d'ap- peler, dans cet ordre, $VISUAL, $EDITOR et emacs comme éditeur. Commande d'édition de texte end-of-file (généralement C-d) Le caractère indiquant la fin de fichier, comme défini, par exemple, par ``stty''. Si ce caractère est lu alors qu’aucun ca- ractère n’est sur la ligne, et que le curseur est au début de la ligne, readline l’interprète comme le fin de l’entrée et renvoie EOF. delete-char (C-d) Effacer le caractère sous le curseur. Si cette fonction est as- sociée au même caractère que le caractère EOF du terminal, comme c’est souvent le cas avec C-d, consultez les effets dans le pa- ragraphe précédent. backward-delete-char (Effacement ou « Rubout ») Effacer le caractère avant le curseur. Lorsque un argument numé- rique est indiqué, le texte effacé est sauvegardé dans le tampon circulaire. forward-backward-delete-char Effacer le caractère sous le curseur, sauf s'il est en fin de ligne, auquel cas le caractère avant le curseur est effacé. quoted-insert (C-q, C-v) Ajouter littéralement sur la ligne le caractère saisi suivant. Cela permet d'insérer des caractères comme C-q, par exemple. tab-insert (C-v TAB) Insérer un caractère de tabulation. self-insert (a, b, A, 1, !, ...) Insérer le caractère mentionné. transpose-chars (C-t) Échanger les caractères se trouvant devant et sous le curseur. Le curseur est avancé d'un caractère. À la fin d'une ligne, les caractères échangés sont les deux précédents. Les arguments né- gatifs n'ont aucun effet. transpose-words (M-t) Déplace le mot avant le curseur au-delà du mot après le curseur et déplace aussi le curseur sur ce mot. Si le curseur est à la fin de la ligne, cela échange les deux derniers mots de la ligne. upcase-word (M-u) Transformer le mot actuel (ou le suivant) en majuscules. Avec un argument négatif, agir sur le mot précédent mais ne pas déplacer le curseur. downcase-word (M-l) Transformer le mot actuel (ou le suivant) en minuscules. Avec un argument négatif, agir sur le mot précédent mais ne pas déplacer le curseur. capitalize-word (M-c) Passer en majuscule l'initiale du mot actuel (ou du suivant). Avec un argument négatif, agir sur le mot précédent mais ne pas déplacer le curseur. overwrite-mode Basculer en mode d'écrasement. Avec un argument numérique expli- cite strictement positif, bascule en mode d'écrasement. Avec un argument numérique explicite négatif ou nul, bascule en mode d'insertion. Cette commande n'affecte que le mode emacs ; le mode vi écrase de façon différente. Chaque appel à readline() démarre en mode d'insertion. En mode d'écrasement, les carac- tères associés à self-insert remplacent le texte sous le curseur plutôt que de déplacer le texte vers la droite. Les caractères associés à backward-delete-char remplacent le caractère avant le curseur par une espace. Par défaut, cette commande n'est pas as- sociée. Effacement et récupération kill-line (C-k) Effacer le texte depuis la position du curseur jusqu'à la fin de la ligne. backward-kill-line (C-x Effacement) Effacer en arrière jusqu'au début de ligne. unix-line-discard (C-u) Effacer le texte entre le début de la ligne et la position du curseur. Le texte est sauvegardé dans le tampon circulaire. kill-whole-line Effacer toute la ligne sans tenir compte de la position du cur- seur. kill-word (M-d) Effacer le texte entre le curseur et la fin du mot actuel ou, si entre des mots, jusqu'à la fin du mot suivant. Les limites des mots sont identiques à celles utilisées par forward-word. backward-kill-word (M-Effacement) Effacer le mot sous le curseur. Les limites de mots sont iden- tiques à celles utilisées par backward-word. shell-kill-word Effacer le texte entre le curseur et la fin du mot actuel ou, si entre des mots, jusqu'à la fin du mot suivant. Les limites des mots sont identiques à celles utilisées par shell-forward-word. shell-backward-kill-word Effacer le mot sous le curseur. Les limites de mots sont iden- tiques à celles utilisées par shell-backward-word. unix-word-rubout (C-w) Effacer le mot sous le curseur, en utilisant une espace blanche comme limite de mot. Le texte effacé est sauvegardé dans le tam- pon circulaire. unix-filename-rubout Effacer le mot sous le curseur, en utilisant l'espace blanche et la barre oblique comme limites de mot. Le texte supprimé est sauvegardé dans le tampon circulaire. delete-horizontal-space (M-\) Effacer toutes les espaces blanches et les tabulations autour du curseur. kill-region Effacer le texte de la zone actuelle. copy-region-as-kill Copier le texte de la zone vers le tampon circulaire. copy-backward-word Copier le mot précédant le curseur dans le tampon circulaire. Les limites de mots sont identiques à celles de backward-word. copy-forward-word Copier le mot suivant le curseur dans le tampon circulaire. Les limites de mots sont identiques à celles de forward-word. yank (C-y) Récupérer le texte au sommet du tampon circulaire à la position du curseur dans le tampon. yank-pop (M-y) Exécuter une rotation du tampon circulaire et récupérer le texte situé à son nouveau sommet. Cela ne fonctionne qu'après yank ou yank-pop. Arguments numériques digit-argument (M-0, M-1, ..., M--) Ajouter ce chiffre à l'argument en cours de rédaction ou créer un nouvel argument. M-- crée un argument négatif. universal-argument Il s'agit d'une autre façon d'indiquer un argument. Si cette commande est suivie d'un ou plusieurs chiffres facultativement précédés d'un signe moins, ces chiffres définissent l'argument. Si la commande est suivie de chiffres, une nouvelle exécution de universal-argument termine l'argument numérique, mais est igno- rée dans les autres cas. Par exception, si cette commande est suivie immédiatement par un caractère qui n'est ni un chiffre ni le signe moins, le compteur d'arguments de la commande suivante est multiplié par 4. Le compteur d'arguments est initialement à un, donc la première exécution de cette commande amène le comp- teur d'arguments à quatre, une seconde fois porte le compteur d'arguments à seize et ainsi de suite. Complètement complete (TAB) Essayer d'effectuer un complètement du texte situé avant le cur- seur. Bash effectue le complètement en considérant tour à tour le texte comme une variable (s'il commence par $), un nom d'uti- lisateur (s'il commence par ~), un nom de machine (s'il commence par @) ou une commande (y compris les alias et les fonctions). Si aucun ne correspond, un complètement de nom de fichier est essayé. possible-completions (M-?) Afficher les complètements possibles pour le texte situé avant le curseur. insert-completions (M-*) Insérer avant le curseur l'ensemble des complètements qui au- raient été produits par possible-completions. menu-complete Analogue à complete, mais en remplaçant le mot à compléter par une seule correspondance de la liste des complètements pos- sibles. Des exécutions répétées de menu-complete parcourent la liste des complètements possibles, en insérant chaque correspon- dance tour à tour. À la fin de la liste des complètements, une alarme est émise (selon la configuration de bell-style) et le texte original est restauré. Un argument de n déplace de n posi- tions dans la liste des correspondances. Un argument négatif peut être utilisé pour revenir en arrière dans la liste. Cette commande est destinée à être associée à la touche TAB, mais ne l'est pas par défaut. menu-complete-backward Identique à menu-complete, mais se déplace en arrière dans la liste des complètements possibles, comme si un argument négatif avait été passé à menu-complete. Cette commande n'est associée à aucune touche par défaut. delete-char-or-list Effacer le caractère sous le curseur sauf au début ou en fin de ligne (comme delete-char). En fin de ligne, se comporte comme possible-completions. Cette commande n'est associée à aucune touche par défaut. complete-filename (M-/) Essayer le complètement des noms de fichiers sur le texte situé avant le curseur. possible-filename-completions (C-x /) Afficher les complètements possibles du texte situé avant le curseur, traité comme un nom de fichier. complete-username (M-~) Essayer le complètement sur le texte situé avant le curseur, en le traitant comme un nom d'utilisateur. possible-username-completions (C-x ~) Afficher les complètements possibles du texte situé avant le curseur, en le traitant comme un nom d'utilisateur. complete-variable (M-$) Essayer le complètement sur le texte situé avant le curseur, en le traitant comme une variable de l'interpréteur. possible-variable-completions (C-x $) Afficher les complètements possibles du texte situé avant le curseur, en le traitant comme une variable de l'interpréteur. complete-hostname (M-@) Essayer le complètement sur le texte situé avant le curseur, en le traitant comme un nom de machine. possible-hostname-completions (C-x @) Afficher les complètements possibles du texte situé avant le curseur, en le traitant comme un nom de machine. complete-command (M-!) Essayer le complètement sur le texte situé avant le curseur, en le traitant comme un nom de commande. Le complètement des com- mandes essaie de faire correspondre le texte, dans cet ordre, aux alias, mots réservés, fonctions de l'interpréteur, commandes internes de l'interpréteur et finalement les noms de fichiers exécutables. possible-command-completions (C-x !) Afficher les complètements possibles du texte situé avant le curseur, en le traitant comme un nom de commande. dynamic-complete-history (M-TAB) Essayer le complètement du texte situé avant le curseur, en le comparant aux lignes de la file d'historique lui correspondant pour les complètements possibles. dabbrev-expand Essayer le menu de complètement du texte situé avant le curseur, en le comparant aux lignes de la file d'historique lui corres- pondant pour les complètements possibles. complete-into-braces (M-{) Effectuer un complètement en noms de fichiers et insérer la liste des complètements possibles entre accolades afin que la liste soit exploitable par l'interpréteur (consultez Développe- ment des accolades ci-dessus). Macros clavier start-kbd-macro (C-x () Démarrer la mémorisation dans la macro en cours des caractères tapés. end-kbd-macro (C-x )) Arrêter la mémorisation dans la macro en cours des caractères saisis et conserver la définition. call-last-kbd-macro (C-x e) Réexécuter la dernière macro définie, en agissant comme si les caractères contenus dans cette macro étaient saisis au clavier. print-last-kbd-macro () Afficher la dernière macro de clavier définie, mise en forme de façon à être incorporée dans un fichier inputrc. Divers re-read-init-file (C-x C-r) Lire le contenu du fichier inputrc et prendre en compte tous raccourcis ou affectations de variables qui s'y trouvent. abort (C-g) Abandonner l'édition en cours et émettre une alarme de terminal (selon la configuration de la variable bell-style). do-lowercase-version (M-A, M-B, M-x, ...) Si le caractère x précédé de Méta est en majuscule, exécuter la commande qui est associée aux caractères minuscules correspon- dants. Le comportement est non défini si x est déjà en minus- cule. prefix-meta (ESC) Considérer le prochain caractère saisi comme un Méta. ESC f est équivalent à Meta-f. undo (C-_, C-x C-u) Fonction d'annulation incrémentale, chaque ligne étant mémorisée séparément. revert-line (M-r) Annuler toutes les modifications sur cette ligne. C’est équi- valent à répéter undo suffisamment de fois pour ramener la ligne à son état initial. tilde-expand (M-&) Effectuer le développement du tilde sur le mot actuel. set-mark (C-@, M-<space>) Placer la marque à la position actuelle du curseur. Si un argu- ment numérique est fourni, la marque est posée à la position correspondante. exchange-point-and-mark (C-x C-x) Échanger le curseur et la marque. La position actuelle du cur- seur est configurée à la position sauvegardée précédemment et l'ancienne position du curseur est mémorisée comme la marque. character-search (C-]) Un caractère est lu et le curseur déplacé à l'occurrence sui- vante de ce caractère. Un argument négatif recherche les occur- rences précédentes. character-search-backward (M-C-]) Un caractère est lu et le curseur déplacé à l'occurrence précé- dente de ce caractère. Un argument négatif recherche les occur- rences suivantes. skip-csi-sequence Lire suffisamment de caractères pour englober une suite multi- touche comme celles définies pour des touches comme Début et Fin. De telles suites commencent par un indicateur de suite de contrôle (« control sequence indicator » ou CSI), habituellement ESC-[. Si cette suite est associée à "\[", les touches qui pro- duisent de telles suites n'auront pas d'effet à moins d'être ex- plicitement associées à une commande readline, au lieu d'insérer des caractères parasites dans le tampon d'édition. N'est asso- ciée à aucune touche par défaut, mais est souvent associée à ESC-[. insert-comment (M-#) Sans argument numérique, la valeur de la variable comment-begin de readline est insérée au début de la ligne actuelle. Si un ar- gument numérique est fourni, cette commande agit comme une bas- cule : si les caractères du début de ligne ne correspondent pas à la valeur de comment-begin, la valeur est insérée, sinon, les caractères de comment-begin sont effacés du début de la ligne. Dans les deux cas, la ligne est acceptée comme si un changement de ligne avait été saisi. La valeur par défaut de comment-begin conduit cette commande à transformer la ligne actuelle de l'in- terpréteur en commentaire. Si un argument numérique conduit à l'effacement du caractère de commentaire, la ligne sera exécutée par l'interpréteur. spell-correct-word (C-x s) Effectuer la correction orthographique sur le mot actuel, en le traitant comme un répertoire ou un nom de fichier, de la même manière que l'option de l'interpréteur cdspell. Les limites des mots sont identiques à celles utilisées par shell-forward-word. glob-complete-word (M-g) Le mot avant le curseur est traité comme un motif pour un déve- loppement de chemin, avec un astérisque implicitement ajouté. Ce motif est utilisé pour produire une liste de noms de fichiers correspondants pour de possibles complètements. glob-expand-word (C-x *) Le mot précédant le curseur est considéré comme un motif de dé- veloppement de chemin et la liste des fichiers correspondants est insérée à sa place. Si un argument numérique est fourni, un astérisque est ajouté avant le développement du chemin. glob-list-expansions (C-x g) La liste des développements qui auraient été produits par glob-expand-word est affichée et la ligne est rafraîchie. Si un argument numérique est fourni, un astérisque est ajouté devant le développement du chemin. dump-functions Afficher toutes les fonctions et leurs raccourcis clavier sur le flux de sortie de readline. Si un argument numérique est fourni, la sortie est mise en forme de façon à être incorporée dans un fichier inputrc. dump-variables Afficher toutes les variables readline modifiables et leurs va- leurs sur le flux de sortie de readline. Si un argument numé- rique est fourni, la sortie est mise en forme de façon à être incorporée dans un fichier inputrc. dump-macros Afficher toutes les suites de touches readline associées à des macros et les chaînes auxquelles elles correspondent. Si un ar- gument numérique est fourni, la sortie est mise en forme de fa- çon à être incorporée dans un fichier inputrc. display-shell-version (C-x C-v) Afficher des informations sur la version actuelle de bash. Complètement programmable Lorsqu'un complètement de mot est tenté pour un argument d'une commande pour laquelle une spécification de complètement a été définie en utili- sant la commande interne complete (consultez COMMANDES INTERNES DE L'INTERPRÉTEUR ci-dessous), les outils de complètement programmables sont appelés. En premier lieu, le nom de la commande est identifié. Si le mot de com- mande est vide (complètement essayé en début de ligne vide), toutes les spécifications de complètement définies par l'option -E de complete sont utilisées. Si une spécification de complètement a été définie pour cette commande, elle est utilisée pour produire la liste des complète- ments possibles pour le mot. Si le mot de commande est un chemin d'ac- cès complet, on cherche en premier lieu une spécification de complète- ment pour le chemin d'accès complet. Si aucune spécification de complè- tement n'est trouvée pour le chemin d'accès complet, une tentative est effectuée pour trouver une spécification de complètement pour la partie située après la barre oblique finale. Si ces recherches ne donnent au- cun résultat sous forme de spécification de complètement, toutes les spécifications de complètement définies par l'option -D de complete sont utilisées par défaut. S'il n'existe pas de spécification de com- plètement par défaut, bash tente un développement d'alias sur le mot de commande en dernier ressort et tente de trouver une spécification de complètement pour le mot de commande à partir de n'importe quel déve- loppement ayant réussi. Une fois qu'une spécification de complètement a été trouvée, elle est utilisée pour produire la liste des mots correspondants. Si aucune spé- cification de complètement n'est trouvée, le complètement par défaut de bash, tel que décrit ci-dessus dans Complètement est effectué. Tout d'abord, les actions définies par la spécification de complètement sont utilisées. Seules les correspondances préfixées par le mot à com- pléter sont renvoyées. Lorsque l'option -f ou -d sont utilisées pour le complètement des noms de fichier ou de répertoire, la variable d'inter- préteur FIGNORE est utilisée pour filtrer les correspondances. Tous les complètements indiqués par le motif de développement de chemin de l'option -G sont ensuite produits. Il n'est pas nécessaire que les mots produits par le motif correspondent au mot à compléter. La va- riable de l'interpréteur GLOBIGNORE n'est pas utilisée pour filtrer les correspondances, mais la variable FIGNORE est utilisée. Ensuite, la chaîne indiquée comme argument à l'option -W est prise en compte. Cette chaîne est tout d'abord découpée en utilisant les carac- tères de la variable spéciale IFS comme délimiteurs. Les protections de l'interpréteur sont prises en compte. Chaque mot est ensuite développé en utilisant les développements d'accolades, du tilde, des paramètres et des variables, de même que la substitution de commande et le déve- loppement arithmétique comme décrit ci-dessus dans DÉVELOPPEMENTS. Les résultats sont découpés en utilisant les règles décrites ci-dessus dans Découpage en mots. Les résultats du développement sont comparés au mot à compléter en considérant ce dernier comme préfixe et les mots corres- pondants deviennent les complètements possibles. Après la création de ces correspondances, toute fonction de l'interpré- teur ou commande indiquée avec les options -F et -C est appelée. Lorsque la commande ou la fonction est appelée, les variables COMP_LINE, COMP_POINT, COMP_LINKEY, et COMP_POINTYPE se voient affec- tées de valeurs comme décrit ci-dessus dans Variables de l'interpré- teur. Si une fonction de l'interpréteur est appelée, les variables COMP_WORDS et COMP_CWORD sont également créées. Lorsqu'une fonction ou une commande est appelée, le premier argument ($1) est le nom de la commande dont les arguments doivent être complétés, le deuxième argu- ment ($2) est le mot à compléter et le troisième argument ($3) est le mot précédant celui devant être complété sur la ligne de commande ac- tuelle. Aucun filtrage des complètements produits pour le mot à complé- ter n'est effectué ; la fonction ou la commande a toute liberté dans la production des correspondances. Toute fonction indiquée avec -F est appelée en premier. La fonction peut utiliser tous les outils de l'interpréteur, incluant la commande interne compgen décrite ci-dessous, pour produire les correspondances. Elle doit mettre les complètements possibles dans la variable tableau COMPREPLY, un par élément de tableau. Ensuite, toute commande indiquée avec l'option -C est appelée dans un environnement équivalent à la substitution de commande. Elle devrait afficher une liste des complètements possibles, un par ligne, sur la sortie standard. Si nécessaire, une contre-oblique peut être utilisée pour protéger un caractère de changement de ligne. Après la création de tous les complètements possibles, tout filtre, in- diqué avec l'option -X, est appliqué à la liste. Ce filtre est un motif comme dans le développement des chemins ; un & dans le motif est rem- placé par le texte du mot en cours de complètement. Un & littéral peut être protégé par une contre-oblique ; la contre-oblique est supprimée avant la tentative de mise en correspondance. Tout complètement qui correspond au motif sera supprimé de la liste. Un ! au début du motif provoque la négation de ce motif ; dans ce cas, tout complètement ne correspondant pas au motif sera supprimé de la liste. Si l'option d'in- terpréteur nocasematch est activée, la mise en correspondance est ef- fectuée sans tenir compte de la casse des caractères alphabétiques. Finalement, tous préfixe et suffixe indiqués avec les options -P et -S sont ajoutés à chacun des éléments de la liste de complètement et le résultat est renvoyé au programme de complètement de readline comme étant la liste des complètements possibles. Si les opérations précédemment appliquées ne produisent aucune corres- pondance et si l'option -o dirnames a été fournie à complete lorsque la spécification de complètement a été définie, le complètement des noms de répertoire est tenté. Si l'option -o plusdirs a été fournie à complete lors de la définition de la spécification de complètement, le complètement des noms de réper- toires est tenté et toute correspondance est ajoutée aux résultats des autres actions. Par défaut, si une spécification de complètement est trouvée, tout ce qu'elle produit est renvoyé au programme de complètement comme un jeu complet des complètements possibles. Les complètements par défaut de bash ne sont pas tentés et le complètement de fichiers par défaut de readline est désactivé. Si l'option -o bashdefault a été fournie à com- plete lors de la définition de la spécification de complètement, les complètements par défaut de bash sont tentés si la spécification de complètement ne produit aucune correspondance. Si l'option -o default a été fournie à complete lors de la définition de la spécification de complètement, le complètement par défaut de readline sera effectué si la spécification de complètement (et, si tentés, les complètements par défaut de bash) ne produit aucune correspondance. Lorsqu'une spécification de complètement indique qu'un complètement de nom de répertoire est souhaité, les fonctions de complètement program- mable forcent readline à ajouter une barre oblique pour compléter les noms qui sont des liens symboliques vers des répertoires, selon la va- leur de la variable mark-directories de readline, indépendamment du pa- ramétrage de la variable mark-symlinked-directories de readline. La modification dynamique des complètements est également possible. C'est particulièrement utile combiné avec un complètement par défaut indiqué à l'aide de complete -D. Les fonctions de l'interpréteur exécu- tés comme gestionnaires de complètement permettent d'annoncer que le complètement devrait être réessayé en renvoyant un état final de 124. Si une fonction de l'interpréteur renvoie 124, et modifie la spécifica- tion de complètement associée à la commande sur laquelle le complète- ment est essayé (fournie comme premier argument quand la fonction est exécutée), le complètement programmable recommence depuis le début, en essayant de trouver une nouvelle spécification de complètement pour cette commande. Un jeu de complètements peut ainsi être construit dyna- miquement lorsque le complètement est essayé, plutôt que d'être chargé entièrement au début. Par exemple, en supposant l'existence d'une bibliothèque de spécifica- tions de complètement, chacune conservée dans un fichier correspondant au nom de la commande, la fonction de complètement par défaut suivante chargerait les complètements de façon dynamique : _completion_loader() { . "/etc/bash_completion.d/$1.sh" >/dev/null 2>&1 && return 124 } complete -D -F _completion_loader -o bashdefault -o default HISTORIQUE Quand l'option -o history de la commande interne set est activée, l'in- terpréteur donne accès à un historique des commandes, c'est-à-dire la liste des commandes précédemment utilisées. La valeur de la variable HISTSIZE est utilisée comme nombre de commandes à sauvegarder dans la file d'historique. Le texte des HISTSIZE dernières commandes (par dé- faut 500) est sauvegardé. L'interpréteur conserve chaque commande dans la file d'historique avant le développement des paramètres et des va- riables (consultez DÉVELOPPEMENTS ci-dessus) mais après avoir effectué le développement de l'historique, selon les valeurs des variables de l'interpréteur HISTIGNORE 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). Le fichier désigné par la valeur de HISTFILE est tronqué si nécessaire, pour ne pas contenir plus de lignes que le nombre précisé par HISTFILE- SIZE. Si HISTFILESIZE est détruite, ou définie à NULL, une valeur non numérique ou une valeur numérique strictement inférieure à zéro, le fi- chier d’historique n’est pas tronqué. Quand le fichier d'historique est lu, les lignes commençant par le caractère de commentaire d'historique suivi immédiatement par un chiffre sont considérées comme des horoda- tages de la ligne d'historique précédente. Ces horodatages sont facul- tativement affichés en fonction de la valeur de la variable HISTTIME- FORMAT. Lorsqu'un interpréteur avec historique activé se termine, les HISTSIZE dernières lignes de la file d'historique sont copiées dans le fichier HISTFILE. Si l'option d'interpréteur histappend est activée (consultez la description de shopt dans COMMANDES INTERNES DE L'INTER- PRÉTEUR ci-dessous), les lignes sont ajoutées au fichier d'historique, sinon le fichier est écrasé. Si HISTFILE est inexistante ou si le fi- chier d'historique n'est pas accessible en écriture, l'historique n'est pas sauvegardé. Si la variable HISTTIMEFORMAT est configurée, les horo- datages sont écrits dans le fichier d'historique, repérés par le carac- tère de commentaire d'historique, afin d'être conservés au fur et à me- sure des sessions de l'interpréteur. Le caractère de commentaire d'his- torique est utilisé pour distinguer l'horodatage des autres lignes de l'historique. Après la sauvegarde de l'historique, le fichier d'histo- rique est tronqué pour ne pas contenir plus de HISTFILESIZE lignes. Si HISTFILESIZE est détruite, ou définie à NULL, une valeur non numérique ou une valeur numérique inférieure à zéro, le fichier d’historique n’est pas tronqué. La commande interne fc (consultez COMMANDES INTERNES DE L'INTERPRÉTEUR ci-dessous) permet d'afficher, d'éditer ou de réexécuter une partie de la file d'historique. La commande interne history permet d'afficher la file d'historique et de manipuler le fichier d'historique. Quelque soit le mode d'édition en ligne de commande, des commandes de recherche donnent accès à la file d'historique. L'interpréteur permet de configurer quelles commandes seront sauvegar- dées dans la file d'historique. Les variables HISTCONTROL et HISTIGNORE peuvent être configurées pour conduire l'interpréteur à ne sauvegarder qu'un sous-ensemble des commandes saisies. L'option d'interpréteur cmd- hist, si activée, conduit l'interpréteur à essayer de sauvegarder chaque ligne d'une commande multiligne dans le même élément de l'histo- rique, en ajoutant des points-virgules si nécessaire pour préserver l'exactitude de la syntaxe. L'option d'interpréteur lithist conduit l'interpréteur à sauvegarder les commandes avec des changements de ligne incorporés plutôt que des points-virgules. Consultez ci-dessous la description de la commande interne shopt dans COMMANDES INTERNES DE L'INTERPRÉTEUR pour des détails sur la création et la destruction des options d'interpréteur. DÉVELOPPEMENT DE L'HISTORIQUE L'interpréteur propose des possibilités de développement de l'histo- rique qui sont semblables à celles de csh. Ce paragraphe décrit quelles syntaxes sont disponibles. Cette fonctionnalité est activée par défaut dans les interpréteurs interactifs et peut être désactivée en utilisant l'option +H de la commande interne set (consultez COMMANDES INTERNES DE L'INTERPRÉTEUR ci-dessous). Les interpréteurs non interactifs n'effec- tuent pas de développement d'historique par défaut. Le développement de l'historique permet d'insérer des mots de la file d'historique dans le flux de saisie, facilitant la répétition de com- mandes, l'insertion des arguments d'une ligne antérieure dans la saisie en cours ou la correction rapide d'erreurs dans les commandes précé- dentes. Le développement de l'historique est effectué immédiatement après la lecture d'une ligne complète, avant que l'interpréteur ne la décompose en mots. Il est effectué sur chaque ligne individuellement sans prendre en compte une protection sur les lignes précédentes. Il se déroule en deux parties. La première consiste à déterminer la ligne de la file d'historique à utiliser pour les substitutions, la seconde permet de sélectionner les parties de la ligne à inclure dans la ligne actuelle. La ligne sélectionnée dans l'historique est l'événement et les parties de cette ligne à réutiliser sont des mots. Plusieurs modificateurs per- mettent de manipuler les mots sélectionnés. La ligne est découpée en mots de la même façon que lors de la lecture d'une saisie, ainsi plu- sieurs mots séparés par des métacaractères et encadrés par des guille- mets sont considérés comme un unique mot. Le développement de l'histo- rique est introduit par l'apparition du caractère de développement, qui est ! par défaut. Seules la contre-oblique (\) et les guillemets simples permettent de protéger le caractère de développement de l'his- torique, mais le caractère de développement de l'historique est aussi traité comme protégé s'il précède immédiatement le guillemet double fermant dans une chaîne entre guillemets doubles. Plusieurs caractères empêchent le développement de l'historique s'ils se trouvent immédiatement après le caractère de développement de l'his- torique, même s'il n'est pas protégé : espace, tabulation, changement de ligne, retour chariot et =. Si l'option d'interpréteur extglob est activée, ( empêchera aussi le développement. Plusieurs options d'interpréteur, configurables avec la commande in- terne shopt, permettent d'ajuster le comportement du développement de l'historique. Si l'option d'interpréteur histverify est activée (consultez la description de la commande interne shopt ci-dessous) et si readline est utilisée, les substitutions d'historique ne sont pas transmises tout de suite à l'analyseur de l'interpréteur. À la place, la ligne développée est rechargée dans le tampon d'édition de readline pour permettre des modifications ultérieures. Si readline est utilisée et si l'option histreedit est activée, une substitution d'historique qui échoue est rechargée dans la mémoire tampon de readline pour cor- rection. L'option -p de la commande interne history peut servir à exa- miner ce qu'une substitution donnera avant de l'employer réellement. L'option -s de la commande interne history permet d'ajouter des com- mandes à la fin de la file d'historique sans les avoir effectivement exécutées, afin qu'elles soient disponibles pour des rappels ulté- rieurs. L'interpréteur offre le contrôle des divers caractères utilisés par le mécanisme de développement de l'historique (consultez la description de histchars ci-dessus dans Variables de l'interpréteur). L'interpréteur utilise le caractère de commentaire d'historique pour repérer l'horoda- tage lors de l'écriture du fichier d'historique. Indicateur d'événement Un indicateur d'événement est une référence à un élément ligne de com- mande dans la file d'historique. Sauf s'il s'agit d'une référence abso- lue, les événements sont relatifs à la position actuelle dans la file d'historique. ! Débute une substitution d'historique, sauf s'il est suivi par un blanc, changement de ligne, retour chariot, = ou ( (lorsque l'option d'interpréteur extglob est activée en utilisant la com- mande interne shopt). !n Se rapporte à la ligne de commande n. !-n Se rapporte à la commande actuelle moins n. !! Se rapporte à la commande précédente. C'est un synonyme de « !-1 ». !chaîne Se rapporte à la commande la plus récente précédant la position actuelle dans la file d'historique commençant par chaîne. !?chaîne[?] Se rapporte à la commande la plus récente précédant la position actuelle dans la file d'historique contenant chaîne. Le ? final peut être omis si chaîne est immédiatement suivie d'un change- ment de ligne. Si chaîne est absente, la chaîne de la dernière recherche est utilisée ; c'est une erreur s'il n'y a pas de chaîne de recherche précédente. ^chaîne_1^chaîne_2^ Substitution rapide. Répéter la commande précédente en rempla- çant chaîne_1 par chaîne_2. Équivalent à « !!:s^chaîne_1^chaîne_2^ » (consultez Modificateurs ci-des- sous). !# La ligne entière tapée jusqu'à présent. Indicateurs de mots Ces indicateurs servent à sélectionner les mots désirés dans un événe- ment. Un : 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 noté 0 (zéro). Les mots sont insérés dans la ligne actuelle, séparés par des espaces. 0 (zéro) Le zéroième mot. Pour l'interpréteur, c'est le nom de la com- mande. n Le n-ième mot. ^ Le premier argument, c'est-à-dire le mot 1. $ Le dernier mot. C’est généralement le dernier argument, mais qui sera développé en zéroième mot s’il n’y a qu’un seul mot sur la ligne. % Le premier mot correspondant à la recherche « ?chaîne? » la plus récente, si la chaîne de recherche débute par un caractère qui fait partie d'un mot. x-y Un intervalle de mots, « -y » permet d'abréger « 0-y ». * Tous les mots sauf le zéroième. C'est un synonyme pour « 1-$ ». Il n'est pas erroné d'utiliser * s'il n'y a qu'un mot dans l'événement ; la chaîne vide est renvoyée dans ce cas. x* Abréviation de x-$. x- Abréviation de x-$ comme x*, mais sans le dernier mot. Si x est absent, la valeur par défaut est 0. Si un indicateur de mot est fourni sans indication d'événement, la der- nière commande est utilisée. Modificateurs Après un indicateur de mot facultatif, une suite d'un ou plusieurs des modificateurs suivants peut apparaître, chacun précédé par un « : ». Cela modifie ou corrige le ou les mots sélectionnés à partir de l’évé- nement de l'historique. h Éliminer la fin du chemin d'accès, en ne gardant que le début. t Supprimer tout le début d'un chemin d'accès, en ne gardant que la fin. r Supprimer un suffixe final de la forme .xxx, en ne gardant que le nom de base. e Supprimer tout sauf le suffixe final. p Afficher la nouvelle commande sans l'exécuter. q Protéger les mots substitués, pour éviter des substitutions fu- tures. x Protéger les mots substitués comme avec q, mais avec séparation des mots aux blancs et changements de ligne. Les modificateurs q et x s'excluent mutuellement ; le dernier fourni est utilisé. s/ancien/nouveau/ Remplacer par nouveau la première occurrence de ancien sur la ligne d'événement. Tout caractère peut être utilisé comme déli- miteur à la place de /. Le dernier délimiteur est facultatif si c'est le dernier caractère de la ligne d'événement. Le délimi- teur peut être protégé dans ancien et nouveau avec une seule contre-oblique. Si & apparaît dans nouveau, il est remplacé par ancien. Une seule contre-oblique protégera le &. Si ancien est NULL, il est configuré au dernier ancien substitué ou si aucune substitution n'a eu lieu précédemment, à la dernière chaîne dans une recherche !?chaîne[?]. Si nouveau est NULL, chaque corres- pondance à ancien est supprimée. & Répéter la substitution précédente. g Appliquer les modifications sur toute la ligne d'événements. C'est utilisé conjointement à « :s » (par exemple « :gs/an- cien/nouveau/ ») ou « :& ». Si utilisé avec « :s », tout délimi- teur peut être utilisé à la place de / et le dernier délimiteur est facultatif si c'est le dernier caractère de la ligne d'évé- nements. Un a peut être utilisé en tant que synonyme de g. G Appliquer une fois le modificateur « s » ou « & » suivant à tous les mots de la ligne d'événement. COMMANDES INTERNES DE L'INTERPRÉTEUR Sauf indication contraire, chaque commande interne décrite dans ce pa- ragraphe comme acceptant des options précédées par - accepte également la notation -- pour signaler la fin des options. Les commandes internes :, true, false et test/[ n'acceptent aucune option et ne traitent pas -- particulièrement. Les commandes internes exit, logout, return, break, continue, let et shift acceptent et traitent les arguments com- mençant par - sans avoir besoin de --. Les autres commandes internes, qui acceptent des arguments mais qui ne sont pas déclarées explicite- ment comme acceptant des options, considèrent les arguments commençant par - comme des options non valides, donc -- est obligatoire pour évi- ter cette interprétation. : [arguments] Sans effet ; cette commande ne fait rien d'autre que développer les arguments et effectuer toute redirection indiquée. L'état renvoyé est 0. . fichier [arguments] source fichier [arguments] Lire et exécuter les commandes du fichier dans l'environnement de l'interpréteur actuel, puis renvoyer l'état final de la der- nière commande exécutée depuis fichier. Si le nom du fichier ne contient pas de barre oblique, les chemins d'accès contenus dans PATH sont parcourus pour rechercher le répertoire contenant le fichier, mais le fichier n'a pas besoin d'être exécutable. Lorsqu'il est recherché dans PATH le fichier n'a pas besoin d'être exécutable. Lorsque bash n'est pas en mode POSIX, il exa- mine le répertoire de travail actuel si aucun fichier n'est trouvé dans PATH. Si l'option sourcepath de la commande interne shopt est désactivée, le PATH n'est pas parcouru. Si des argu- ments sont fournis, ils sont transmis dans les paramètres posi- tionnels lorsque le fichier est exécuté. Sinon les paramètres positionnels ne sont pas modifiés. Si l'option -T est activée, . hérite de toutes les captures de DEBUG ; si elle ne l'est pas, toutes les chaînes de capture de DEBUG sont sauvegardées et res- taurées autour de l'appel à ., et détruit les captures de DEBUG lors de son exécution. Si -T n'existe pas et si le fichier ve- nant de la source modifie la capture de DEBUG, la nouvelle va- leur est conservée quand . se termine. L'état renvoyé est l'état de la dernière commande terminée au sein du script (0 si aucune commande n'a été exécutée) et faux si le fichier n'est pas trouvé ou ne peut être lu. alias [-p] [nom[=valeur] ...] La commande alias sans argument ou avec l'option -p affiche sur la sortie standard la liste des alias actuellement définis, sous la forme nom=valeur. Lorsque des arguments sont fournis, un alias est créé pour chaque nom auquel on a donné une valeur. Une espace finale dans une valeur conduira à la recherche d'alias dans le mot suivant lors du développement de l'alias. Pour tous les noms sans valeur fournie dans la liste d'arguments, le nom et la valeur de l'alias sont affichés. La commande alias renvoie vrai, à moins qu'un nom n'ait été indiqué pour lequel aucun alias n'a été défini. bg [tâche ...] Reprendre en arrière-plan chaque tâche suspendue, comme si elle avait été lancée avec &. Si aucune tâche n'est précisée, la no- tion d'interpréteur de tâche actuelle est utilisée. bg tâche renvoie 0 sauf si le contrôle des tâches est désactivé, ou, quand le contrôle des tâches est activé, si une tâche précisée n'a pas été trouvée ou a été lancée sans contrôle de tâches. bind [-m jeu_de_raccourcis] [-lpsvPSVX] bind [-m jeu_de_raccourcis] [-q fonction] [-u fonction] [-r suite_de_touches] bind [-m jeu_de_raccourcis] -f fichier bind [-m jeu_de_raccourcis] -x suite_de_touches:commande_de_l'interpré- teur bind [-m jeu_de_raccourcis] suite_de_touches:nom_de_fonction bind [-m jeu_de_raccourcis] suite_de_touches:commande_readline bind readline-command-line Afficher les associations de touches readline actuelles et les raccourcis de fonctions, associer une suite de touches à une fonction ou une macro readline ou créer une variable readline. Chaque argument qui n'est pas une option est une commande comme elle devrait apparaître dans un fichier d'initialisation de readline comme .inputrc, mais chaque raccourci ou commande doit être fourni comme un argument indépendant ; par exemple « "\C-x\C-r": re-read-init-file ». Les options, si fournies, ont les significations suivantes : -m jeu_de_raccourcis Utiliser le jeu_de_raccourcis comme jeu de raccourcis de- vant être concerné par les raccourcis ultérieurs. Les noms de jeu_de_raccourcis possibles sont emacs, emacs-standard, emacs-meta, emacs-ctlx, vi, vi-move, vi-command et vi-insert. vi est équivalent à vi-command (vi-move est aussi un synonyme) ; emacs est équivalent à emacs-standard. -l Afficher la liste des noms de toutes les fonctions read- line. -p Afficher les noms des fonctions readline et leurs rac- courcis de façon à pouvoir les relire. -P Afficher les noms des fonctions readline et leurs rac- courcis. -s Afficher les suites de touches readline associées aux ma- cros et les chaînes correspondantes, de façon à pouvoir les relire. -S Afficher les suites de touches readline associées aux ma- cros et les chaînes correspondantes. -v Afficher les noms des variables readline et leurs valeurs de façon à pouvoir les relire. -V Afficher les noms des variables readline et leurs va- leurs. -f fichier Lire les raccourcis clavier dans fichier. -q fonction Rechercher les touches permettant d'appeler la fonction indiquée. -u fonction Dissocier toutes les touches associées à fonction. -r suite_de_touches Supprimer tout raccourci actuel pour la suite_de_touches. -x suite_de_touches:commande_de_l'interpréteur Conduire la commande_de_l'interpréteur à être exécutée chaque fois que la suite_de_touches est saisie. Quand la commande_de_l'interpréteur est exécutée, l'interpréteur configure la variable READLINE_LINE au contenu du tampon de ligne de readline et les variables READLINE_POINT et READLINE_MARK à la position actuelle du curseur d'inser- tion et du point d'insertion sauvegardé (la marque) res- pectivement. L'interpréteur affecte tout argument numé- rique fourni par l'utilisateur à la variable READLINE_AR- GUMENT. S'il n'y a pas d'argument, la variable n'existe pas. Si la commande exécutée modifie les valeurs de READ- LINE_LINE, READLINE_POINT ou READLINE_MARK, ces nouvelles valeurs seront prises en considération dans l'état d'édi- tion. -X Afficher toutes les suites de touches associées aux com- mandes de l’interpréteur et aux commandes associées pour pouvoir être réutilisées en entrée. La valeur renvoyée est 0, à moins qu'une option inconnue ne soit indiquée ou qu'une erreur ne se soit produite. break [n] Sortir d'une boucle for, while, until ou select. Si n est indi- qué, sortir de n niveaux de boucles. n doit être ≥ 1. Si n est supérieur au nombre de boucles imbriquées, sortir de toutes les boucles. La valeur renvoyée est 0, à moins que n ne soit pas su- périeur ou égal à 1. builtin commande_interne [arguments] Exécuter la commande interne de l'interpréteur indiquée, en lui passant les arguments, puis renvoyer son état final. C'est utile lorsqu'une fonction est définie avec le même nom qu'une commande interne, et que cette commande est appelée depuis l'intérieur de la fonction. La commande interne cd est souvent redéfinie de cette façon. L'état renvoyé est faux si la commande_interne n'est pas une commande interne de l'interpréteur. caller [expr] Renvoyer le contexte de tout appel de sous-programme actif (une fonction de l'interpréteur ou un script lancé avec les commandes internes . ou source). Sans expr, caller affiche le numéro de ligne et le nom de fichier du sous-programme actuel. Si un en- tier positif est fourni comme expr, caller affiche le numéro de ligne, le nom du sous-programme et le nom de fichier source cor- respondant à la position dans la pile d'appels d'exécution ac- tuelle. Cette information supplémentaire peut être utilisée, par exemple, pour afficher une trace de la pile. La trame actuelle est la trame 0. La valeur renvoyée est 0, à moins que l'inter- préteur ne soit pas en train d'exécuter un sous-programme ou que expr ne corresponde pas à une position correcte dans la pile d'appels. cd [-L|[-P [-e]] [-@]] [rép] Remplacer le répertoire de travail actuel par rép. Si rép n’est pas fourni, la valeur de la variable d’interpréteur HOME est la valeur par défaut. La variable CDPATH définit des chemins de re- cherche pour trouver le répertoire contenant rép : tous les noms de répertoire contenus dans CDPATH sont parcourus à la recherche de rép. Les répertoires possibles y sont fournis dans une liste séparés par des deux-points « : ». Un nom de répertoire NULL dans CDPATH est équivalent au répertoire actuel, c'est-à-dire « . ». Si rép commence par une barre oblique (/), alors CDPATH n'est pas utilisé. L'option -P force cd à n'employer que la structure de répertoires physiques en résolvant les liens symbo- liques en traversant rép et avant de traiter les instances de .. dans rép (consultez aussi l'option -P de la commande interne set) ; l'option -L force à suivre les liens symboliques en ré- solvant les liens symboliques après le traitement des instances de .. dans rép. Si .. apparaît dans rép, il est traité en sup- primant le composant de chemin précédant directement rép, jusqu’à une barre oblique ou le début de rép. Si l'option -e est fournie avec -P, et que le répertoire de travail actuel ne peut pas être déterminé avec succès après un changement de répertoire avec succès, cd renverra un état d'échec. Sur les systèmes qui le permettent, l’option -@ présente les attributs étendus asso- ciés à un fichier comme à un répertoire. Un argument - est converti en $OLDPWD avant d’essayer un changement de répertoire. Si un nom de répertoire non vide de CDPATH est utilisé ou si - est le premier argument et si le changement de répertoire réus- sit, le chemin absolu du nouveau répertoire de travail est écrit sur la sortie standard. Si le changement de répertoire réussit, cd définit la valeur de la variable d'environnement PWD au nom du nouveau répertoire et règle la variable d'environnement OLDPWD à celle du répertoire de travail en cours avant le chan- gement. La valeur renvoyée est vrai si le changement de réper- toire a réussi, faux sinon. command [-pVv] commande [arguments ...] Exécuter la commande avec les arguments indiqués, mais en sup- primant le processus habituel de recherche des commandes. Seules les commandes internes ou les commandes trouvées dans PATH se- ront exécutées. Si l'option -p est indiquée, la recherche de la commande est effectuée en utilisant une valeur par défaut pour PATH garantissant de trouver tous les utilitaires standards. Si l'option -V ou -v est fournie, une description de la commande est affichée. L'option -v conduit à n'afficher qu'un seul mot indiquant la commande ou le nom de fichier utilisé pour appeler la commande. L'option -V fournit une description plus prolixe. Si l'option -V ou -v est fournie, l'état final est 0 si la com- mande a été trouvée et 1 sinon. Si aucune option n'est fournie et si une erreur s'est produite ou si la commande ne peut être trouvée, l'état final est 127. Sinon, l'état final de la command interne est l'état final de commande. compgen [option] [mot] Produire les correspondances des complètements possibles pour mot selon les options, qui peuvent être toute option acceptée par la commande interne complete à l'exception de -p et -r et écrit le résultat sur la sortie standard. Lorsqu'on utilise les options -F ou -C, les diverses variables de l'interpréteur créées par les outils de complètement programmables, lorsque disponibles, n'auront pas de valeurs utilisables. Les correspondances seront produites de la même façon que si le programme de complètement programmable les avait produites di- rectement à partir d'une spécification de complètement avec les mêmes attributs. Si mot est indiqué, seuls les complètements qui correspondent à mot sont affichés. La valeur renvoyée est vrai, sauf si une option incorrecte a été fournie ou si aucune correspondance n'a été produite. complete [-abcdefgjksuv] [-o option-complètement] [-DEI] [-A action] [-G globpat] [-W liste_de_mots] [-F fonction] [-C commande] [-X motif_filtre] [-P préfixe] [-S suffixe] nom [nom ...] complete -pr [-DEI] [nom ...] Indiquer la façon de compléter les arguments de chaque nom. Si l'option -p est fournie ou si aucune option n'est fournie, les spécifications de complètement existantes sont affichées de telle façon qu'elles puissent être réutilisées comme entrée. L'option -r retire une spécification de complètement à chaque nom fourni ou, si aucun nom n'est fourni, toutes les spécifica- tions de complètement. L'option -D indique que les options res- tantes et les actions devraient s'appliquer au complètement de commande par « défaut », c'est-à-dire le complètement essayé sur une commande pour laquelle aucun complètement n'a été préalable- ment défini. L'option -E indique que les options restantes et les actions devraient s'appliquer au complètement de commande « vide », c'est-à-dire le complètement essayé sur une ligne vide. L'option -I indique que les options restantes et les ac- tions devraient s'appliquer au complètement du premier mot de non affectation de la ligne ou après un délimiteur de commande ; ou |, ce qui est habituellement le complètement d'un nom de com- mande. Si plusieurs options sont fournies, l'option -D prend la préséance sur -E et les deux prennent la préséance sur -I. Si une des -options -D, -E ou -I est fournie, tous les autres argu- ments de nom sont ignorés ; ces complètements ne s'appliquent qu'au cas précisé par l'option. Le processus d'application de ces spécifications de complète- ment, lorsqu'un complètement de mot est tenté, est décrit above under Programmable Completion. Les autres options, si indiquées, ont les significations sui- vantes. Les arguments des options -G, -W et -X (et, si néces- saire, les options -P et -S) devraient être protégées pour évi- ter leur développement avant que la commande interne complete ne soit appelée. -o option-complètement L'option-complètement commande plusieurs aspects du com- portement des spécifications de complètement au-delà de la simple production de complètement. option-complète- ment peut être l'une des suivantes : bashdefault Effectuer le reste des complètements par défaut de bash si la spécification de complètement ne produit aucune correspondance. default Utiliser le complètement de nom de fichier par défaut de readline si la spécification de com- plètement ne produit aucune correspondance. dirnames Effectuer le complètement de nom de répertoire si la spécification de complètement ne produit aucune correspondance. filenames Indiquer à readline que la spécification de com- plètement produit des noms de fichiers, ainsi il peut effectuer tout traitement spécifique aux noms de fichiers (comme ajouter une barre oblique aux noms de répertoires, protéger les caractères spéciaux ou supprimer les espaces de fin de ligne). Destinée à être utilisée avec les fonctions de l'interpréteur. noquote Indiquer à readline de protéger les mots complé- tés s’il s’agit de noms de fichier (la protec- tion des noms de fichier est par défaut). nosort Indiquer à readline de ne pas trier par ordre alphabétique la liste des complètements pos- sibles. nospace Indiquer à readline de ne pas ajouter une espace (comportement par défaut) aux mots complétés en fin de ligne. plusdirs Après création de toutes les correspondances dé- finies par la spécification de complètement, une tentative de complètement de nom de répertoire est effectuée et toutes les correspondances sont ajoutées aux résultats des autres actions. -A action L'action peut être l'une des suivantes pour produire une liste des complètements possibles : alias Noms d'alias. Peut également être indiquée avec -a. arrayvar Noms de variable de type tableau. binding Noms de raccourci clavier readline. builtin Noms de commandes internes de l'interpréteur. Peut également être indiquée avec -b. command Noms de commande. Peut également être indiquée avec -c. directory Noms de répertoire. Peut également être indiquée avec -d. disabled Noms de commandes internes de l'interpréteur désactivées. enabled Noms de commandes internes de l'interpréteur ac- tivées. export Noms de variables de l'interpréteur exportées. Peut également être indiquée avec -e. file Noms de fichier. Peut également être indiquée avec -f. function Noms de fonctions de l'interpréteur. group Noms de groupe. Peut également être indiquée avec -g. helptopic Sujets de l'aide acceptés par la commande in- terne help. hostname Noms de machine tels qu'ils sont extraits du fi- chier indiqué par la variable de l'interpréteur HOSTFILE. job Noms de tâche si le contrôle des tâches est ac- tif. Peut également être indiquée avec -j. keyword Mots réservés de l'interpréteur. Peut également être indiquée avec -k. running Noms de tâches en cours d'exécution si le contrôle des tâches est actif. service Noms de service. Peut également être indiquée avec -s. setopt Arguments corrects de l'option -o de la commande interne set. shopt Noms des options d'interpréteur acceptées par la commande interne shopt. signal Noms de signaux. stopped Noms de tâches suspendues si le contrôle des tâches est actif. user Noms d'utilisateur. Peut également être indiquée avec -u. variable Noms de toutes les variables de l'interpréteur. Peut également être indiquée avec -v. -C commande La commande est exécutée dans un environnement de sous-interpréteur et sa sortie est utilisée comme com- plètements possibles. Les arguments sont fournis comme avec la fonction -F. -F fonction La fonction de l'interpréteur est exécutée dans l'inter- préteur actuel. Lorsqu'une fonction est exécutée, le premier argument ($1) est le nom de la commande dont les arguments doivent être complétés, le deuxième argument ($2) est le mot à compléter et le troisième argument ($3) est le mot précédant celui devant être complété sur la ligne de commande actuelle. Lorsqu'elle finit, les complètements possibles sont récupérés à partir de la valeur de la variable de type tableau COMPREPLY. -G globpat Le motif de développement des chemins globpat est déve- loppé pour produire les complètements possibles. -P préfixe préfixe est ajouté au début de chaque complètement pos- sible après application de toutes les autres options. -S suffixe suffixe est ajouté à chaque complètement possible après application de toutes les autres options. -W liste_de_mots La liste_de_mots est découpée en utilisant les carac- tères de la variable spéciale IFS comme délimiteurs et chaque mot résultant est développé. Les protections de l'interpréteur sont prises en compte à l'intérieur de la liste_de_mots, afin de fournir un mécanisme pour que les mots puissent contenir des métacaractères ou des carac- tères de l'interpréteur dans la valeur de IFS. Les com- plètements possibles sont les éléments de la liste ré- sultante qui correspondent au mot en cours de complète- ment. -X motif_filtre motif_filtre est un motif utilisé pour le développement des chemins. Il est appliqué à la liste des complète- ments possibles produite par les options et arguments précédents et chaque complètement correspondant à mo- tif_filtre est supprimé de la liste. Un ! au début du motif_filtre inverse le motif ; dans ce cas, tout com- plètement qui ne correspond pas à motif_filtre est sup- primé. La valeur renvoyée est vrai, sauf si une option incorrecte a été fournie, si une option comme -p ou -r a été fournie sans un nom d'argument, si une tentative a été faite pour supprimer une spé- cification de complètement pour un nom pour lequel il n'existe pas de spécification, ou si une erreur est survenue lors de l'ajout d'une spécification de complètement. compopt [-o option] [-DEI] [+o option] [nom] Modifier les options de complètement pour chaque nom en fonction des options, ou pour le complètement en cours d'exécution si au- cun nom n'est fourni. Si aucune option n'est donnée, afficher les options de complètement pour chaque nom ou pour le complète- ment actuel. Les valeurs d’options possibles sont celles dé- crites ci-dessus pour la commande interne complete. L'option -D indique que les options restantes devraient s'appliquer à la commande de complètement par « défaut » ; c'est-à-dire le com- plètement essayé sur une commande pour laquelle aucun complète- ment n'a été préalablement défini. L'option -E indique que les options fournies devraient s'appliquer au complètement de com- mande « vide » ; c'est-à-dire le complètement essayé sur une ligne vide. L'option I indique que les options fournies res- tantes devraient s'appliquer au complètement du premier mot de non affectation de la ligne ou après un délimiteur de commande ; ou |, ce qui est habituellement le complètement d'un nom de com- mande. La valeur renvoyée est vrai, à moins qu'une option incorrecte ait été fournie, qu'une tentative ait été faite pour modifier les options pour un nom pour lequel il n'existe pas de spécifi- cation de complètement, ou bien qu'une erreur de sortie soit survenue. continue [n] Reprendre l'exécution à l'itération suivante d'une boucle for, while, until ou encore select. Si n est indiqué, reprendre l'exécution à la n-ième boucle imbriquée. n doit être ≥ 1. Si n est supérieur au nombre de boucles imbriquées, l'exécution re- prend à la boucle la plus externe (la boucle « au sommet »). La valeur renvoyée est 0, à moins que n ne soit supérieur ou égal à 1. declare [-aAfFgiIlnrtux] [-p] [nom[=valeur] ...] typeset [-aAfFgiIlnrtux] [-p] [nom[=valeur] ...] Déclarer des variables ou leur fournir des attributs. Si aucun nom n'est indiqué, afficher les valeurs des variables. L'option -p affichera les attributs et les valeurs de chaque nom. Quand -p est utilisée avec des arguments nom, les options supplémen- taires, à part -f et -F, sont ignorées. Quand -p est fourni sans argument nom, les attributs et valeurs de toutes les variables ayant des attributs indiqués par les options additionnelles se- ront affichés. Si aucune autre option n'est fournie avec -p, de- clare affichera les attributs et valeurs de toutes les variables de l'interpréteur. L'option -f limite l'affichage aux fonctions de l'interpréteur. L'option -F empêche l'affichage des défini- tions de fonctions : seuls le nom de la fonction et ses attri- buts sont affichés. Si l'option d'interpréteur extdebug est ac- tivée en utilisant shopt, le nom du fichier source et le numéro de ligne où chaque nom est défini sont aussi affichés. L'option -F implique -f. L'option -g force la création ou la modification de variables avec une portée globale, même si declare est exécu- tée dans une fonction de l'interpréteur. Elle est ignorée dans tous les autres cas. L'option -I fait que les variables locales héritent des attributs (sauf de l'attribut nameref) et prennent la valeur de n'importe quelle variable existante du même nom dans son environnement. S'il n'y a pas de variable existante, la variable locale est détruite dans un premier temps. Les options suivantes permettent de restreindre l'affichage aux variables dotées de certains attributs ou de configurer les attributs des variables : -a Chaque nom est une variable de type tableau indicé (consultez Tableaux. above). -A Chaque nom est une variable de type tableau associatif (consultez Tableaux. above). -f Utiliser seulement les noms de fonctions. -i La variable est traitée comme un entier ; l'évaluation arithmétique (consultez ÉVALUATION ARITHMÉTIQUE above) est effectuée lorsqu'une valeur est affectée à la va- riable. -l Quand cette variable contient une valeur, toutes les ma- juscules seront converties en minuscules. L'attribut ma- juscule est désactivé. -n Donner à chaque nom l’attribut nameref, le rendant une référence de nom vers une autre variable. Cette autre va- riable est définie par la valeur de nom. Toutes les réfé- rences, les affectations et les modifications d'attribut de nom, à part celles qui utilisent ou modifient l’attri- but -n lui-même, sont réalisées sur la variable référen- cée par la valeur de nom. L’attribut -nameref ne peut pas être appliqué aux variables de type tableau. -r Rendre les noms accessibles en lecture seule. Plus aucune valeur ne pourra leur être affectée et ils ne pourront plus être détruits. -t Donner à chaque nom l'attribut trace. Les fonctions tra- cées héritent des captures de DEBUG et RETURN de l'inter- préteur appelant. L'attribut trace n'a pas de significa- tion spéciale pour les variables. -u Quand cette variable contient une valeur, toutes les mi- nuscules seront converties en majuscules. L'attribut mi- nuscule est désactivé. -x Marquer les noms pour qu'ils soit exportés dans l'envi- ronnement des commandes ultérieures. En utilisant « + » à la place de « - », l'attribut correspondant est désactivé, excepté que +a et +A ne peuvent pas être utilisés pour détruire une variable tableau et que +r n'enlèvera pas l'attribut lecture seule. Quand ils sont utilisés dans une fonc- tion, declare et typeset rendent local chaque nom, comme avec la commande local sauf si l'option -g est fournie. Si un nom de va- riable est suivi par =valeur, la valeur de cette variable est configurée à valeur. Lors de l’utilisation de -a ou -A et de la syntaxe d’affectation composée pour créer des variables de type tableau, les attributs supplémentaires sont sans effet jusqu’aux affectations suivantes. La valeur renvoyée est 0, sauf si une option incorrecte est rencontrée, une tentative est faite de dé- finir une fonction en utilisant ``-f foo=bar'', une tentative est faite pour affecter la valeur à une variable en lecture seule, une tentative est faite d'affecter une valeur à une va- riable tableau sans employer la syntaxe d'affectation composée (consultez Tableaux above), un des noms n'est pas un nom correct pour une variable de l'interpréteur, une tentative est faite de supprimer l'attribut lecture seule d'une variable en lecture seule, une tentative est faite de supprimer l'attribut tableau d'une variable tableau ou une tentative est faite avec -f d'af- ficher une fonction inexistante. dirs [-clpv] [+n] [-n] Sans option, afficher la liste des répertoires actuellement mé- morisés. L'affichage par défaut est réalisé sur une seule ligne, les noms de répertoires étant séparés par des espaces. Les ré- pertoires sont ajoutés à la liste avec la commande pushd et sup- primés avec la commande popd. Le répertoire courant est toujours le premier répertoire de la pile. -c Effacer la liste des répertoires en les supprimant tous. -l Produire une liste en utilisant les chemins complets ; le format d'affichage par défaut utilise le tilde pour re- présenter le répertoire d'accueil. -p Afficher la pile des répertoires avec un élément par ligne. -v Afficher la pile des répertoires avec un élément par ligne, en préfixant chaque entrée avec son numéro d'in- dice dans la pile. +n Afficher le n-ième élément de la liste fournie par dirs, lorsqu'appelé sans options, en comptant à partir de la gauche en commençant à zéro. -n Afficher le n-ième élément de la liste fournie par dirs, lorsqu'appelé sans options, en comptant à partir de la droite en commençant à zéro. La valeur renvoyée est 0, sauf si une option incorrecte a été fournie ou si l'indice n dépasse la longueur de la pile des ré- pertoires. disown [-ar] [-h] [tâche ... | pid ... ] Sans options, supprimer chaque tâche de la table des tâches ac- tives. Si aucune tâche n'est précisée et qu’aucune des options -a ou -r n'est fournie, la tâche actuelle est utilisée. Si l'op- tion -h est indiquée, aucune tâche n'est supprimée de la table, mais chaque tâche est marquée pour que le signal SIGHUP ne lui soit pas envoyé si l'interpréteur reçoit un signal SIGHUP. Si aucune tâche n'est fournie, l'option -a signifie la suppression ou le marquage de toutes les tâches ; l'option -r sans l'argu- ment tâche restreint les opérations aux tâches en cours d'exécu- tion. La valeur renvoyée est 0, sauf si tâche n'indique pas une tâche correcte. echo [-neE] [arguments ...] Afficher les arguments, séparés par des espaces, suivis par un saut de ligne. La valeur renvoyée est 0 sauf en cas d’erreur. Si -n est indiqué, le changement de ligne final est supprimé. Si l'option -e est indiquée, l'interprétation des caractères de protection suivants par une contre-oblique est activée. L'option -E désactive l'interprétation de ces caractères de protection, même sur les systèmes où ils sont interprétés par défaut. L'op- tion d'interpréteur xpg_echo peut être utilisée dynamiquement pour déterminer si echo développe ou non par défaut ces carac- tères de protection. echo n'interprète pas -- comme signifiant la fin des options. echo reconnaît les suites de caractères de protection suivants : \a alerte (alarme) ; \b effacement arrière (« backspace ») ; \c supprime tout affichage suivant ; \e \E caractère de protection ; \f saut de page (« form feed ») ; \n saut de ligne (« new line ») ; \r retour chariot (« carriage return ») ; \t tabulation horizontale ; \v tabulation verticale ; \\ contre-oblique ; \0nnn le caractère 8 bits dont la valeur en octal est nnn (zéro à trois chiffres octaux) ; \xHH le caractère 8 bits dont la valeur hexadécimale est HH (un ou deux chiffres hexadécimaux) ; \uHHHH le caractère Unicode (ISO/IEC 10646) dont la valeur hexa- décimale est HHHH (un à quatre chiffres hexadécimaux) ; \UHHHHHHHH le caractère Unicode (ISO/IEC 10646) dont la valeur hexa- décimale est HHHHHHHH (un à huit chiffres hexadécimaux) ; enable [-a] [-dnps] [-f fichier] [nom ...] Activer ou désactiver les commandes internes de l'interpréteur. Désactiver une commande interne permet d'exécuter une commande disque ayant le même nom qu'une commande interne de l'interpré- teur, sans avoir à indiquer un chemin d'accès complet, même quand l'interpréteur recherche normalement les commandes in- ternes avant les commandes du disque. Si -n est utilisé, chaque nom indiqué est désactivé, sinon ils sont activés. Par exemple, pour utiliser le programme binaire test qui se trouve dans PATH plutôt que la commande interne, utilisez ``enable -n test''. L'option -f demande de charger la nouvelle commande interne avec le nom indiqué depuis le fichier objet partagé sur les systèmes qui le permettent. bash utilisera la valeur de la variable BASH_LOADABLES_PATH comme une liste séparée par des deux-points dans laquelle rechercher le fichier. La valeur par défaut dépend du système. L'option -d permet de supprimer une commande interne chargée précédemment avec -f. Si aucun argument nom n'est indi- qué ou si l'option -p est fournie, une liste des commandes in- ternes de l'interpréteur est affichée. Sans autre option, la liste est celle des commandes internes actives de l'interpré- teur. Si -n est fournie, seules les commandes désactivées sont affichées. Si -a est fournie, la liste de toutes les commandes est affichée, avec une indication des activations et désactiva- tions. Si -s est fournie, la sortie est limitée aux commandes internes spéciales POSIX. Si aucune option n'est fournie et si nom n'est pas une commande interne de l'interpréteur, enable tentera de charger nom à partir d'un objet partagé nommé nom comme si la commande était ``enable -f name name . La valeur renvoyée est 0 à moins que nom ne soit pas une commande interne de l'interpréteur ou qu'il y ait une erreur au chargement d'une nouvelle commande interne d'un objet partagé. eval [arguments ...] Les arguments sont lus et regroupés en une seule commande simple. Cette commande est alors lue et exécutée par l'interpré- teur et son état final est renvoyé comme valeur de la commande eval. S'il n'y a pas d'arguments ou uniquement des arguments NULL, eval renvoie 0. exec [-cl] [-a nom] [commande [arguments]] Si une commande est indiquée, elle remplace l'interpréteur. Au- cun nouveau processus n'est créé. Les arguments deviennent ceux de la commande. Si l'option -l est fournie, l'interpréteur place un tiret en guise de zéroième argument fourni à la commande. C'est ce que fait login(1). L'option -c conduit à l'exécution de la commande avec un environnement vide. Si l'option -a est four- nie, l'interpréteur transmet le nom comme zéroième argument. Si la commande ne peut être exécutée pour une raison quelconque, un interpréteur non interactif termine, sauf si l'option de l'in- terpréteur execfail est activée. Dans ce cas, une erreur est renvoyée. Un interpréteur interactif renvoie une erreur si le fichier ne peut pas être exécuté. Un sous-interpréteur termine sans conditions si exec échoue. Si aucune commande n'est indi- quée, les éventuelles redirections sont mises en place dans l'interpréteur actuel et l'état renvoyé est 0. S'il y a une er- reur de redirection, l'état renvoyé est 1. exit [n] Termine l'interpréteur avec un état de n. Si n est omis, l'état final est celui de la dernière commande exécutée. Une capture sur EXIT est exécutée avant que l'interpréteur ne se termine. export [-fn] [nom[=mot]] ... export -p Les noms fournis sont marqués pour être exportés automatiquement dans l'environnement des commandes exécutées par la suite. Si l'option -f est indiquée, les noms se rapportent à des fonc- tions. Si aucun nom n'est donné ou si l'option -p est fournie, une liste de noms de toutes les variables exportées est affi- chée. L'option -n conduit à supprimer l'attribut d'exportation de toutes les variables nommées. Si un nom de variable est suivi par =mot, la valeur de la variable est configurée à mot. export renvoie un état final de 0, sauf si une option incorrecte est rencontrée, si un des noms n'est pas un nom correct de variable de l'interpréteur, ou si l'option -f est fournie avec un nom qui n'est pas une fonction. fc [-e éditeur] [-lnr] [première] [dernière] fc -s [motif=nouveau] [commande] La première forme sélectionne un intervalle de commandes de la première à la dernière dans la file d’historique et l’affiche ou l’édite pour les réexécuter. La première et la dernière peuvent être indiquées sous forme de chaînes (pour trouver la dernière commande commençant par cette chaîne) ou sous forme numérique (un indice dans la file d'historique où un nombre négatif est utilisé comme décalage par rapport au numéro de la commande ac- tuelle). Sur la liste, une première ou une dernière de valeur 0 est équivalente à -1, et -0 est équivalent à la commande ac- tuelle (habituellement la commande fc) ; autrement, 0 est équi- valent à -1 et -0 n'est pas valable. Si la dernière n'est pas indiquée, elle est configurée à la commande actuelle si l'on veut afficher la liste (ainsi ``fc -l -10'' affiche les 10 der- nières commandes) et à l'identique de la première sinon. Si la première n'est pas indiquée, elle est configurée à la commande précédente pour une édition et à -16 pour l'affichage de liste. L'option -n supprime l'affichage des numéros dans la liste. L'option -r inverse l'ordre des commandes. Si l'option -l est indiquée, les commandes sont affichées sur la sortie standard. Sinon, l'éditeur indiqué est appelé avec un fichier contenant les commandes sélectionnées. Si aucun éditeur n'est indiqué, on utilise la valeur de la variable FCEDIT et la valeur de EDITOR si FCEDIT n'existe pas. Si aucune variable n'existe, vi est uti- lisé. Lorsque l'édition se termine, les commandes sont affichées puis exécutées. Dans la seconde forme, la commande est réexécutée après avoir remplacé chaque instance du motif par nouveau. commande est in- terprétée de la même façon que première ci-dessus. Un alias utile pour cela est ``r="fc -s"'', ainsi en tapant ``r cc'' on relance la dernière commande commençant par ``cc'' et en tapant ``r'' on réexécute la commande précédente. Lorsque la première forme est utilisée, la valeur renvoyée est 0, sauf si une option incorrecte est trouvée ou si première ou dernière indiquent des lignes d'historique hors d'atteinte. Si l'option -e est fournie, la valeur renvoyée est celle de la der- nière commande exécutée ou un échec si une erreur s'est produite avec le fichier temporaire des commandes. Avec la seconde forme, l'état renvoyé est celui de la commande réexécutée, sauf si com- mande n'indique pas une ligne correcte de l'historique, auquel cas fc renvoie un échec. fg [tâche] Reprendre la tâche au premier plan qui devient la tâche ac- tuelle. Si aucune tâche n'est précisée, l'interpréteur utilise la notion de tâche actuelle. La valeur renvoyée est celle de la commande placée au premier plan ou un échec si le contrôle des tâches est désactivé ou, lorsque le contrôle des tâches est ac- tivé, si la tâche n'indique pas une tâche correcte ou si la tâche indique une tâche lancée sans contrôle des tâches. getopts chaîne_d_options nom [arguments ...] getopts est utilisé par les scripts d'interpréteur pour analyser les paramètres positionnels. La chaîne_d_options contient l'en- semble des caractères d'options à reconnaître ; si un caractère est suivi par un deux-points, l'option est censée avoir un argu- ment, qui devrait en être séparé par une espace. Les caractères deux-points et le point d'interrogation ne peuvent pas être uti- lisés comme caractères d'option. À chaque appel, getopts place l'option suivante dans la variable de l'interpréteur dont le nom est fourni, en la créant si elle n'existe pas et l'indice de l'argument suivant à traiter dans la variable OPTIND. OPTIND est initialisée à 1 à chaque appel d'un interpréteur ou d'un script. Quand une option nécessite un argument, getopts place cet argu- ment dans la variable OPTARG. L'interpréteur ne réinitialise pas OPTIND automatiquement, il faut le faire manuellement entre des appels multiples à getopts au sein du même appel d'interpréteur si un nouveau jeu de paramètres doit être utilisé. Lorsque la fin des options est atteinte, getopts termine avec une valeur renvoyée strictement supérieure à zéro. OPTIND est positionné à l'indice du premier argument obligatoire et un point d'interrogation (?) est placé dans la variable nom. getopts analyse en principe les paramètres positionnels, mais si plus d'arguments sont indiqués comme valeur d'arguments, getopts analysera ces derniers à la place. getopts peut signaler des erreurs de deux façons. Si le premier caractère de la chaîne_d_options est un deux-points, les erreurs sont signalées de façon silencieuse. Lors d'un fonctionnement normal, des messages de diagnostic sont affichés si une option est incorrecte ou s'il manque un argument d'option. Si la va- riable OPTERR est configurée à 0, aucun message d'erreur ne sera affiché, même si le premier caractère de la chaîne_d_options n'est pas un deux-points. Si une option incorrecte est rencontrée, getopts place un point d'interrogation (?) dans la variable nom, affiche un message d'erreur (s'il n'est pas en mode silencieux) et détruit la va- riable OPTARG. Si getopts fonctionne en mode silencieux, le ca- ractère d'option est placé dans OPTARG et aucun message de diag- nostic n'est affiché. Lorsqu'un argument d'option nécessaire est absent et si getopts n'est pas silencieux, un point d'interrogation (?) est placé dans la variable nom, OPTARG est détruite et un message de diag- nostic est affiché. Si getopts est silencieux, un deux-points (:) est placé dans la variable nom et OPTARG est positionné à l'option monocaractère trouvée. getopts renvoie vrai si une option, indiquée ou non, est trou- vée. Il renvoie faux si la fin des options est atteinte ou si une erreur se produit. hash [-lr] [-p fichier] [-dt] [nom] Chaque fois que hash est invoquée, le chemin d'accès complet de la commande nom est déterminé en examinant les répertoires de $PATH, et mémorisé. Tous les chemins précédemment mémorisés sont supprimés. Si l'option -p est fournie, aucune recherche de che- min d'accès n'est effectuée et le fichier est utilisé comme che- min d'accès complet pour la commande. L'option -r conduit l'in- terpréteur à oublier tous les emplacements mémorisés. L'option -d conduit l'interpréteur à oublier tous les emplacements mémo- risés de chaque nom. Si l'option -t est fournie, le chemin d'ac- cès complet de chaque nom correspondant est affiché. Si plu- sieurs arguments nom sont fournis avec -t, le nom est affiché avant chaque chemin d'accès complet associé. L'option -l conduit à afficher la sortie dans un format réutilisable en entrée. Si aucun argument n'est indiqué ou si seulement -l est fournie, des informations sur les commandes mémorisées sont affichées. La va- leur renvoyée est vrai, sauf si nom n'est pas trouvé ou si une option incorrecte est fournie. help [-dms] [motif] Afficher des informations d'aide au sujet des commandes in- ternes. Si un motif est indiqué, help fournit de l'aide sur toutes les commandes internes correspondant à ce motif, sinon, une liste des commandes internes et des structures de contrôle de l'interpréteur est affichée. -d Afficher une courte description de chaque motif. -m Afficher la description de chaque motif dans un format du type pages de manuel. -s Afficher seulement un court synopsis d'utilisation de chaque motif. L'état renvoyé est 0, sauf si aucune commande ne correspond au motif. history [n] history -c history -d nombre history -d début-fin history -anrw [fichier] history -p argument [argument ...] history -s argument [argument ...] Sans options, afficher la liste des commandes de la file d'his- torique, avec les numéros de ligne. Les lignes marquées avec un * ont été modifiées. Un argument n permet de n'afficher que les n dernières lignes. Si la variable de l'interpréteur HISTTIME- FORMAT existe et n'est pas NULL, elle est utilisée comme chaîne de format pour strftime(3) afin d'afficher l'horodatage associé à chaque élément de l'historique. Aucun blanc ne sépare l'horo- datage ainsi mis en forme de la ligne d'historique. Si un argu- ment fichier est fourni, il est utilisé comme nom de fichier d'historique ; sinon la valeur de HISTFILE est utilisée. Les op- tions, si fournies, ont les significations suivantes : -c Effacer la file de l'historique en supprimant tous les éléments. -d nombre Supprimer l'entrée d'historique à la position nombre. Si nombre estnégatif, il est interprété comme relatif à un nombre plus grand que celui de la dernière position de l'historique, ainsi les indices négatifs comptent à re- bours depuis la fin de l'historique et un indice -1 fait référence à la commande history -d actuelle. -d début-fin Supprimer la plage d'entrées d'historique entre les posi- tions début et fin incluses. Les valeurs positives et né- gatives pour début et fin sont interprétées comme dé- crites ci-dessus. -a Ajouter les « nouvelles » lignes d'historique. Ce sont celles créées depuis le début de la session actuelle de bash, mais pas déjà ajoutées dans le fichier d'histo- rique. -n Lire dans le fichier d'historique les lignes non encore lues et les ajouter à la file d'historique actuelle. Il s'agit des lignes qui ont été ajoutées dans le fichier d'historique depuis le début de la session bash. -r Lire le contenu du fichier et l'ajouter à l’historique actuel. -w Écrire la liste actuelle d’historique dans le fichier d’historique, en écrasant le contenu précédent. -p Effectuer la substitution d'historique sur les arguments suivants et afficher le résultat sur la sortie standard. Ne pas mémoriser les résultats dans la file d'historique. Chaque argument doit être protégé pour désactiver le dé- veloppement normal de l'historique. -s Conserver les arguments dans la file d'historique comme un unique élément. La dernière commande de la file d'his- torique est supprimée avant que les arguments ne soient ajoutés. Si la variable HISTTIMEFORMAT existe, les informations d'horoda- tage associées à chaque élément de l'historique sont écrites dans le fichier d'historique, repérées par le caractère de com- mentaire d'historique. Quand le fichier d'historique est lu, les lignes commençant par le caractère de commentaire d'historique suivi immédiatement par un chiffre sont considérés comme des ho- rodatages de la ligne d'historique précédente. La valeur ren- voyée est 0, sauf si une option incorrecte est fournie, si une erreur se produit durant la lecture ou l'écriture du fichier, si une plageou un nombre incorrects sont fournis comme argument à -d ou si le développement de l'historique fourni en argument à -p échoue. jobs [-lnprs] [ tâche ... ] jobs -x commande [ arguments ... ] La première forme affiche la liste des tâches actives. Les op- tions ont les significations suivantes : -l Afficher les PID, en plus des informations normales. -n Afficher uniquement des informations sur les tâches dont l'état a changé depuis la dernière notification de leur état à l'utilisateur. -p Afficher uniquement le PID du meneur du groupe de proces- sus de la tâche. -r N’afficher que les tâches en cours d'exécution. -s N’afficher que les tâches suspendues. Si une tâche est indiquée, l'affichage est restreint aux infor- mations relatives à cette tâche. L'état renvoyé est 0, sauf si une option incorrecte est rencontrée ou si une tâche incorrecte est fournie. Si l'option -x est fournie, jobs remplace toute tâche trouvée dans la commande ou dans ses arguments avec les Process Group ID correspondant, puis il exécute la commande en lui transmettant les arguments et en renvoyant son état final. kill [-s signal | -n num-signal | -signal] [pid | tâche] ... kill -l|-L [signal | état_final] Envoyer le signal indiqué par signal ou num-signal aux processus indiqués par pid ou par tâche. signal est soit sous la forme de nom de signal (indifférent à la casse), comme SIGKILL (avec ou sans le préfixe SIG), soit sous forme numérique ; num-signal est un numéro de signal. Si signal est absent, SIGTERM est supposé par défaut. Un argument -l provoque l'affichage de la liste des noms de signaux. Si des arguments sont fournis quand -l est in- diqué, les noms des signaux correspondant aux arguments sont af- fichés et l'état renvoyé est 0. L'argument état_final de l'op- tion -l est un nombre indiquant soit un numéro de signal, soit l'état final d'un processus terminé par un signal. L'option -L est équivalente de -l. kill renvoie vrai si au moins un signal a été envoyé avec succès ou faux si une erreur s'est produite ou si une option incorrecte a été rencontrée. let argument [argument ...] Chaque argument est une expression arithmétique à évaluer (consultez ÉVALUATION ARITHMÉTIQUE above). Si l'évaluation du dernier argument donne 0, let renvoie 1 ; sinon 0 est renvoyé. local [option] [nom[=valeur] ...] - ] Pour chaque argument, une variable locale nom est créée et la valeur lui est affectée. L'option peut être n'importe quelle op- tion acceptée par declare. Quand local est utilisé dans une fonction, la variable nom possède une portée visible restreinte à cette fonction et ses enfants. Si nom est -, les options de l'interpréteur sont réglées à locales pour la fonction dans la- quelle local est invoquée : les options de l'interpréteur, modi- fiées en utilisant la commande interne set dans la fonction, sont restaurées à leur valeur originale quand la fonction re- donne la main. La restauration est effectuée comme si une série de commandes set avaient été exécutées pour restaurer les va- leurs qui étaient en place avant la fonction. Sans opérandes, local affiche la liste des variables locales sur la sortie stan- dard. Une utilisation de local hors des fonctions est erronée. La valeur renvoyée est 0, sauf si local est utilisé hors d'une fonction, si un nom incorrect est fourni ou si nom est une va- riable en lecture seule. logout Terminer un interpréteur de connexion. mapfile [-d délimiteur] [-n nombre] [-O origine] [-s nombre] [-t] [-u df] [-C rappel] [-c quantum] [tableau] readarray [-d délimiteur] [-n nombre] [-O origine] [-s nombre] [-t] [-u df] [-C rappel] [-c quantum] [tableau] Lire les lignes depuis l'entrée standard dans la variable de type tableau indicé tableau, ou depuis le descripteur de fichier df si l'option -u est fournie. La variable MAPFILE est le ta- bleau par défaut. Les options, si fournies, ont les significa- tions suivantes : -d Le premier caractère de délimiteur est utilisé pour ter- miner la ligne de saisie, plutôt qu'un changement de ligne. Si délimiteur est une chaîne vide, mapfile termine une ligne quand il lit un caractère NUL. -n Copier au plus nombre lignes. Si nombre est 0, toutes les lignes sont copiées. -O Commencer l'affectation de tableau à l'indice origine. L'indice par défaut est 0. -s Supprimer les nombre premières lignes lues. -t Éliminer un délimiteur final (par défaut changement de ligne ) de chaque ligne lue. -u Lire les lignes à partir du descripteur de fichier df plutôt que depuis l'entrée standard. -C Évaluer rappel à chaque fois que quantum lignes sont lues. L'option -c précise le quantum. -c Préciser le nombre de lignes entre chaque appel à rappel. Si -C est précisé sans -c, le quantum par défaut est 5000. Quand rappel est évalué, l'indice du prochain élément de tableau à af- fecter et la ligne à affecter à cet élément sont fournis en ar- guments supplémentaires. rappel est évalué après la lecture de la ligne, mais avant l'affectation de l'élément de tableau. Si aucune origine explicite n'est fournie, mapfile effacera ta- bleau avant de lui affecter des valeurs. mapfile termine avec succès sauf si une option ou un de ses ar- guments n'est pas valable, ou si tableau n'est pas valable, n'est pas un tableau indicé ou si son affectation est impos- sible. popd [-n] [+n] [-n] Enlever des éléments de la pile des répertoires. Les éléments sont numérotés à partir de 0 avec le premier répertoire listé par dirs. Sans argument popd supprime le répertoire du sommet de la pile et un cd est effectué en direction du nouveau répertoire au sommet. Les arguments, si fournis, ont les significations suivantes : -n Empêcher le changement normal de répertoire lors de la suppression d'un répertoire de la pile. Seule la pile est manipulée. +n Supprimer de la pile le n-ième élément de la liste affi- chée par dirs, en comptant depuis la gauche à partir de zéro. Par exemple : ``popd +0'' enlève le premier réper- toire, ``popd +1'' le second. -n Supprimer le n-ième élément de la liste affichée par dirs, en comptant depuis la droite à partir de zéro. Par exemple : ``popd -0'' supprime le dernier répertoire et ``popd -1'' l'avant-dernier. Si l'élément au sommet de la pile de répertoires est modifié et si l'option n n'est pas fournie, popd utilise la commande in- terne cd pour changer vers le répertoire au sommet de la pile. Si cd échoue, popd renvoie une valeur différente de zéro. Autrement, popd renvoie faux si une option incorrecte est trou- vée, si la pile de répertoires est vide ou si une pile de réper- toires absente est indiquée. Si la commande popd réussit, bash effectue un dirs pour afficher le contenu final de la pile de répertoires et l'état renvoyé est 0. printf [-v var] format [arguments] Écrire les arguments mis en forme sur la sortie standard sous le contrôle du format. L'option -v conduit à affecter la sortie à la variable var plutôt que de l'afficher sur la sortie standard. Ce format est une chaîne de caractères contenant trois types d'objets : les caractères normaux, qui sont simplement copiés sur la sortie standard, les caractères de protection qui sont convertis puis copiés sur la sortie standard et les spécifica- tions de format, qui conduisent chacun à l'affichage des argu- ments successifs. En plus des spécifications de format standard de printf(1), printf interprète les extensions suivantes : %b conduit printf à développer les suites de caractères de protection dans l'argument correspondant de la même ma- nière que echo -e. %q conduit printf à afficher l'argument correspondant dans un format réutilisable en entrée de l'interpréteur ; %Q comme %q, mais applique toute précision fournie à l'argu- ment avant de le protéger. %(formatdate)T conduit printf à afficher la chaîne date-heure résultant de l'utilisation de formatdate en tant que chaîne de for- mat pour strftime(3). L'argument correspondant est un en- tier représentant le temps en seconde écoulé depuis epoch. Deux valeurs particulières d'argument peuvent être utilisées : -1 représente l'heure actuelle et -2 l'heure à laquelle l'interpréteur a été invoqué. Si aucun argu- ment n’est indiqué, la conversion se comporte comme si -1 avait été fourni. C’est une exception au comportement ha- bituel de printf. Les directives %b, %q et %T utilisent toutes les arguments de largeur et de précision de champ à partir de la spécification de format et écrivent autant d'octets que l'argument développé (ou utilisent autant d'espace qu'un champ pour cet argument) qui contient habituellement plus de caractères que l'original. Les arguments des spécificateurs de format qui ne sont pas des chaînes sont traités comme des constantes C, sauf qu'un signe plus ou moins est permis au début, et que, si le premier carac- tère est un guillemet simple ou double, la valeur est la valeur ASCII du caractère suivant. Le format est réutilisé si nécessaire pour englober tous les ar- guments. Si le format demande plus d'arguments que fournis, les spécifications supplémentaires se comportent comme si une valeur zéro ou une chaîne NULL, suivant le besoin, avaient été four- nies. La valeur renvoyée est zéro en cas de succès, différente de zéro en cas d'échec. pushd [-n] [+n] [-n] pushd [-n] [rép] Ajouter un répertoire au sommet de la pile des répertoires ou effectuer une rotation dans la pile, en ramenant le répertoire actuel au sommet. Sans argument, la commande pushd échange les deux éléments au sommet de la pile des répertoires. Les argu- ments, si fournis, ont les significations suivantes : -n Empêcher le changement normal de répertoire lors d'une rotation ou d'un ajout de répertoires dans la pile. Ainsi, seule la pile est manipulée. +n Effectuer une rotation dans la pile, de façon à amener au sommet le n-ième répertoire (de la liste affichée par dirs, en comptant depuis la gauche à partir de zéro). -n Effectuer une rotation dans la pile, de façon à amener au sommet le n-ième répertoire (de la liste affichée par dirs, en comptant depuis la gauche à partir de zéro). rép Ajouter répertoire au sommet de la pile des répertoires Après que la pile a été modifiée, si l'option -n n'a pas été fournie, pushd utilise la commande interne cd pour changer vers le répertoire au sommet de la pile. Si cd échoue, pushd renvoie une valeur différente de zéro. Autrement, si aucun argument n'est fourni, pushd renvoie 0 sauf si la pile des répertoires est vide. Lors d'une rotation de la pile des répertoires, pushd renvoie 0 sauf si la pile est vide ou si un élément inexistant dans la pile est indiqué. Si la commande pushd réussit, bash effectue un dirs pour montrer le contenu final de la pile du répertoire. pwd [-LP] Afficher le chemin d'accès absolu au répertoire de travail ac- tuel. Le chemin ne contiendra pas de liens symboliques si l'op- tion -P est fournie, ou si l'option -o physical de la commande interne set est activée. Si l'option -L est utilisée, le chemin affiché peut contenir des liens symboliques. L'état renvoyé est 0, sauf si une erreur s'est produite lors de la lecture du nom du répertoire actuel ou si une option incorrecte est fournie. read [-ers] [-a tableau] [-d délimiteur] [-i texte] [-n nb_car] [-N nb_car] [-p invite] [-t délai] [-u df] [nom ...] Une ligne est lue depuis l'entrée standard ou à partir du des- cripteur de fichier df fourni en argument à l'option -u, décou- pée en mots comme décrit above dans Découpage en mots, puis le premier mot de cette ligne est affecté au premier nom, le second mot au second nom, et ainsi de suite. S'il y a plus de mots que de noms, les mots restants et leurs séparateurs intercalaires sont affectés au dernier nom. S'il y a moins de mots lus dans le flux d'entrée que de variables, des valeurs vides sont affectées à celles restantes. Les caractères contenus dans la variable IFS sont utilisés pour découper la ligne en mots en utilisant les mêmes règles que celles utilisées par l’interpréteur pour le dé- veloppement (décrites above dans Découpage en mots). Le carac- tère contre-oblique (\) permet de supprimer toute signification spéciale pour le caractère suivant et autorise la continuation de ligne. Les options, si fournies, ont les significations sui- vantes : -a tableau Les mots sont affectés aux indices successifs d'une va- riable tableau de nom tableau, en commençant à 0. tableau est détruit avant que de nouvelles valeurs ne soient af- fectées. Les autres arguments nom sont ignorés. -d délimiteur Le premier caractère de délimiteur est utilisé pour ter- miner la ligne de saisie, plutôt qu'un changement de ligne. Si délimiteur est la chaîne vide, read termine une ligne quand il lit un caractère NUL. -e Si l'entrée standard provient d'un terminal, la biblio- thèque readline (consultez READLINE above) est utilisée pour obtenir la ligne. Readline utilise les configura- tions d'édition en cours (ou par défaut, si l'édition de ligne n'était pas préalablement active), mais utilise le complètement de nom de fichier par défaut de readline. -i texte Si readline est utilisée pour lire la ligne, texte est placé dans le tampon d'édition avant le début de l'édi- tion. -n nb_car read s'arrête après avoir lu nb_car caractères plutôt que d'attendre une ligne complète en entrée, mais un délimi- teur est respecté si moins de nb_car caractères ont été lus avant le délimiteur. -N nb_car read s'arrête après avoir lu exactement nb_car caractères plutôt que d'attendre une ligne complète en entrée, sauf si une fin de fichier (EOF) est rencontrée ou si read dé- passe son délai de réponse. Les délimiteurs rencontrés en entrée ne sont pas traités spécialement et n'entraînent pas la fin de read avant que nb_car caractères n'aient été lus. Le résultat pas découpé selon les caractères dans IFS ; le but est que la variable soit exactement des caractères lus (à l'exception du caractère contre-oblique ; consultez ci-dessous l'option -r). -p invite Afficher invite sur la sortie d'erreur standard, sans ca- ractère final de changement de ligne, avant d'essayer de lire toute nouvelle saisie. L'invite est affichée seule- ment si l'entrée vient d'un terminal. -r La contre-oblique n'agit pas comme un caractère de pro- tection. La contre-oblique est considérée comme faisant partie de la ligne. En particulier, une contre-oblique suivie d'un changement de ligne ne peut pas être considé- rée comme une continuation de ligne. -s Mode silencieux. Si une entrée arrive à partir d'un ter- minal, les caractères ne sont pas affichés. -t attente Conduire read à expirer et renvoyer un échec si une ligne complète en entrée (ou un nombre indiqué de caractères) n'a pas été lue dans le délai en seconde. délai est un nombre décimal avec éventuellement des chiffres après la virgule (NdT : point en l'occurrence). Cette option n'est effective que si read lit l'entrée à partir d'un termi- nal, d'un tube, ou depuis un autre fichier spécial ; elle n'a aucun effet lors de la lecture d'un fichier normal. Si read expire, read sauvegarde toute entrée partielle lue dans la variable nom indiquée. Si délai est nul, read se termine immédiatement, sans essayer de lire des don- nées. L’état de sortie est 0 si une entrée est disponible pour le descripteur de fichier indiqué, ou la lecture renverra EOF, non nulle sinon. L'état final est supérieur à 128 si le délai est dépassé. -u df Lire l'entrée à partir du descripteur de fichier df. Si aucun nom n'est fourni, la ligne lue, sans autre modification que le retrait du délimiteur de fin, est affectée à la variable REPLY. Le code renvoyé est zéro, sauf si une fin de fichier (EOF) est rencontrée, si read dépasse son délai de réponse (au- quel cas le code renvoyé est plus grand que 128), en cas d’er- reur d’affectation (comme une affectation de variable à une va- riable en lecture seule) ou si un descripteur de fichier incor- rect est fourni en argument de -u. readonly [-aAf] [-p] [nom[=mot] ...] Les noms indiqués reçoivent un attribut lecture seule ; les va- leurs de ces noms ne pourront plus être modifiées par des affec- tations ultérieures. Si l'option -f est fournie, les fonctions correspondant à ces noms sont marquées en conséquence. L'option -a restreint l'action aux variables tableaux indicés ; l'option -A restreint l'action aux variables tableaux associatifs. Si les deux options sont fournies, -A est prioritaire. Si aucun argu- ment nom n'est indiqué ou si l'option -p est fournie, une liste de tous les noms en lecture seule est affichée. Les autres op- tions peuvent être utilisées pour restreindre l'affichage à un sous-ensemble de l'ensemble des noms en lecture seule. L'option -p conduit à afficher la sortie dans un format susceptible d'être réutilisé en entrée. Si le nom d'une variable est suivi par =mot, la variable est configurée à mot. L'état renvoyé est 0, sauf si une option incorrecte a été rencontrée, si l'un des noms n'est pas un nom correct de variable de l'interpréteur ou si l'option -f est fournie avec un nom qui n'est pas une fonc- tion. return [n] Forcer une fonction à arrêter son exécution et à renvoyer la va- leur indiquée par n dans son contexte d'appel. Si n est omis, la valeur de retour renvoyée est celle de la dernière commande exé- cutée dans le corps de la fonction. Si return est exécuté par un gestionnaire de capture, la dernière commande utilisée pour dé- terminer l'état est la dernière commande exécutée avant le ges- tionnaire de capture. Si return est exécutée durant une capture de DEBUG, la dernière commande utilisée pour déterminer l'état est la dernière commande exécutée par le gestionnaire de capture avant que return soit invoquée. Si return est utilisée hors d'une fonction, mais pendant l'exécution d'un script par la com- mande . (source), elle conduit à l'arrêt de l'exécution du script par l'interpréteur et renvoie comme état final du script soit n, soit l'état final de la dernière commande exécutée dans le script. Si n est fourni, la valeur de retour est ses 8 bits de poids faible. La valeur de retour est non nulle si un argu- ment non numérique est fourni à return, ou si elle est utilisée hors d'une fonction ou pas lors de l'exécution d'un script par . ou source. Toute commande associée à la capture de RETURN est exécutée avant la reprise de l'exécution après la fonction ou le script. set [-abefhkmnptuvxBCEHPT] [-o nom_d_option] [--] [-] [argument ...] set [+abefhkmnptuvxBCEHPT] [+o nom_d_option] [--] [-] [argument ...] Sans options, afficher le nom et la valeur de toutes les va- riables de l'interpréteur dans un format susceptible d'être réutilisé en entrée pour créer ou réinitialiser les variables actuelles. Les variables en lecture seule ne peuvent pas être réinitialisées. En mode POSIX, seules les variables de l'inter- préteur sont affichées. La sortie est triée en fonction des pa- ramètres linguistiques régionaux actuels. Lorsque des options sont indiquées, elles créent ou détruisent des attributs de l'interpréteur. Tous les arguments restant après traitement des options sont considérés comme des valeurs pour les paramètres positionnels et sont affectés, dans l'ordre, à : $1, $2, ... $n. Les options, si indiquées, ont les significations suivantes : -a Donner l'attribut export aux variables et fonctions créées ou modifiées et les marquer pour qu'elles soient exportées dans l'environnement des commandes exécutées ultérieurement. -b Signaler l'état des tâches terminées en arrière-plan im- médiatement, plutôt que d'attendre l'affichage de la prochaine invite de base. N'est effectif que si le contrôle des tâches est activé. -e Se terminer immédiatement si un pipeline (qui peut être réduit à une unique commande simple), une liste ou une commande composée (consultez GRAMMAIRE DE L'INTERPRÉTEUR above), se termine avec un état différent de zéro. L'in- terpréteur ne se termine pas si la commande qui échoue fait partie d'une liste de commandes suivant immédiate- ment un mot clef while ou until, d'un test suivant les mots réservés if ou elif, d'une commande exécutée dans une liste && ou || sauf si la commande est située après le dernier && ou ||, d'une commande de pipeline à l'ex- ception de la dernière, ou si la valeur renvoyée par la commande est inversée par !. Si une commande composée autre qu’un sous-interpréteur renvoie un état non nul parce qu’une commande échoue alors que -e était ignoré, l’interpréteur ne se termine pas. Une capture sur ERR, si existante, est exécutée avant que l'interpréteur ne se termine. Cette option s'applique à l'environnement de l'interpréteur ainsi qu'à l'environnement de chaque sous-interpréteur individuellement (consultez ENVIRONNE- MENT D'EXÉCUTION DES COMMANDES above), et peut conduire des sous-interpréteurs à se terminer avant d'y avoir exécuté toutes les commandes. Si une commande composée ou une fonction de l’interpré- teur s’exécutent dans un contexte où -e est ignoré, au- cune des commandes exécutées dans une commande composée ou dans un corps de fonction ne sera affectée par le ré- glage -e, même si -e est défini et qu’une commande ren- voie un état d’échec. Si une commande composée ou une fonction de l’interpréteur définissent -e pendant son exécution dans un contexte où -e est ignoré, ce réglage n’aura aucun effet avant la fin de la commande composée ou de la commande contenant l’appel de fonction. -f Désactiver le développement des chemins. -h Mémoriser l'emplacement des commandes lors de leur exé- cution. Activée par défaut. -k Tous les arguments sous la forme d'affectations sont placés dans l'environnement d'une commande, et non pas seulement ceux qui précèdent le nom de la commande. -m Mode supervision. Le contrôle des tâches est activé. Cette option est activée par défaut pour les interpré- teurs interactifs sur les systèmes qui le permettent (consultez CONTRÔLE DES TÂCHES above). Tous les proces- sus sont exécutés dans un groupe de processus séparé. Quand une tâche en arrière-plan se termine, l’interpré- teur affiche une ligne contenant son état final. -n Lecture de commandes sans exécution. Cela peut être uti- lisé pour rechercher les erreurs de syntaxe dans un script. Cette option est ignorée par les interpréteurs interactifs. -o nom_d_option Le nom_d_option est l'un des suivants : allexport Identique à -a. braceexpand Identique à -B. emacs Utiliser une interface d'édition des lignes de commande « à la Emacs ». C'est le comportement activé par défaut quand l'interpréteur est in- teractif, sauf si l'interpréteur est démarré avec l'option --noediting. L'interface d'édition utilisée par read -e est modifiée également. errexit Identique à -e. errtrace Identique à -E. functrace Identique à -T. hashall Identique à -h. histexpand Identique à -H. history Activer l'historique des commandes, comme décrit above dans HISTORY. Cette option est activée par défaut dans les interpréteurs interactifs. ignoreeof Identique à l'exécution de la commande d'inter- préteur ``IGNOREEOF=10'' a été exécutée (consul- tez Variables de l'interpréteur above). keyword Identique à -k. monitor Identique à -m. noclobber Identique à -C. noexec Identique à -n. noglob Identique à -f. nolog Actuellement ignorée. notify Identique à -b. nounset Identique à -u. onecmd Identique à -t. physical Identique à -P. pipefail Si existante, la valeur renvoyée par un pipeline est la valeur de la dernière commande (la plus à droite) à terminer avec un état final différent de zéro ou zéro si toutes les commandes du pipe- line terminent avec succès. Désactivée par dé- faut. posix Aligner le comportement de bash sur la norme (mode POSIX), en ce qui concerne les options dont l'action par défaut diffère de la norme PO- SIX. La section VOIR AUSSI below ci-dessous ré- férence un document précisant la façon dont le mode POSIX affecte le comportement de bash. privileged Identique à -p. verbose Identique à -v. vi Utiliser une interface d'édition des lignes de commande « à la vi ». L'interface d'édition uti- lisée par read -e est modifiée également. xtrace Identique à -x. Si -o est fournie sans nom_d_option, les valeurs ac- tuelles des options sont affichées. Si +o est fournie sans nom_d_option, la série de commandes set permettant de recréer la configuration actuelle d'options est affi- chée sur la sortie standard. -p Basculer en mode privilégié. Dans ce mode, les fichiers $ENV et $BASH_ENV ne sont pas traités, les fonctions de l'interpréteur ne sont pas héritées de l'environnement, et les variables SHELLOPTS, BASHOPTS, CDPATH, et GLOBI- GNORE, si présentes dans l'environnement, sont ignorées. Si l'interpréteur démarre avec un UID (ou respectivement un GID) effectif différent de son UID (GID) réel et si l'option -p n'est pas fournie, ce comportement est ap- pliqué et l'UID (GID) effectif est positionné à l'UID (GID) réel. Si l'option -p est fournie au démarrage, l'UID (GID) effectif n'est pas modifié. Désactiver cette option conduit à la configuration des UID et GID effec- tifs à la valeur des UID et GID réels. -r Activer le mode interpréteur restreint. Cette option ne peut être annulée une fois qu'elle a été définie.' -t Terminer après lecture et exécution d'une commande. -u Considérer les variables inexistantes et les paramètres différents des paramètres spéciaux « @ » et « * », ou les variables tableau indicées par @ ou *, comme des er- reurs lors du développement des paramètres. Si un déve- loppement de variable inexistante ou de paramètre est tenté, l'interpréteur affiche un message d'erreur et, s'il n'est pas interactif, termine avec un état diffé- rent de zéro. -v Afficher les lignes en entrée de l'interpréteur lorsqu'elles sont lues. -x Après le développement de chaque commande simple, com- mande for, commande case, commande select ou commande for arithmétique, afficher la valeur développée de PS4, suivie de la commande et ses arguments développés ou la liste de mots associés. -B L'interpréteur effectue le développement des accolades (consultez Développement des accolades above). Activée par défaut. -C Si configurée, bash n'écrasera pas un fichier existant avec les opérateurs >, >& et <>. Ce comportement peut être surpassé lors de la création d'un fichier de sortie en utilisant l'opérateur de redirection >| à la place de >. -E Si configurée, toute capture sur ERR est héritée par les fonctions d'interpréteur, les substitutions de commandes et les commandes exécutées dans un sous-interpréteur. La capture de ERR n'est normalement pas héritée dans de tels cas. -H Activer le style ! de substitution d'historique. C'est le comportement par défaut lorsque l'interpréteur est interactif. -P Si configurée, l'interpréteur ne résout pas les liens symboliques en exécutant des commandes comme cd qui mo- difient le répertoire de travail. Il utilise à la place le répertoire physique. Par défaut bash suit la chaîne logique des répertoires lors des commandes qui modifient le répertoire actuel. -T Si configurée, toutes les captures de DEBUG et RETURN sont héritées par les fonctions de l'interpréteur, les substitutions de commande et les commandes exécutées dans un sous-interpréteur. Les captures de DEBUG et RE- TURN ne sont normalement pas héritées dans de tels cas. -- Si aucun argument ne suit cette option, alors les pa- ramètres positionnels sont détruits. Sinon, les pa- ramètres positionnels sont configurés aux arguments, même si certains d'entre eux commencent par un -. - Marquer la fin des options, tous les arguments restants sont alors affectés aux paramètres positionnels. Les op- tions -x et -v sont désactivées. S'il n'y a pas d'argu- ments, les paramètres positionnels ne sont pas modifiés. Par défaut les attributs sont désactivés, sauf indication contraire. En utilisant « + » à la place de « - », les options sont désactivées. Les options peuvent également être fournies en argument lors de l'appel de l'interpréteur. Le jeu actuel des options peut être trouvé dans $-. La valeur renvoyée est tou- jours vrai, sauf si une option incorrecte est rencontrée. shift [n] Les paramètres positionnels à partir de n+1 ... sont renommés en $1 .... Les paramètres représentés par les nombres $# jusqu'à $#-n+1 sont détruits. n doit être un entier positif inférieur ou égal à $#. Si n vaut 0, aucun paramètre n'est modifié. Si n est omis, on suppose qu'il vaut 1. Si n est supérieur à $#, les pa- ramètres positionnels ne sont pas modifiés. L'état renvoyé est strictement positif si n est supérieur à $# ou strictement néga- tif, sinon 0 est renvoyé. shopt [-pqsu] [-o] [nom_opt ...] Basculer la valeur des réglages contrôlant le comportement de gestion des options de l'interpréteur. Les réglages peuvent soit être ceux ci-dessous, soit, si l’option -o est utilisée, ceux disponibles avec l’option -o de la commande interne set. Sans option ou avec l'option -p, une liste de toutes les options configurables est affichée, avec l'indication de l'état de cha- cune d'entre elles ; si des nom_opt sont fournis, la sortie est limitée à ces options. L'option -p conduit à un affichage de la sortie sous une forme susceptible d'être réutilisée en entrée. Les autres options ont les significations suivantes : -s Activer (créer) chaque nom_opt. -u Désactiver (détruire) chaque nom_opt. -q Supprimer la sortie normale (mode silencieux) ; l'état renvoyé indique si nom_opt est existante ou non. Si plu- sieurs arguments nom_opt sont indiqués avec -q, l'état renvoyé est zéro si tous les nom_opt sont activés ; dif- férent de zéro sinon. -o Restreindre les valeurs de nom_opt à celles définies pour l'option -o de la commande interne set. Si l'option -s ou -u est utilisée sans argument nom_opt, shopt affiche respectivement les options existantes ou non existantes. Sauf indication contraire, les options shopt sont désactivées (détruites) par défaut. L'état renvoyé lors d'un affichage des options est zéro si tous les nom_opt sont activés, différent de zéro sinon. Lors de la création ou de la destruction d'options, l'état renvoyé est zéro, à moins que nom_opt ne soit pas une option correcte d'in- terpréteur. La liste des options shopt est : assoc_expand_once Si existante, l'interpréteur supprime les évaluation multiples des indices de tableaux associatifs pendant l'évaluation d'expressions arithmétiques, lors de l'exé- cution de commandes internes qui peuvent affecter des variables et lors de l'exécution de commandes internes qui réalisent un déréférencement de tableau. autocd Si existante, un nom de commande qui est le nom d'un ré- pertoire est exécuté comme s'il était l'argument de la commande interne cd. Cette option n'est utilisée que par les interpréteurs interactifs. cdable_vars Si existante, un argument de la commande interne cd qui n'est pas un répertoire est supposé être un nom de va- riable dont la valeur est le répertoire visé. cdspell Si existante, les erreurs minimes de frappe dans un com- posant du répertoire en argument de la commande cd se- ront corrigées. Les erreurs corrigées sont les inver- sions d'un caractère, un caractère manquant et un carac- tère en trop. Si une correction est possible, le nom de répertoire corrigé est affiché et la commande est exé- cuté. Cette option n'est utilisée que par les interpré- teurs interactifs. checkhash Si existante, bash vérifie si une commande trouvée dans la table de hachage existe avant d'essayer de l'exécu- ter. Si une commande hachée n'existe plus, une recherche normale de chemin est effectuée. checkjobs Si existante, bash affiche la liste des états de toutes les tâches en cours et arrêtées avant de terminer un in- terpréteur interactif. Si des tâches sont en cours, la sortie est différée jusqu'à ce qu'une nouvelle sortie soit tentée sans commande intermédiaire (consultez CONTRÔLE DES TÂCHES above). L'interpréteur repousse tou- jours la sortie si des tâches sont arrêtées. checkwinsize Si existante, bash vérifie la taille de la fenêtre après chaque commande externe et, au besoin, met à jour les valeurs des variables LINES et COLUMNS. cmdhist Si existante, bash essaie de sauvegarder les commandes s'étendant sur plusieurs lignes en un seul élément d'historique. Cela facilite l'édition ultérieure de com- mandes multilignes. Cette option est activée par défaut, mais n'a un effet que si l'historique des commandes est activé, comme décrit above dans HISTORY. compat31 compat32 compat40 compat41 compat42 compat43 compat44 compat50 Ces directives contrôlent les aspects du mode de compa- tibilité de l'interpréteur (consultez MODE DE COMPATIBI- LITÉ DE L'INTERPRÉTEUR below). complete_fullquote Si existante, bash protège tous les métacaractères de l’interpréteur dans les noms de fichier et de répertoire lors du complètement. Si non existante, bash supprime les métacaractères comme les signes dollar du jeu de ca- ractères qui sera protégé dans les noms de fichiers com- plétés quand ces métacaractères apparaissent dans des références de variable d’interpréteur dans des mots à compléter. Cela signifie que les signes dollar dans les noms de variables qui se développent en répertoires ne seront pas protégés ; cependant, tous les signes dollar apparaissant dans les noms de fichier ne seront pas pro- tégés non plus. Ce n’est actif que si bash utilise des contre-obliques pour protéger des noms de fichier com- plétés. Cette variable est définie par défaut, ce qui est le comportement de bash par défaut jusqu’à la ver- sion 4.2. direxpand Si existante, bash remplace les noms de répertoire par les résultats de développement de mots lors du complète- ment des noms de fichier. Cela modifie le contenu du tampon d'édition de readline. Sinon, bash essaye de conserver ce que l'utilisateur a tapé. dirspell Si existante, bash essaie de corriger les erreurs de frappe sur les noms de répertoire lors du complètement de mot si le nom de répertoire initialement fourni n'existe pas. dotglob Si existante, bash inclut les noms de fichiers commen- çant par un « . » dans les résultats des développements de chemins. Les noms de fichier « . » et « .. » doivent toujours être toujours être mis en correspondance expli- citement, même si dotglob existe. execfail Si existante, un interpréteur non interactif ne termi- nera pas s'il ne peut exécuter un fichier indiqué en ar- gument de la commande interne exec. Un interpréteur in- teractif ne termine pas si exec échoue. expand_aliases Si existante, les alias sont développés comme décrit above dans ALIAS. Cette option est activée par défaut pour les interpréteurs interactifs. extdebug Si elle existe à l'appel de l'interpréteur ou dans un fichier de lancement de l'interpréteur, prend les dispo- sitions pour que le paramétrage du traçage soit exécuté avant que l'interpréteur démarre, identique à l'option --debugger. Si elle est posée après l'appel, le compor- tement prévu pour l'utilisation du traçage est activé : 1. L'option -F de la commande interne declare af- fiche le nom du fichier source et le numéro de ligne correspondant à chaque nom de fonction fourni comme argument. 2. Si la commande lancée par la capture de DEBUG renvoie une valeur différente de zéro, la com- mande suivante est sautée et n'est pas exécutée. 3. Si la commande lancée par la capture de DEBUG renvoie la valeur 2 et si l'interpréteur s'exé- cute dans un sous-programme (une fonction de l'interpréteur ou un script exécuté par les com- mandes internes . ou source), l'interpréteur si- mule un appel à return. 4. BASH_ARGC et BASH_ARGV sont mises à jour comme expliqué dans leurs descriptions. above). 5. Le traçage des fonctions est activé : la substi- tution de commande, les fonctions de l'interpré- teur et les sous-interpréteurs appelés avec ( command ) héritent des captures de DEBUG et RE- TURN. 6. Le traçage d'erreur est activé : la substitution de commande, les fonctions de l'interpréteur et les sous-interpréteurs appelés avec ( command ) héritent de la capture de ERR. extglob Si existante, les fonctionnalités étendues de mise en correspondance décrites above dans Développement des chemins sont activées. extquote Si existante, la protection par $'chaîne' et $"chaîne" est effectuée à l'intérieur des développements de ${pa- ramètres} entre guillemets doubles. Cette option est ac- tivée par défaut. failglob Si existante, les motifs qui échouent à faire corres- pondre les noms de fichiers pendant le développement des chemins font qu'ils provoqueront une erreur de dévelop- pement. force_fignore Si existante, les suffixes indiqués par la variable de l'interpréteur FIGNORE conduiront des mots à être igno- rés lors du complètement de mot, même si les mots igno- rés sont les seuls complètements possibles. Consultez VARIABLES DE L'INTERPRÉTEUR above pour une description de FIGNORE. Cette option est activée par défaut. globasciiranges Si existante, les expressions d’intervalle utilisées dans les motifs de correspondance des expressions entre crochets (consultez Motifs génériques above) se com- portent comme avec les paramètres régionaux tradition- nels de C lors des comparaisons. Cela signifie que l’ordre de collation des paramètres régionaux actuels n’est pas pris en compte, donc b ne sera pas ordonné entre A et B, et les caractères ASCII en majuscule et minuscule seront fusionnés. globskipdots Si existante, le développement des chemins ne sera ja- mais mis en correspondance avec les noms de fichier « . » et « .. », même si le motif débute par un « . ». Cette option est activée par défaut. globstar Si existante, le motif ** utilisé dans un contexte de développement des chemins correspondra à tous les fi- chiers et zéro ou plusieurs répertoires et sous-réper- toires. Si le motif est suivi de /, seuls les réper- toires et sous-répertoires correspondent. gnu_errfmt Si existante, les messages d'erreur de l'interpréteur seront écrits dans le format standard GNU des messages d'erreurs. histappend Si existante, la file d'historique est ajoutée au fi- chier désigné par la valeur de la variable HISTFILE lorsque l'interpréteur termine, plutôt que d'écraser ce fichier. histreedit Si existante et si readline est utilisée, un utilisateur peut rééditer une substitution d'historique qui a échoué. histverify Si existante et si readline est utilisée, le résultat de la substitution d'historique n'est pas transmise immé- diatement à l'analyseur de l'interpréteur. À la place, la ligne résultante est chargée dans le tampon d'édition de readline, permettant des modifications ultérieures. hostcomplete Si existante et si readline est utilisée, bash essayera d'effectuer le complètement des noms de machines lorsqu'un mot contient un @ (consultez Complètement dans READLINE above). Cette option est activée par défaut. huponexit Si existante, bash enverra un signal SIGHUP à toutes les tâches lorsqu'un interpréteur de connexion interactif termine. inherit_errexit Si existante, la substitution de commande hérite de la valeur de l'option errexit, plutôt que de la détruire dans l'environnement du sous-interpréteur. Cette option est activée quand le mode POSIX est activé. interactive_comments Si existante, un mot commençant par un # conduira ce mot et tous les autres caractères restants de la ligne à être ignorés dans un interpréteur interactif (consultez COMMENTAIRES above). Cette option est activée par dé- faut. lastpipe Si existante, et que le contrôle des tâches n'est pas activé, l'interpréteur exécute la dernière commande d'un pipeline non exécutée en arrière-plan dans l'environne- ment d'interpréteur actuel. lithist Si existante et si l'option cmdhist est activée, les commandes multilignes sont sauvegardées dans l'histo- rique avec des changements de ligne incorporés comme sé- parateurs plutôt que des points-virgules là où c'est possible. localvar_inherit Si existante, les variables locales héritent de la va- leur et des attributs d'une variable du même nom qui existe avec une portée antérieure avant qu'une nouvelle valeur soit assignée. L'attribut -nameref n'est pas hé- rité. localvar_unset Si existante, appeler unset sur des variables locales dans des portées de fonction antérieures les marque de telle manière que des recherches ultérieures les trouve désactivées jusqu'à ce la fonction renvoie. Ce comporte- ment est le même que de détruire les variables locales avec la portée de la fonction actuelle. login_shell L'interpréteur crée cette option s'il est démarré en tant qu'interpréteur de connexion (consultez APPEL above). La valeur ne peut être modifiée. mailwarn Si existante et s'il a été accédé à un fichier que bash surveille pour les courriers depuis sa dernière vérifi- cation, le message « Le courrier dans fichier_de_cour- rier a été lu. » est affiché. no_empty_cmd_completion Si existante et si readline est utilisée, bash n'es- saiera pas d'utiliser le PATH pour de possibles complè- tements quand le complètement est tenté sur une ligne vide. nocaseglob Si existante, bash fait correspondre les noms de fi- chiers d'une façon insensible à la casse lors du déve- loppement des chemins (consultez Développement des che- mins above). nocasematch Si existante, bash fait correspondre les motifs d'une façon insensible à la casse lors de la mise en corres- pondance pendant l'exécution des commandes condition- nelles case ou [[, lorsqu'il procède à des développe- ments de motif de substitution de mot ou qu'il filtre des complètement possibles dans le cadre d'un complète- ment programmable. noexpand_translation Si existante, bash entoure les résultats de la traduc- tion de la protection de $"..." par des guillemets simples au lieu de guillemets doubles. Si la chaîne n'est pas traduite, cela n'a aucun effet. nullglob Si existante, bash autorise les motifs ne correspondant à aucun fichier (consultez Développement des chemins above) à se développer en une chaîne NULL plutôt qu'en une valeur littérale. patsub_replacement Si existante, bash développe les occurrences de & dans la chaîne de remplacement de la substitution de motif vers le texte mis en correspondance par le motif, comme décrit dans Développement des paramètres above. Cette option est activée par défaut. progcomp Si existante, les outils de complètement programmables (consultez Complètement programmable above) sont acti- vés. Cette option est activée par défaut. progcomp_alias Si existante et si le complètement programmable est ac- tivé, bash traite un nom de commande qui n'a pas de com- plètement comme un possible alias et tente un développe- ment d'alias. S'il possède un alias, bash tente un com- plètement programmable en utilisant le nom de commande résultant du développement d'alias. promptvars Si existante, les chaînes d'invite sont sujettes au dé- veloppement des paramètres, à la substitution de com- mande, au développement arithmétique et à la suppression des protections après avoir été développées comme décrit dans INVITES. above. Cette option est activée par dé- faut. restricted_shell L'interpréteur définit cet option s'il démarre en mode restreint (consultez INTERPRÉTEUR RESTREINT below). Cette valeur ne peut pas être changée. Elle n'est pas réinitialisée lorsque les fichiers d’initialisation sont exécutés, ce qui permet à ces fichiers de découvrir si un interpréteur est restreint ou non. shift_verbose Si existante, la commande interne shift affiche un mes- sage d'erreur lorsque le nombre de décalages dépasse le nombre de paramètres positionnels. sourcepath Si existante, la commande interne source (.) utilise la valeur de la variable PATH pour trouver le répertoire contenant le fichier fourni en argument. Cette option est activée par défaut. varredir_close Si existante, l'interpréteur ferme automatiquement les descripteurs de fichier affectés en utilisant la syntaxe de redirection {nom_de_variable} (consultez REDIRECTION above) au lieu de les laisser ouverts quand la commande se termine. xpg_echo Si existante, la commande interne echo développe par dé- faut les suites de caractères de protection par contre-oblique. suspend [-f] Suspendre l'exécution de l'interpréteur jusqu'à la réception d'un signal SIGCONT. Un interpréteur de connexion, ou un inter- préteur dont le contrôle des tâches n'est pas activé, ne peut pas être suspendu ; l'option -f permet de surpasser ce comporte- ment et force sa suspension. L'état renvoyé est 0, sauf si l'in- terpréteur est un interpréteur de connexion, ou si le contrôle des tâches n'est pas activé et que l'option -f est absente. test expr [ expr ] Renvoyer un état 0 (vrai) ou 1 (faux) suivant l'évaluation de la condition expr. Chaque opérateur et opérande doit être repré- senté par un argument distinct. Les expressions sont composées des primitives décrites above dans CONDITIONS. test n'accepte aucune option, n'accepte pas non plus et ignore un argument de -- pour signifier la fin des options. Les conditions peuvent être combinées avec les opérateurs sui- vant, décrits par ordre de priorité décroissante. L'évaluation dépend du nombre d'arguments, voir ci-dessous. La priorité des opérateurs est utilisée quand il y a au moins cinq arguments. ! expr Vrai si expr est fausse. ( expr ) Renvoie la valeur de expr. Peut servir à surpasser la priorité normale des opérateurs. expr1 -a expr2 Vrai si expr1 et expr2 sont toutes deux vraies. expr1 -o expr2 Vrai si expr1 ou expr2 est vraie. test et [ évaluent les conditions en fonction d'un jeu de règles dépendant du nombre d'arguments. 0 argument La condition est fausse. 1 argument La condition est vraie si et seulement si l'argument n'est pas NULL. 2 arguments Si le premier argument est !, la condition est vraie si et seulement si le second argument est NULL. Si le pre- mier argument est l'un des opérateurs conditionnels unaires décrits above dans CONDITIONS la condition est vraie si le test unaire est vrai. Si le premier argument n'est pas un opérateur conditionnel unaire correct, la condition est fausse. 3 arguments Les conditions suivantes sont appliquées dans l'ordre de la liste. Si le second argument est l'un des opérateurs conditionnels binaires décrits above dans CONDITIONS, le résultat de la condition est le résultat du test binaire utilisant le premier et le troisième argument en tant qu'opérandes. Les opérateurs -a et -o sont considérés comme des opérateurs binaires quand il y a trois argu- ments. Si le premier argument est !, la valeur est la né- gation du test binaire utilisant les deuxième et troi- sième arguments. Si le premier argument est exactement ( et le troisième argument est exactement ), le résultat est le test unaire du second argument. Sinon la condition est fausse. 4 arguments Les conditions suivantes sont appliquées dans l'ordre de la liste. Si le premier argument est !, le résultat est la négation de l'expression ternaire composée des argu- ments restants, le test binaire utilisant les deuxième et troisième arguments. Si le premier argument est exacte- ment ( et le quatrième argument est exactement ), le ré- sultat est le test binaire des deuxième et troisième ar- guments. Sinon la condition est analysée et évaluée sui- vant la priorité utilisant les règles listées ci-dessus. 5 arguments ou plus La condition est analysée et évaluée selon les règles de priorité décrites ci-dessus. Lorsqu'ils sont utilisés avec test ou [, les opérateurs < et > ordonnent d'un point de vue lexicographique en utilisant l'ordre ASCII. times Afficher les durées cumulées utilisateur et système pour l'in- terpréteur et les processus lancés par cet interpréteur. L'état renvoyé est 0. trap [-lp] [[argument] signal ...] La commande argument doit être lue et exécutée quand l'interpré- teur reçoit au moins un signal. Si argument est absent (et qu'un seul signal est fourni) ou -, chaque signal indiqué est réini- tialisé à sa position d'origine (la valeur qu'il avait lors de l'entrée dans l'interpréteur). Si argument est la chaîne NULL, chaque signal indiqué est ignoré par l'interpréteur et par les commandes qu'il appelle. Si argument n'est pas présent et que -p est fourni, les commandes capturées associées à chaque signal sont affichées. Si aucun argument n'est fourni, ou si seul -p est donné, trap affiche la liste des commandes associées à chaque signal. L'option -l conduit l'interpréteur à afficher une liste des noms de signal et leur numéro correspondant. Chaque signal est soit un nom de signal défini dans <signal.h>, soit un numéro de signal. Les noms de signal sont insensibles à la casse et le préfixe SIG est optionnel. Si un signal est EXIT (0), la commande argument est exécutée lors de la sortie de l'interpréteur. Si un signal est DEBUG, la commande argument est exécutée avant toute commande simple, com- mande for, commande case, commande select, toute commande for arithmétique, et avant que la première commande n'exécute une fonction de l'interpréteur (consultez GRAMMAIRE DE L'INTERPRÉ- TEUR. above). Reportez-vous à la description de l'option extde- bug de la commande interne shopt pour obtenir des renseignements sur les effets de la capture DEBUG. Si un signal est RETURN, la commande argument est exécutée à chaque fois qu'une fonction de l'interpréteur, ou un script exécuté avec les commandes internes . ou source, termine son exécution. Si un signal est ERR, la commande argument est exécutée chaque fois qu'un pipeline (qui peut être réduit à une unique commande simple), une liste ou une commande composée, renvoie un état fi- nal différent de zéro, soumis aux conditions suivantes. La cap- ture ERR n'est pas exécutée si la commande échouant fait partie d'une liste de commandes suivant immédiatement un mot clef while ou until, d'un test dans une construction if, d'une commande exécutée au sein d'une liste de && ou de || exceptée la commande suivant le dernier && ou ||, n’importe quelle commande d’un pi- peline sauf la dernière, ou si la valeur renvoyée par la com- mande est inversée par !. Ce sont les mêmes conditions que celles observées par l'option errexit (-e). Les signaux ignorés en entrant dans l'interpréteur ne peuvent être capturés ou réinitialisés. Les signaux capturés qui ne sont pas ignorés sont réinitialisés à leur valeur d'origine dans un sous-interpréteur ou un environnement de sous-interpréteur quand il est créé. L'état renvoyé est faux si un signal n'est pas va- lable, sinon trap renvoie vrai. type [-aftpP] nom [nom ...] Sans option, indiquer la façon d’interpréter chaque nom s’il est utilisé en nom de commande. Si l'attribut -t est utilisé, type affiche une des chaînes alias, keyword, function, builtin ou file selon que le nom est un alias, un mot clef réservé de l'in- terpréteur, une fonction, une commande interne ou un fichier sur le disque. Si le nom n'est pas trouvé, rien n'est affiché et un état final à faux est renvoyé. Si l'option -p est utilisée, type renvoie le nom du fichier qui sera exécuté si l'on tape le nom en guise de commande ou rien si ``type -t name'' ne renvoyait pas file. L'option -P force une recherche dans PATH pour chaque nom, même si ``type -t name'' ne renvoyait pas file. Si une com- mande est disponible dans la table de hachage, -p et -P af- fichent la valeur de cette table, qui n'est pas nécessairement le fichier apparaissant en premier dans PATH. Si l'option -a est appelée, type affiche tous les emplacements contenant un exécu- table du nom indiqué. Cela inclut les alias et les fonctions, sauf si l'option -p est également présente. La table de hachage des commandes n'est pas consultée avec l'option -a. L'option -f supprime la fonction de l'interpréteur de consultation de table, comme avec la commande interne command. type renvoie vrai si tous les arguments sont trouvés et faux si aucun n'a été trouvé. ulimit [-HS] -a ulimit -HS] [-bcdefiklmnpqrstuvxPRT [limitation]] Fournir, sur les systèmes qui le permettent, un mécanisme de contrôle des ressources disponibles pour l'interpréteur et pour les processus qu'il lance. Les options -H et -S indiquent si la limitation est stricte (« hard ») ou flexible (« soft ») pour la ressource indiquée. Une limitation stricte ne peut pas être aug- mentée par un utilisateur non privilégié une fois qu'elle a été configurée ; une limitation flexible peut être augmentée jusqu'à la valeur de la limitation stricte correspondante. Si ni -H ni -S n'est indiqué, les limitations stricte et flexible sont toutes deux configurées. La valeur de la limitation peut être un nombre (utilisant les unités particulières de la ressource) ou l'une des valeurs spéciales hard, soft ou unlimited, qui signi- fient, respectivement, la limitation stricte actuelle, la limi- tation flexible actuelle et l'absence de limitation. Si la limi- tation est omise, la valeur actuelle de la limitation flexible pour la ressource est affichée, à moins que l'option -H soit in- diquée. Quand plusieurs ressources sont indiquées, les noms des limitations et leurs unités, le cas échéant, sont affichés avant les valeurs. Les autres options sont interprétées comme suit : -a Toutes les limitations actuelles sont signalées ; aucune limitation n'est fixée -b La taille maximale du tampon de socket -c La taille maximale des fichiers core créés -d La taille maximale du segment de données d'un processus -e La priorité maximale d’ordonnancement (« nice ») -f La taille maximale d'un fichier écrit par l'interpréteur et ses enfants -i Le nombre maximal de signaux en attente -k Le nombre maximal de kqueue qui peuvent être alloués -l La taille maximale qui peut être verrouillée en mémoire -m La taille maximale de la partie résidente d'un processus (« resident set size » ou RSS, la plupart des systèmes ne respectent pas cette limite) -n Le nombre maximal de descripteurs de fichiers ouverts (la plupart des systèmes ne permettent pas de modifier cette valeur) -p La taille d'un tube en blocs de 512 octets (parfois in- existante) -q Le nombre maximal d'octets dans les files de messages PO- SIX -r La priorité maximale d'ordonnancement temps-réel -s La taille maximale de la pile -t La durée maximale, en seconde, de temps processeur ac- cordé à un processus -u Le nombre maximal de processus autorisés pour un seul utilisateur -v La quantité maximale de mémoire virtuelle disponible pour l'interpréteur et, sur certains systèmes, pour ses en- fants -x Le nombre maximal de verrous de fichiers -P Le nombre maximal de pseudo-terminaux -R La durée maximale pendant laquelle un processus en temps réel peut s'exécuter avant de bloquer, en microsecondes. -T Le nombre maximal de processus légers (« threads ») Si une limitation est indiquée, et que l'option -a n’est pas donnée, limitation sera la nouvelle valeur pour la ressource in- diquée. Si aucune option n'est indiquée alors -f est supposée. Les valeurs s'expriment par pas de 1024 octets, sauf pour -t qui est en secondes, -R qui est en microsecondes, -p qui utilise comme unité le bloc de 512 octets ; pour -P, -T, -b, -k, -n et -u qui n'ont pas d'unité ; enfin, en mode POSIX, la valeur pour -c et -f s'exprime par pas de 512 octets. Le code de retour est 0, sauf si une option ou un argument incorrect ont été fournis ou si une erreur se produit en configurant une nouvelle limita- tion. umask [-p] [-S] [mode] Le masque de création de fichier de l'utilisateur est configuré à mode. Si mode commence par un chiffre, il est interprété comme un nombre octal, sinon il est considéré comme un masque symbo- lique, semblable à ceux acceptés par chmod(1). Si mode est omis ou si l'option -S est fournie, la valeur actuelle du masque est affichée. L'option -S conduit à l'affichage du masque sous forme symbolique, l'affichage par défaut étant en octal. Si l'option -p est fournie et si le mode est omis, la sortie a lieu dans un format réutilisable en entrée. L'état renvoyé est 0 si le mode a pu être changé correctement ou si aucun argument mode n'a été fourni, et faux sinon. unalias [-a] [nom ...] Supprimer le nom de la liste des alias définis. Si l'option -a est fournie, toutes les définitions d'alias sont supprimées. La valeur renvoyée est vrai, sauf si un nom fourni n'est pas un alias défini. unset [-fv] [-n] [nom ...] Pour chaque nom indiqué, supprimer la variable ou la fonction correspondante. Si l'option -v est indiquée, chaque nom se rap- porte à une variable de l'interpréteur, et cette variable est supprimée. Les variables en lecture seule ne peuvent pas être détruites. Si l'option -f est indiquée, chaque nom se rapporte à une fonction de l'interpréteur et la définition de la fonction est supprimée. Si l’option -n est fournie, et que nom est une variable avec l’attribut nameref, nom sera détruite plutôt que la variable qu’elle référence. -n n’a pas d’effet si l’option -f est fournie. Si aucune option n’est fournie, chaque nom fait ré- férence à une variable ; si aucune variable de ce nom n’existe, toutes les fonctions de ce nom sont détruites. Toutes les va- riables et fonctions détruites sont supprimées de l'environne- ment transmis aux commandes ultérieures. Si l'une des variables BASH_ALIASES, BASH_ARGV0, BASH_CMDS, BASH_COMMAND, BASH_SUB- SHELL, BASHPID, COMP_WORDBREAKS, DIRSTACK, EPOCHREALTIME, EPOCH- SECONDS, FUNCNAME, GROUPS, HISTCMD, LINENO, RANDOM, SECONDS, ou SRANDOM est détruite, elle perd ses propriétés particulières, même si elle est recréée ultérieurement. L'état final est vrai sauf si un des noms est en lecture seule ou ne peut pas être dé- truit. wait [-fn] [-p nom_de_variable] [id ...] Attendre que tous les processus enfants indiqués s’exécutent et renvoient leur état final. Chaque id peut être un PID ou une spécification de tâche ; si une spécification de tâche est indi- quée, la fin de tous les processus du pipeline de cette tâche sera attendue. Si id est omis, wait attend la fin de toutes les tâches exécutées en arrière-plan et la substitution du dernier processus exécuté, si l'id du processus est le même que $!, et le code de retour est zéro. Si l’option -n est fournie, wait at- tend qu'une seule tâche de la liste d'id ou, si aucun id n'est fourni, que toutes les tâches se terminent et renvoient leur état final. Si aucun des arguments fournis n'est un enfant de l'interpréteur, l'état renvoyé est 127. Si l'option -p est four- nie, l'identificateur de processus ou de tâche de la tâche pour laquelle l'état final est renvoyé est affecté à la variable nom_de_variable nommée par l'argument de l'option. La variable sera détruite initialement, avant toute affectation. C'est utile seulement lorsque l'option -n est fournie. Fournir l'option -f, quand le contrôle des tâches est activé, force wait à attendre que id se termine avant de renvoyer son état, plutôt que de ren- voyer son état quand il change. Si id indique un processus ou une tâche inexistants, l'état renvoyé est 127. Si wait est in- terrompu par un signal, l'état renvoyé sera supérieur à 128 comme décrit dans SIGNAUX. above. Sinon, l'état renvoyé est l'état final du dernier processus, ou tâche, attendu. MODE DE COMPATIBILITÉ DE L'INTERPRÉTEUR Bash-4.0 a introduit le concept de niveau de compatibilité de l'inter- préteur spécifié comme un ensemble d'options de la commande interne shopt (compat31, compat32, compat40, compat41, etc.). Il ne peut y avoir qu'un seul niveau de compatibilité en cours – les options s'ex- cluent mutuellement. Le niveau de compatibilité est destiné à permettre aux utilisateurs de choisir un comportement d'une version antérieure qui est incompatible avec les versions plus récentes lors des migra- tions de scripts pour utiliser les fonctionnalités et les comportements actuels. C'est censé être une solution temporaire. Cette section ne mentionne pas les comportements standards d'une ver- sion particulière (par exemple, la configuration à compat32 signifie que la protection de la partie droite de l'opérateur de correspondance d'une expression rationnelle protège les caractères spéciaux d'expres- sion rationnelle dans le mot, ce qui est le comportement par défaut dans bash-3.2 et les versions suivantes). Si l'utilisateur active, par exemple, compat32, cela peut affecter le comportement des autres niveaux de compatibilité jusqu'à, et y compris, le niveau de compatibilité en cours. L'idée est que chaque niveau de compatibilité contrôle les comportements qui ont changé dans cette ver- sion de bash, mais ces comportements peuvent avoir été présents dans des versions précédentes. Par exemple, la modification pour utiliser les comparaisons basées sur les paramètres linguistiques régionaux avec la commande [[ a été introduite dans bash-4.1 et les versions précé- dentes utilisaient des comparaisons basées sur ASCII, aussi, activer compat32 activera également les comparaisons basées sur ASCII. Cette granularité peut ne pas être suffisante pour tous les usages, et, de ce fait, les utilisateurs devraient employer prudemment les niveaux de compatibilité. Lisez la documentation d'une fonctionnalité particulière pour découvrir le comportement actuel. Bash-4.3 a introduit une nouvelle variable de l'interpréteur : BASH_COMPAT. La valeur affectée à cette variable (un numéro de version décimal, comme 4.2, ou un nombre entier correspondant à l'option com- patNN, comme 42) détermine le niveau de compatibilité. À partir de bash-4.4, bash a commencé à rendre obsolètes les niveaux de compatibilité plus anciens. Les options finiront par être retirées au profit de BASH_COMPAT. Bash-5.0 est la dernière version pour laquelle il y aura une option de shopt particulière pour la version précédente. Les utilisateurs de- vraient utiliser BASH_COMPAT avec bash-5.0 et les versions ultérieures. Le tableau suivant décrit les changements de comportement contrôlés par chaque configuration de niveau de compatibilité. L'étiquette compatNN est un raccourci utilisé pour configurer le niveau de compatibilité à NN en utilisant un des mécanismes suivants. Pour les versions anté- rieures à bash-5.0, le niveau de compatibilité peut être fixé avec l'option de compatNN de shopt correspondante. Pour bash-4.3 et les ver- sions ultérieures, la variable BASH_COMPAT est privilégiée et devient obligatoire pour bash-5.1 et les versions ultérieures. compat31 • La protection de la partie droite de l'opérateur de cor- respondance (=~) d'une expression rationnelle de la com- mande [[ n'a aucun effet particulier. compat32 • L'interruption d'une liste de commandes comme « a ; b ; c » provoque l'exécution de la commande suivante dans la liste (avec bash-4.0 et les versions ultérieures, l'in- terpréteur se comporte comme s'il recevait l'interrup- tion, aussi l'interruption d'une commande dans une liste termine l'exécution de toute la liste). compat40 • Les opérateurs < et > de la commande [[ ne tiennent pas compte des paramètres linguistiques régionaux actuels lors des comparaisons de chaînes. Ils utilisent l'ordre ASCII. Les versions de bash antérieures à 4.1 utilisent la collation ASCII et strcmp(3). bash à partir de la ver- sion 4.1 utilise la suite de collation des paramètres linguistiques régionaux et strcoll(3). compat41 • En mode POSIX, time peut être suivi par des options tout en continuant à être reconnu comme un mot réservé (c'est l'interprétation POSIX 267). • En mode POSIX, l'analyseur exige qu'il existe un nombre pair de guillemets simples dans la partie mot d'un déve- loppement de paramètres protégé par des guillemets doubles et les traite de façon particulière, ainsi les caractères entre les guillemets simples sont considérés comme protégés (c'est l'interprétation POSIX 221). compat42 • La chaîne de remplacement dans le motif de substitution entre guillemets doubles n'est pas sujette à la suppres- sion des guillemets, comme dans les versions postérieures à bash-4.2. • En mode POSIX, les guillemets simples sont considérés particuliers lors du développement de la partie mot d'un développement de paramètres protégée par des guillemets doubles et peuvent être utilisés pour protéger une acco- lade fermante ou un autre caractère spécial (cela fait partie de l'interprétation POSIX 221) ; dans les versions ultérieures, les guillemets simples ne sont pas traités particulièrement dans les développements de mots entre guillemets doubles. compat43 • L'interpréteur n'affiche pas de message d'avertissement si une tentative est faite d'utiliser une affectation composée protégée comme un argument à déclarer (par exemple, déclarer -a toto='(1 2)'). Les versions ulté- rieures avertissent que cette utilisation est obsolète. • Les erreurs de développement de mots ne sont pas considé- rées comme des erreurs fatales qui provoquent l'échec de la commande en cours, même en mode POSIX (le comportement par défaut est de les traiter comme des erreurs fatales, ce qui fait que l'interpréteur termine). • Lors de l'exécution d'une fonction de l'interpréteur, l'état de la boucle (while/until/ etc.) n'est pas réini- tialisé, aussi break ou continue dans cette fonction in- terrompt ou poursuit la boucle dans le contexte de l'ap- pel. Bash-4.4 et les versions ultérieures réinitialisent l'état de la boucle pour éviter cela. compat44 • L'interpréteur configure les valeurs utilisées par BASH_ARGV et BASH_ARGC de telle manière qu'elles peuvent se développer en paramètres positionnels de l'interpré- teur même si le mode de traçage étendu n'est pas activé. • Un sous-interpréteur hérite des boucles du contexte de son parent, aussi break ou continue provoqueront la ter- minaison du sous-interpréteur. Bash-5.0 et les versions ultérieures réinitialisent l'état de la boucle pour évi- ter la terminaison. • Les affectations de variables précédant des commandes in- ternes comme export et readonly qui configurent des at- tributs, continuent à affecter des variables ayant le même nom dans l'environnement d'appel même si l'interpré- teur n'est pas en mode POSIX. compat50 • Bash-5.1 a modifié la manière dont $RANDOM est généré pour introduire un peu plus d'aléa. Si le niveau de com- patibilité de l'interpréteur est fixé à 50 ou moins, bash retourne à la méthode de bash-5.0 et des versions anté- rieures, aussi l'ensemencement du générateur de nombres aléatoires en affectant une valeur à RANDOM produira la même séquence qu'avec bash-5.0. • Si la table de hachage des commandes est vide, les ver- sions de bash antérieures à bash-5.1 affichaient un mes- sage d’information à cet effet même quand elles produi- saient une sortie qui pouvait être réutilisée en entrée. Bash-5.1 supprime ce message quand l'option -l est four- nie. compat51 • La commande interne unset traite les tentatives pour dé- truire les tableaux indicés par @ et * différemment selon que le tableau est un tableau indicé ou associatif, et autrement que dans les versions précédentes. INTERPRÉTEUR RESTREINT Si bash démarre sous le nom rbash ou si l'option -r est fournie lors de son appel, l'interpréteur devient restreint. Un interpréteur restreint permet de créer un environnement plus contrôlé qu'un interpréteur stan- dard. Il se comporte de même façon que bash à la différence des actions suivantes qui sont interdites ou non effectuées : • changer de répertoire avec cd ; • créer ou détruire les valeurs de SHELL, PATH, HISTFILE, ENV ou BASH_ENV ; • indiquer des noms de commandes contenant un / ; • indiquer un nom de fichier contenant un / comme argument de la commande interne . ; • indiquer un nom de fichier contenant une barre oblique (/) comme argument de la commande interne history ; • indiquer un nom de fichier contenant une barre oblique comme ar- gument de l'option -p de la commande interne hash ; • importer une définition de fonction dans l'environnement au dé- marrage ; • analyser les valeurs de SHELLOPTS de l'environnement d'interpré- teur au démarrage ; • rediriger la sortie en utilisant les opérateurs de redirection >, >|, <>, >&, &> et >> ; • utiliser la commande interne exec pour remplacer l'interpréteur par une autre commande ; • ajouter ou supprimer des commandes internes avec les options -f et -d de la commande interne enable ; • utiliser la commande interne enable pour activer les commandes internes de l'interpréteur désactivées ; • indiquer l'option -p à la commande interne commande ; • supprimer le mode restreint avec set +r ou shopt -u restric- ted_shell. Ces restrictions sont mises en place après la lecture de tous les fi- chiers d’initialisation. When a command that is found to be a shell script is executed (see COM- MAND EXECUTION above), rbash supprime toute restriction dans l'inter- préteur créé pour exécuter le script. VOIR AUSSI Manuel de référence de Bash, Brian Fox et Chet Ramey The GNU Readline Library, Brian Fox et Chet Ramey The GNU History Library, Brian Fox et Chet Ramey Portable Operating System Interface (POSIX) Part 2: Shell and Utili- ties, IEEE – http://pubs.opengroup.org/onlinepubs/9699919799/ http://tiswww.case.edu/~chet/bash/POSIX – une description du mode POSIX sh(1), ksh(1), csh(1) emacs(1), vi(1) readline(3) FICHIERS /bin/bash L'exécutable bash /etc/profile Le fichier d'initialisation commun à tout le système, exécuté pour les interpréteurs de commandes de connexion /etc/bash.bashrc Le fichier d’initialisation commun à tout le système pour les interpréteurs interactifs /etc/bash.bash.logout Le fichier de nettoyage des interpréteurs de connexion commun à tout le système, exécuté lorsqu'un interpréteur de connexion termine ~/.bash_profile Le fichier d'initialisation personnel exécuté pour les interpré- teurs de commandes de connexion ~/.bashrc Le fichier d’initialisation personnel pour les interpréteurs in- teractifs ~/.bash_logout Le fichier de nettoyage personnel des interpréteurs de commandes de connexion, exécuté lorsqu'un interpréteur de commandes de connexion termine ~/.bash_history La valeur par défaut de HISTFILE, le fichier dans lequel bash sauvegarde l'historique des commandes ~/.inputrc Le fichier d'initialisation personnel de readline AUTEURS Brian Fox, Free Software Foundation bfox@gnu.org Chet Ramey, Case Western Reserve University chet.ramey@case.edu SIGNALEMENTS DE BOGUES Si vous trouvez une anomalie dans bash, vous devriez la signaler. Tout d'abord vous devez vous assurer qu'il s'agit réellement d'une anomalie et qu'elle apparaît bien dans la dernière version disponible de bash. La dernière version est toujours disponible à partir de ftp://ftp.gnu.org/pub/gnu/bash/. Une fois que vous avez déterminé qu'une anomalie existe effectivement, utilisez la commande bashbug pour envoyer un signalement d'anomalie. Si vous avez un correctif, vous êtes encouragé à l'envoyer en même temps ! Les suggestions ou les signalements d'anomalies de nature « philoso- phique » peuvent être envoyés (en anglais) à bug-bash@gnu.org ou postés dans le groupe Usenet gnu.bash.bug. TOUS les signalements d'anomalie doivent contenir : Le numéro de version de bash Le matériel et le système d'exploitation utilisés Le compilateur utilisé pour compiler Une description (en anglais) de l'anomalie Un petit script ou une « recette » qui démontre l'anomalie bashbug insère automatiquement les trois premiers éléments de cette liste dans le formulaire qu'il fournit pour remplir un signalement d'anomalie. Les commentaires et signalement d'anomalies concernant la version ori- ginale de cette page de manuel (en anglais) doivent être transmis à chet.ramey@case.edu. Ceux concernant cette version française peuvent être envoyés à debian-l10n-french@lists.debian.org. BOGUES Cet interpréteur de commandes est trop gros et trop lent. Il y a quelques différences subtiles de comportement entre bash et les versions traditionnelles de sh, principalement à cause des spécifica- tions POSIX. L'utilisation des alias peut avoir des conséquences inattendues. Les commandes internes et les fonctions de l'interpréteur ne peuvent pas être suspendues/relancées. Les commandes composées et les suites de commandes de la forme « a ; b ; c » ne sont pas gérées élégamment lors d'une interruption de processus. En cas de suspension d'un processus, l'interpréteur exécute immédiatement la commande suivante. Il suffit de placer cette suite de commandes entre parenthèses pour la forcer à créer un sous-interpré- teur, qui, lui, pourra être suspendu en bloc. Les variables de type tableau ne peuvent pas (encore) être exportées. Il ne peut exister qu'un seul coprocessus actif à la fois. TRADUCTION La traduction française de cette page de manuel a été créée par Chris- tophe Blaess <ccb@club-internet.fr>, Thierry Vignaud <tvignaud@man- driva.com>, Amand Tihon <amand@alrj.org>, Alain Portal <aportal@univ- montp2.fr>, Frederic Daniel Luc Lehobey <Frederic@Lehobey.net>, David Prévot <david@tilapin.org> et Jean-Pierre Giraud <jean-pierregi- raud@neuf.fr> Cette traduction est une documentation libre ; veuillez vous reporter à la GNU General Public License version 3 ⟨https://www.gnu.org/licenses/gpl-3.0.html⟩ concernant les conditions de copie et de distribution. Il n'y a aucune RESPONSABILITÉ LÉGALE. Si vous découvrez un bogue dans la traduction de cette page de manuel, veuillez envoyer un message à ⟨debian-l10n-french@lists.debian.org⟩. GNU Bash 5.2 19 septembre 2022 BASH(1)
Generated by dwww version 1.15 on Sat Jun 29 00:40:45 CEST 2024.