BASH(1) General Commands Manual BASH(1) NOM bash - Interpreteur de commandes GNU Bourne-Again SHell SYNOPSIS bash [options] [chaine_de_commande | fichier] COPYRIGHT Bash is Copyright (C) 1989-2022 by the Free Software Foundation, Inc. DESCRIPTION Bash est un interpreteur de commandes (shell) compatible sh qui execute les commandes lues depuis l'entree standard ou depuis un fichier. Bash inclut aussi des fonctionnalites utiles des interpreteurs de commandes Korn et C (ksh et csh). Bash vise a etre une implementation conforme a la partie relative aux interpreteurs de commandes et utilitaires des specifications IEEE POSIX (norme IEEE 1003.1). Bash peut etre configure pour etre conforme a la norme POSIX par defaut. OPTIONS Toutes les options d'interpreteur monocaracteres documentees dans la description de la commande interne set, y compris -o, peuvent etre utilisees comme options si l'interpreteur est invoque. De plus, bash accepte les options suivantes lors de son appel : -c Si l'option -c est presente, les commandes sont lues depuis le premier argument chaine_de_commande qui n'est pas une option. Si des arguments suivent la chaine_de_commande, le premier argument est assigne a $0 et tous les autres sont affectes aux parametres positionnels. Le nom de l'interpreteur, utilise pour les messages d'avertissement et d'erreur, est fixe par l'assignation a $0. -i Si l'option -i est presente, l'interpreteur est interactif. -l Faire que bash se comporte comme s'il avait ete appele comme interpreteur de commandes de connexion (consultez APPEL ci-dessous). -r Si l'option -r est presente, l'interpreteur devient restreint (consultez INTERPRETEUR RESTREINT ci-dessous). -s Si l'option -s est presente ou s'il ne reste plus d'argument apres le traitement des options, alors les commandes sont lues depuis l'entree standard. Cette option permet d'affecter les parametres positionnels lors de l'appel d'un interpreteur interactif ou de la lecture de l'entree a travers un tube. -D Une liste de toutes les chaines entre guillemets doubles precedees de $ est affichee sur la sortie standard. Ce sont les chaines qui sont soumises a une traduction quand le parametre linguistique regional n'est ni C ni POSIX. Cela implique l'option -n ; aucune commande ne sera executee. [-+]O [option_shopt] option_shopt est une des options de l'interpreteur acceptees par la commande interne shopt (consultez COMMANDES INTERNES DE L'INTERPRETEUR ci-dessous). Si option_shopt est presente, -O cree cette option ; +O la detruit. Si option_shopt n'est pas fournie, les noms et valeurs des options de l'interpreteur acceptees par shopt sont affiches sur la sortie standard. Si l'option d'appel est +O, la sortie est affichee dans un format reutilisable en entree. -- Deux caracteres -- indiquent la fin des options et desactivent le traitement des arguments. Tous les arguments apres le -- sont traites comme des noms de fichiers et parametres. - est equivalent a --. Bash reconnait egalement plusieurs options multicaracteres. Ces options doivent, pour etre reconnues, apparaitre sur la ligne de commande avant les options monocaracteres. --debugger Prend les dispositions pour que le parametrage du tracage soit execute avant que l'interpreteur demarre. Enclenche le mode de tracage etendu (consultez ci-dessous la description de l'option extdebug de la commande interne shopt). --dump-po-strings Equivalent a -D, mais la sortie est dans le format des fichiers po (objets portables) de l'outil GNU gettext. --dump-strings Equivalent a -D. --help Affiche un message d'aide sur la sortie standard et termine avec succes. --init-file fichier --rcfile fichier Executer les commandes contenues dans fichier plutot que celles du fichier personnel d'initialisation standard ~/.bashrc si l'interpreteur est interactif (consultez APPEL ci-dessous). --login Equivalent a -l. --noediting Ne pas utiliser la bibliotheque GNU readline pour lire les lignes de commande, lorsque l'interpreteur est interactif. --noprofile Ne lire ni le fichier d'initialisation commun a tout le systeme /etc/profile ni les fichiers personnels d'initialisation ~/.bash_profile, ~/.bash_login ou ~/.profile. Par defaut, bash lit ces fichiers lorsqu'il est appele comme interpreteur de commandes de connexion (consultez APPEL ci-dessous). --norc Ne pas lire ou executer le fichier personnel d'initialisation ~/.bashrc lorsque l'interpreteur est interactif. Cette option est activee par defaut si l'interpreteur est appele 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 defaut differe de la norme POSIX. La section VOIR AUSSI ci-dessous reference un document precisant la facon dont le mode POSIX affecte le comportement de bash. --restricted L'interpreteur devient restreint (consultez INTERPRETEUR RESTREINT ci-dessous). --verbose Equivalent a -v. --version Affiche le numero de version de bash sur la sortie standard et termine avec succes. ARGUMENTS S'il reste des arguments sur la ligne de commande apres traitement des options et que ni l'option -c, ni l'option -s n'ont ete fournies, le premier argument est suppose etre le nom du fichier dans lequel lire les commandes d'interpreteur. Si bash est appele de cette facon, le nom du fichier est affecte a $0 et les arguments restants aux autres parametres positionnels. Bash lit et execute les commandes depuis ce fichier, puis termine. L'etat final de bash est l'etat final de la derniere commande executee dans le script. Si aucune commande n'a ete executee, l'etat final est 0. Une tentative est d'abord faite de trouver le fichier dans le repertoire actuel et, si aucun fichier n'est trouve, l'interpreteur cherche le script dans les repertoires contenus dans PATH. APPEL Un interpreteur de commandes est dit de connexion (login shell) si le premier caractere de son argument numero zero est un - ou s'il est appele avec l'option --login. Un interpreteur est interactif s'il est appele sans argument autre que des options (a moins que l'option -s soit specifiee) et sans l'option -c, dont l'entree standard et la sortie d'erreur sont toutes deux connectees a des terminaux (comme determine par la fonction isatty(3)), ou s'il est appele avec l'option -i. PS1 est creee et $- contient la lettre i si bash est interactif, ce qui permet a un script ou a un fichier d'initialisation de tester cet etat. Le paragraphe suivant decrit comment bash execute ses fichiers d'initialisation. Si un de ces fichiers existe mais n'est pas accessible en lecture, bash signale une erreur. Les tildes sont remplaces par des noms de fichiers comme decrit ci-dessous dans Developpement du tilde dans le paragraphe DEVELOPPEMENTS. Lorsque bash est lance comme interpreteur de commandes de connexion interactif ou comme interpreteur non interactif avec l'option --login, il lit et execute tout d'abord les commandes se trouvant dans le fichier /etc/profile si ce fichier existe. Apres lecture de ce fichier, il recherche ~/.bash_profile, ~/.bash_login et ~/.profile, dans cet ordre, puis lit et execute les commandes se trouvant dans le premier fichier existant et accessible en lecture. L'option --noprofile peut etre utilisee a l'appel de l'interpreteur pour empecher ce comportement. Lorsqu'un interpreteur de commandes de connexion interactif termine, ou qu'un interpreteur de commandes de connexion non interactif execute la commande interne exit, bash lit et execute les commandes du fichier ~/.bash_logout, s'il existe. Quand un interpreteur interactif demarre sans etre un interpreteur de commandes de connexion, bash lit et execute les commandes se trouvant dans ~/.bashrc s'il existe. Ce comportement peut etre empeche a l'aide de l'option --norc. L'option --rcfile fichier forcera bash a lire et executer les commandes dans fichier plutot que dans ~/.bashrc. Quand bash est demarre de facon non interactive, par exemple pour lancer un script, il consulte la variable BASH_ENV dans l'environnement, developpe son contenu si elle existe et considere cette valeur comme le nom d'un fichier a lire et executer. Bash se comporte comme si la commande suivante etait executee : if [ -n "$BASH_ENV" ]; then . "$BASH_ENV"; fi mais la valeur de la variable PATH n'est pas utilisee pour rechercher le fichier. Si bash est appele sous le nom sh, il essaye d'imiter le comportement de demarrage des versions historiques de sh aussi fidelement que possible, tout en restant conforme a la norme POSIX. Lorsqu'il est appele comme interpreteur de commandes de connexion interactif ou non interactif avec l'option --login, il essaye d'abord de lire et executer, dans cet ordre, les commandes de /etc/profile puis de ~/.profile. L'option --noprofile peut etre utilisee pour empecher ce comportement. Quand il est appele en tant qu'interpreteur interactif sous le nom sh, bash consulte la variable ENV, developpe sa valeur si elle est definie et utilise le resultat en tant que nom de fichier a lire et executer. Comme un interpreteur appele sous le nom sh n'essaye ni de lire, ni d'executer des commandes d'un autre fichier de demarrage, l'option --rcfile n'a aucun effet. Un interpreteur non interactif appele sous le nom sh n'essaie de lire aucun autre fichier d'initialisation. Quand il est appele sous le nom sh, bash entre en mode POSIX apres avoir lu les fichiers d'initialisation. Quand bash est appele en mode POSIX comme avec l'option --posix sur la ligne de commande, il suit la norme POSIX pour les fichiers de demarrage. Dans ce mode, les interpreteurs interactifs developpent la variable ENV et les commandes sont lues et executees a partir du fichier dont le nom est la valeur developpee. Aucun autre fichier d'initialisation n'est lu. Bash tente de determiner s'il est execute avec son entree standard reliee a une connexion reseau, comme quand il est execute par le demon lancant les interpreteurs de commandes a distance historiques, generalement rshd, ou le demon d'interpreteur securise sshd. Si bash conclut qu'il est execute de facon non interactive de cette maniere, il lit et execute les commandes de ~/.bashrc si ce fichier existe et est accessible en lecture. Il n'a pas ce comportement lorsqu'il est appele sous le nom sh. L'option --norc peut etre utilisee pour empecher ce comportement et l'option --rcfile peut etre utilisee pour forcer la lecture d'un autre fichier, mais rshd et sshd n'appellent generalement pas l'interpreteur avec ces options et ne permettent pas de les indiquer. Si l'interpreteur est lance avec un identifiant (de groupe) d'utilisateur effectif different de l'identifiant (de groupe) d'utilisateur reel et si l'option -p n'est pas fournie, aucun fichier d'initialisation n'est lu, les fonctions de l'interpreteur ne sont pas importees depuis l'environnement, les variables SHELLOPTS, BASHOPTS, CDPATH, et GLOBIGNORE, si presentes dans l'environnement, sont ignorees, et l'identifiant de l'utilisateur effectif est configure a celui de l'utilisateur reel. Si l'option -p est fournie a l'appel, le comportement au demarrage est le meme mais l'identifiant d'utilisateur effectif n'est pas modifie. DEFINITIONS Les definitions suivantes sont utilisees dans toute la suite ce document. blanc Une espace ou une tabulation. mot Une suite de caracteres consideree comme une unite elementaire par l'interpreteur. On parle egalement de lexeme (<< token >>). nom Un mot ne contenant que des caracteres alphanumeriques et des tirets bas (<< underscore >>), commencant par une lettre ou un tiret bas. On s'y refere egalement sous le terme identificateur. metacaractere Un caractere qui, non protege, separe les mots. Un de ceux-ci : | & ; ( ) < > space tab newline operateur de controle Un lexeme ayant une fonction de controle. C'est l'un des symboles suivants : || & && ; ;; ;& ;;& ( ) | |& MOTS RESERVES Les mots reserves sont des mots qui ont une signification speciale pour l'interpreteur. Les mots suivants sont reconnus comme reserves lorsqu'ils ne sont pas proteges et sont soit le premier mot d'une commande (consultez GRAMMAIRE DE L'INTERPRETEUR ci-dessous), le troisieme mot d'une commande case ou select (seul in est valable), ou le troisieme 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'INTERPRETEUR Cette partie decrit la syntaxe des differentes formes de commande de l'interpreteur. Commandes simples Une commande simple est une suite d'affectations facultatives de variables, suivie de mots separes par des blancs et de redirections, et terminee par un operateur de controle. Le premier mot indique la commande a executer et est passe comme argument zero. Les mots restants sont transmis comme arguments a la commande appelee. La valeur renvoyee par une commande simple est son etat final ou 128+n si la commande a ete terminee par le signal n. Pipelines Un pipeline est une suite d'une ou plusieurs commandes separees par un des operateurs de controle | ou |&. Le format d'un pipeline est : [time [-p]] [!] commande_1 [ [|||&] commande_2 ... ] La sortie standard de la commande_1 est connectee par un tube a l'entree standard de la commande_2. Cette connexion est effectuee avant toute redirection indiquee par la commande_1 (consultez REDIRECTIONS ci-dessous). Si |& est utilise, la sortie d'erreur standard de la commande_1, en plus de sa sortie standard, est connectee a l'entree standard 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 sortie standard est realisee apres toute redirection precisee par la commande_1. L'etat renvoye par un pipeline est l'etat final de la derniere commande, a moins que l'option pipefail soit activee. Si pipefail est activee, l'etat renvoye par le pipeline est la valeur de la derniere commande (la plus a droite) a terminer avec un etat different de zero ou zero si toutes les commandes se terminent avec succes. Si le mot reserve ! precede un pipeline, l'etat final de ce pipeline sera la negation logique de l'etat final tel que decrit ci-dessus. L'interpreteur attend que toutes les commandes du pipeline soient terminees avant de renvoyer une valeur. Si le mot reserve time precede un pipeline, les temps passes par le programme en modes utilisateur et systeme sont indiques quand le pipeline se termine. L'option -p modifie le format de sortie pour celui indique par POSIX. Quand l'interpreteur est en mode POSIX, il ne reconnait pas time comme un mot reserve si le lexeme suivant commence par un << - >>. La variable TIMEFORMAT peut contenir une chaine de format indiquant comment les informations de chronometrage doivent etre affichees ; consultez ci-dessous la description de TIMEFORMAT dans Variables de l'interpreteur. Quand l'interpreteur est en mode POSIX, time peut etre suivi d'un changement de ligne. Dans ce cas, l'interpreteur affiche le temps utilisateur et systeme total consomme par l'interpreteur et ses enfants. La variable TIMEFORMAT peut etre utilisee pour indiquer le format des informations de temps. Toute commande dans un pipeline multicommande, ou les tubes sont crees, est executee dans un sous-interpreteur qui est un processus separe. Consultez ENVIRONNEMENT D'EXECUTION DES COMMANDES pour une description des sous-interpreteurs et d'un environnement de sous-interpreteur. Si l'option lastpipe est activee en utilisant la commande interne shopt (consultez la description de shopt ci-dessous), le dernier element d'un pipeline peut etre execute par le processus de l'interpreteur quand le controle des taches est desactive. Listes Une liste est une suite d'un ou plusieurs pipelines separes par l'un des operateurs ;, &, && ou || et facultativement terminee par ;, & ou . Dans cette liste d'operateurs, && et || ont une priorite identique, suivis par ; et &, qui ont egalement une priorite identique. Une suite d'un ou plusieurs changements de ligne peut apparaitre dans une liste a la place d'un point-virgule pour delimiter les commandes. Si une commande se termine par l'operateur de controle &, l'interpreteur l'execute en arriere-plan, dans un sous-interpreteur. L'interpreteur n'attend pas que la commande se termine et l'etat renvoye est 0. Elles sont designees comme des commandes asynchrones. Les commandes separees par un ; sont executees successivement, l'interpreteur attend que chaque commande se termine tour a tour. L'etat renvoye est l'etat final de la derniere commande executee. Les listes ET et OU sont des suites d'un ou plusieurs pipelines separes respectivement par les operateurs de controle && et ||. Les listes ET et OU sont executees avec associativite a gauche. Une liste ET est de la forme commande_1 && commande_2 commande_2 est executee si, et seulement si, commande_1 renvoie zero comme etat final (succes). Une liste OU a la forme commande_1 || commande_2 commande_2 est executee si, et seulement si, commande_1 renvoie un etat final different de zero. L'etat renvoye par des listes ET et OU est l'etat final de la derniere commande executee dans la liste. Commandes composees Une commande composee est l'une des constructions suivantes. Dans la plupart des cas, une liste dans une description de commande pourrait etre separee du reste de la commande par un ou plusieurs changements de ligne, et pourrait etre suivie d'un changement de ligne a la place d'un point-virgule. (liste) liste est executee dans un sous-interpreteur (consultez ENVIRONNEMENT D'EXECUTION DES COMMANDES ci-dessous pour une description d'un environnement de sous-interpreteur). Les affectations de variables et les commandes internes qui affectent l'environnement de l'interpreteur n'ont pas d'effet une fois que la commande se termine. L'etat renvoye est l'etat final de la liste. { liste; } liste est simplement executee avec l'environnement de l'interpreteur en cours. liste doit se terminer par un changement de ligne ou un point-virgule. Cette construction est connue sous le nom de commandes groupees. L'etat renvoye est l'etat final de la liste. Remarquez que contrairement aux metacaracteres ( et ), { et } sont des mots reserves qui ne doivent apparaitre que la ou un mot reserve peut etre reconnu. Puisqu'ils ne conduiront pas a un decoupage en mots, ils doivent etre separes de la liste par un blanc ou un autre metacaractere de l'interpreteur. ((expression)) L'expression est evaluee selon les regles decrites ci-dessous dans EVALUATION ARITHMETIQUE. Si la valeur arithmetique de l'expression est differente de zero, l'etat renvoye est 0 ; sinon l'etat renvoye est 1. L'expression est sujette aux memes developpements que si elle etait entre guillemets doubles, mais les caracteres guillemet double dans l'expression ne sont pas traites expressement et sont supprimes. [[ expression ]] Renvoie un etat de 0 ou 1 selon l'evaluation de la condition expression. Les conditions sont composees de primitives decrites ci-dessous dans CONDITIONS. Les mots entre [[ et ]] ne sont sujets ni au decoupage en mots ni au developpement des chemins. L'interpreteur effectue le developpement des tildes, des parametres, des variables, le developpement arithmetique, la substitution de commande et de processus, ainsi que la suppression des protections sur ces mots (les developpements qui se produiraient si les mots etaient entre guillemets doubles). Les operateurs conditionnels comme -f ne doivent pas etre proteges afin d'etre reconnus comme primitives. Lorsqu'ils sont utilises avec [[, les operateurs < et > ordonnent d'un point de vue lexicographique en utilisant les parametres linguistiques regionaux actuels. Quand les operateurs == et != sont utilises, la chaine placee a droite de l'operateur est consideree comme etant un motif dont la correspondance est recherchee selon les regles decrites ci-dessous dans Motifs generiques, comme si l'option extglob de l'interpreteur etait activee. L'operateur = est equivalent a ==. Si l'option d'interpreteur nocasematch est activee, la mise en correspondance est effectuee sans tenir compte de la casse (difference majuscule/minuscule) des caracteres alphabetiques. La valeur renvoyee est 0 si les chaines correspondent (==) ou ne correspondent pas (!=), au motif et 1 sinon. Toute partie du motif peut etre protegee pour forcer la partie protegee a correspondre en tant que chaine. Un operateur binaire supplementaire, =~, est disponible, avec la meme priorite que == et !=. Lorsqu'il est utilise, la chaine a droite de l'operateur est consideree comme une expression rationnelle etendue POSIX et est mise en correspondance en consequence (en utilisant habituellement les interfaces POSIX regcomp et regexec comme avec regex(3)). La valeur renvoyee est 0 si la chaine correspond au motif et 1 si elle ne correspond pas. Si l'expression rationnelle n'est pas syntaxiquement correcte, la valeur renvoyee de l'expression conditionnelle est 2. Si l'option d'interpreteur nocasematch est activee, la mise en correspondance est effectuee sans tenir compte de la casse. Si une partie du motif est protegee, cette partie est mise en correspondance litteralement. Cela signifie que tout caractere dans la partie protegee doit correspondre lui-meme, plutot que d'avoir tout motif particulier correspondant ayant une signification. Si le motif est stocke dans une variable de l'interpreteur, la protection de developpement de variable force le motif entier a correspondre litteralement. Traitez prudemment les expressions entre crochets des expressions rationnelles, car les caracteres de protection et de motifs habituels perdent leur signification entre crochets. Le motif correspondra s'il correspond a n'importe quelle partie de la chaine. Ancrer le motif avec les operateurs d'expression rationnelle ^ et $ pour le forcer a correspondre a la totalite de la chaine. La variable tableau BASH_REMATCH enregistre quelle partie de la chaine correspond au motif. L'element de BASH_REMATCH d'indice 0 contient la partie de la chaine correspondant a la totalite de l'expression rationnelle. Les sous-chaines correspondant aux sous-expressions entre parentheses dans l'expression rationnelle sont sauvegardees avec les indices restants de BASH_REMATCH. L'element de BASH_REMATCH d'indice n est la partie de la chaine correspondant a la n-ieme sous-expression entre parentheses. La configuration de BASH_REMATCH par bash est de portee globale ; la declarer comme une variable locale menera a des resultats inattendus. Les expressions peuvent etre combinees en utilisant les operateurs suivants, decrits par ordre de priorite decroissante : ( expression ) Renvoie la valeur de l'expression. Cela peut etre utilise pour surpasser la priorite normale des operateurs. ! 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 operateurs && et || n'evaluent pas expression2 si la valeur de expression1 suffit a determiner la valeur renvoyee par la condition tout entiere. for nom [ [ in [ mot ... ] ] ; ] do liste ; done La liste de mots suivant in est developpee, produisant une liste d'elements. La variable nom prend tour a tour la valeur de chacun des elements et liste est executee a chaque fois. Si in mot est omis, la commande for execute la liste une fois pour chacun des parametres positionnels existants (consultez PARAMETRES ci-dessous). L'etat renvoye est l'etat final de la derniere commande executee. Si le developpement des elements suivant in conduit a une liste vide, aucune commande n'est executee et l'etat renvoye est 0. for (( expr1 ; expr2 ; expr3 )) ; do liste ; done L'expression arithmetique expr1 est d'abord evaluee selon les regles decrites ci-dessous sous EVALUATION ARITHMETIQUE. L'expression arithmetique expr2 est ensuite evaluee repetitivement jusqu'a valoir zero. Chaque fois que expr2 est evaluee en une valeur differente de zero, liste est executee et l'expression arithmetique expr3 est evaluee. Si l'une des expressions est omise, elle est consideree comme s'evaluant a 1. La valeur renvoyee est l'etat final de la derniere commande dans liste qui est executee ou faux si l'une des expressions est incorrecte. select nom [ in mot ] ; do liste ; done La liste de mots a la suite de in est developpee, produisant une liste d'elements et l'ensemble des mots developpes est imprime sur la sortie d'erreur standard, chacun precede par un nombre. Si in mot est omis, les parametres positionnels sont imprimes (consultez PARAMETRES ci-dessous). select affiche alors l'invite PS3 et lit une ligne depuis l'entree standard. Si la ligne est constituee d'un nombre correspondant a l'un des mots affiches, alors ce mot est affecte a la valeur de la variable nom. Si la ligne est vide, les mots et l'invite sont affiches a 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 a etre definie a NULL. La ligne lue est conservee dans la variable REPLY. La liste est executee apres chaque selection, jusqu'a ce qu'une commande break soit atteinte. L'etat final de select est l'etat final de la derniere commande executee dans la liste ou zero si aucune commande n'a ete executee. case mot in [ [(] motif [ | motif ] ... ) liste ;; ] ... esac Une commande case commence d'abord par developper le mot, puis essaye de le mettre en correspondance tour a tour avec chacun des motifs en utilisant les regles de mise en correspondance dans Motifs generiques ci-dessous. Le mot est developpe en utilisant le developpement du tilde, le developpement des parametres et des variables, le developpement arithmetique, la substitution de commande, la substitution de processus et la suppression des protections. Chaque motif examine est developpe en utilisant le developpement du tilde, le developpement des parametres et des variables, le developpement arithmetique, la substitution de commande et la substitution de processus et la suppression des protections. Si l'option d'interpreteur nocasematch est activee, la mise en correspondance est effectuee sans tenir compte de la casse des caracteres alphabetiques. Quand une correspondance est trouvee, la liste associee est executee. Des qu'un motif correct a ete trouve, il n'y a plus d'autre essai si l'operateur ;; est utilise. Si ;& est utilise au lieu de ;;, l'execution continue avec la liste associee au jeu de motifs suivant. Si ;;& est utilise au lieu de ;;, l'interpreteur essaye la liste de motifs suivante, si elle existe, et execute toute liste associee a un motif correspondant, poursuivant l'execution de la declaration de cas comme si la liste de motifs n'avait pas de correspondance. Le code de retour est zero si aucun motif ne correspond. Sinon il est le code de retour de la derniere commande executee dans la liste. if liste; then liste; [ elif liste; then liste; ] ... [ else liste; ] fi La liste du if est executee. Si son etat final est zero, la liste du then est executee. Sinon, chacune des listes des elif est executee tour a tour et si son etat final est zero, la liste du then associe est executee et la commande se termine. Sinon, la liste du else, si presente, est executee. L'etat final est l'etat final de la derniere commande executee ou zero si aucune condition n'a ete satisfaite. while liste-1; do liste-2; done until liste-1; do liste-2; done La commande while repete la liste liste-2 tant que la derniere commande de la liste liste-1 renvoie un etat final de zero. La commande until est identique a la commande while, sauf que le test est inverse : la liste-2 est executee tant que la derniere commande de la liste-1 renvoie un etat final different de zero. L'etat final des commandes while et until est l'etat final de la derniere commande executee dans la liste-2 ou zero si aucune commande n'a ete executee. Coprocessus Un coprocessus est une commande d'interpreteur precedee par le mot reserve coproc. Un coprocessus est execute de facon asynchrone dans un sous-interpreteur, comme si la commande se terminait par l'operateur de controle &, avec un tube bidirectionnel etabli entre l'interpreteur d'execution et le coprocessus. La syntaxe d'un coprocessus est : coproc [NOM] commande [redirections] Cela cree un coprocessus nomme NOM. commande peut etre une commande simple ou une commande composee (voir plus haut). NOM est le nom d'une variable de l'interpreteur. Si NOM n'est pas fourni, le nom par defaut est COPROC. Le format recommande a utiliser pour un coprocessus est le suivant : coproc [NOM] { commande [redirections]; } Cette forme est recommandee parce que des commandes simples font que le coprocessus est toujours appele COPROC, et elle est plus simple a utiliser et plus complete que les autres commandes composees. Si commande est une commande composee, NOM est optionnel. Le mot suivant coproc determine si ce mot est interprete comme un nom de variable : il est interprete comme NOM si ce n'est pas un mot reserve qui introduit une commande composee. Si commande est une commande simple, NOM n'est pas permis ; cela est destine a eviter une confusion entre NOM et le premier mot de la commande simple. Quand le coprocessus est execute, l'interpreteur cree une variable tableau (consultez Tableaux ci-dessous) appelee NOM dans le contexte de l'interpreteur d'execution. La sortie standard de commande est connectee par un tube a un descripteur de fichier dans l'interpreteur d'execution, et ce descripteur de fichier est affecte a NOM[0]. L'entree standard de commande est connectee par un tube a un descripteur de fichier dans l'interpreteur d'execution, et ce descripteur de fichier est affecte a NOM[1]. Ce tube est etabli avant toute redirection indiquee par la commande (consultez REDIRECTIONS ci-dessous). Les descripteurs de fichier peuvent etre utilises comme arguments aux commandes d'interpreteur et redirections en utilisant les developpements standards de mot. Les descripteurs de fichier autres que ceux crees pour executer des substitutions de commande et de processus, ne sont pas disponibles dans les sous-interpreteurs. L'identifiant du processus (PID) de l'interpreteur engendre pour executer le coprocessus est la valeur disponible de la variable NOM_PID. La commande interne wait peut etre reutilisee pour attendre que le coprocessus soit termine. Puisque le coprocessus est cree comme une commande asynchrone, la commande coproc se termine toujours avec succes. L'etat renvoye d'un coprocessus est l'etat final de commande. Definitions des fonctions de l'interpreteur Une fonction de l'interpreteur est un objet qui est appele comme une commande simple et qui execute une commande composee avec un nouveau jeu de parametres positionnels. Les fonctions de l'interpreteur sont declarees de la facon suivante : nomfonction () commande-composee [redirection] function nomfonction [()] commande-composee [redirection] Cela definit une fonction possedant le nomfonction mentionne. Le mot reserve function est facultatif. S'il est fourni, les parentheses sont facultatives. Le corps de la fonction est la commande composee commande-composee (consultez Commandes composees ci-dessus). Cette commande est generalement une liste de commandes entre { et }, mais peut etre n'importe quelle commande decrite dans Commandes composees ci-dessus. Si le mot reserve function est utilise, mais que les parentheses ne sont pas fournies, les accolades sont recommandees. La commande-composee est executee chaque fois que nomfonction est indique comme le nom d'une commande normale. En mode POSIX, nomfonction doit un nom valable d'interpreteur et ne peut pas etre le nom d'une des commandes internes speciales de POSIX (<< special builtins >>). En mode par defaut, un nom de fonction peut etre n'importe quel mot de l'interpreteur non protege qui ne contient pas de $. Toutes les redirections (consultez REDIRECTIONS ci-dessous) indiquees lorsqu'une fonction est definie sont effectuees lorsque la fonction est executee. Le code de retour d'une definition de fonction est zero, a moins qu'une erreur de syntaxe ne se produise ou qu'une fonction en lecture seule n'existe deja avec le meme nom. Lorsque la fonction est executee, le code de retour est celui de la derniere commande executee dans le corps de la fonction (consultez FONCTIONS ci-dessous). COMMENTAIRES Dans un interpreteur non interactif ou dans un interpreteur interactif avec l'option interactive_comments activee par la commande interne shopt (consultez COMMANDES INTERNES DE L'INTERPRETEUR ci-dessous), un mot commencant par # conduit a ignorer ce mot et tous les caracteres restants sur la ligne. Un interpreteur interactif sans l'option interactive_comments n'autorise pas les commentaires. L'option interactive_comments est activee par defaut dans les interpreteurs interactifs. PROTECTIONS Les protections (<< quoting >>) permettent de forcer l'interpreteur a ignorer la signification speciale de certains caracteres ou mots. Les protections peuvent etre utilisees pour desactiver le traitement des caracteres speciaux, eviter la reconnaissance des mots reserves ou empecher le developpement des parametres. Tous les metacaracteres decrits ci-dessus dans DEFINITIONS ont des significations speciales pour l'interpreteur et doivent etre proteges pour ne representer que leur propre caractere. Lorsque les outils de developpement de l'historique des commandes sont utilises (consultez DEVELOPPEMENT DE L'HISTORIQUE ci-dessous), le caractere de developpement de l'historique, generalement !, doit etre protege pour eviter le developpement de l'historique. Il y a trois mecanismes de protection : le caractere de protection, les guillemets simples (<< single quotes >>) et les guillemets doubles (<< double quotes >>). Le caractere de protection est une contre-oblique (\) non protegee. Il preserve la valeur litterale du caractere qui le suit, a l'exception du . Si un couple \ apparait et si la contre-oblique n'est pas elle-meme protegee, l'ensemble \ est considere comme une continuation de ligne (c'est-a-dire qu'il est supprime du flux d'entree et ignore en pratique). Encadrer des caracteres entre des guillemets simples preserve la valeur litterale de chacun des caracteres entre guillemets simples. Un guillemet simple ne peut pas etre place entre deux guillemets simples, meme s'il est precede d'une contre-oblique. Encadrer des caracteres entre des guillemets doubles preserve la valeur litterale de chacun des caracteres sauf $, `, \ et, lorsque le developpement de l'historique est active, !. Quand l'interpreteur et en mode POSIX, le ! n'a pas de signification particuliere entre des guillemets doubles, meme quand le developpement de l'historique est active. Les caracteres $ et ` conservent leurs significations speciales entre guillemets doubles. La contre-oblique ne conserve sa signification speciale que lorsqu'elle est suivie par l'un des caracteres suivants : $, `, ", \ ou . Un guillemet double peut etre protege entre deux guillemets doubles en etant precede d'une contre-oblique. S'il est active, le developpement de l'historique sera effectue, a moins qu'un ! apparaissant entre guillemets doubles ne soit protege par une contre-oblique. La contre-oblique precedant le ! n'est pas supprimee. Les caracteres speciaux * et @ ont des significations speciales lorsqu'ils se trouvent entre des guillemets doubles (consultez PARAMETRES ci-dessous). Les sequences de caracteres de la forme $'chaine' sont traitees comme une variante speciale des guillemets simples. La sequence est developpee en chaine avec les caracteres proteges par contre-oblique remplaces comme indique par la norme ANSI C. Les suites de protection par contre-oblique, si presentes, sont decodees comme suit : \a alerte (alarme) ; \b effacement arriere (<< backspace >>) ; \e \E caractere 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 caractere 8 bits dont la valeur en octal vaut nnn (un a trois chiffres) ; \xHH le caractere 8 bits dont la valeur hexadecimale est HH (un ou deux chiffres hexadecimaux) ; \uHHHH le caractere Unicode (ISO/IEC 10646) dont la valeur hexadecimale est HHHH (un a quatre chiffres hexadecimaux) ; \UHHHHHHHH le caractere Unicode (ISO/IEC 10646) dont la valeur hexadecimale est HHHHHHHH (un a huit chiffres hexadecimaux) ; \cx un caractere controle-x. Le resultat developpe est protege par des guillemets simples comme si le symbole dollar n'avait pas ete present. Une chaine entre guillemets doubles precedee d'un symbole dollar ($"chaine") conduira a la traduction de la chaine selon les parametres linguistiques regionaux en vigueur. L'infrastructure de gettext parcourt la chaine et effectue la traduction, en utilisant les variables de l'interpreteur LC_MESSAGES, TEXTDOMAINDIR et TEXTDOMAIN. Si les parametres linguistiques regionaux actuels sont C ou POSIX, s'il n'y a pas de traduction disponible ou si la chaine n'est pas traduite, le symbole dollar est ignore. C'est une forme de double protection, ainsi la chaine demeure entre guillemets doubles par defaut qu'elle soit ou non traduite et remplacee. Si l'option noexpand_translation est activee en utilisant la commande interne shopt, les chaines traduites sont protegees par des guillemets simples au lieu de guillemets doubles. Consultez la description de shopt ci-dessous dans COMMANDES INTERNES DE L'INTERPRETEUR. PARAMETRES Un parametre est une entite permettant de stocker des valeurs. Il peut etre un nom, un nombre ou un des caracteres speciaux decrits ci-dessous, dans Parametres speciaux. Une variable est un parametre note par un nom. Une variable possede une valeur et zero ou plusieurs attributs. Les attributs sont affectes en utilisant la commande interne declare (consultez declare dans COMMANDES INTERNES DE L'INTERPRETEUR ci-dessous). Un parametre est cree si une valeur lui a ete affectee. La chaine NULL est une valeur correcte. Une fois qu'une variable est creee, elle ne peut etre detruite qu'en utilisant la commande interne unset (consultez COMMANDES INTERNES DE L'INTERPRETEUR ci-dessous). Une variable peut recevoir une valeur par une affectation de la forme nom=[valeur] Si aucune valeur n'est indiquee, une chaine NULL est affectee a la variable. Toutes les valeurs sont sujettes au developpement du tilde, des parametres et des variables, a la substitution de commande, au developpement arithmetique et a la suppression des protections (consultez DEVELOPPEMENTS ci-dessous). Si une variable a son attribut integer configure, alors la valeur est soumise a l'evaluation arithmetique, meme si la syntaxe $((...)) n'est pas utilisee (consultez Developpement arithmetique ci-dessous). Le decoupage en mots et le developpement des chemins ne sont pas effectues. Les affectations peuvent egalement apparaitre comme arguments des commandes internes suivantes : alias, declare, typeset, export, readonly et local (commandes de declaration). En mode POSIX, ces commandes internes pourraient apparaitre dans une commande apres une ou plusieurs instances de la commande interne command et conserver ces proprietes d'affectation. Dans le contexte ou une affectation affecte une valeur a une variable de l'interpreteur ou a un indice de tableau, l'operateur += peut etre utilise pour ajouter ou additionner a la precedente valeur de la variable. Cela comprend des arguments pour les commandes internes, comme declare, qui acceptent des affectations (commandes de declaration). Lorsque l'operateur += est applique a une variable dont l'attribut integer (entier) a ete positionne, la valeur est evaluee comme une expression arithmetique et additionnee a la valeur actuelle de la variable qui est egalement evaluee. Lorsque += est applique a une variable tableau en utilisant l'affectation composee (consultez Tableaux ci-dessous), la valeur de la variable n'est pas detruite (comme elle l'est lorsque = est utilise) et les nouvelles valeurs sont ajoutees au tableau, en commencant a l'indice maximal du tableau plus un (pour les tableaux indices) ou ajoutees comme un couple clef valeur pour un tableau associatif. Lorsque l'operateur est applique a une variable de type chaine, la valeur est developpee et concatenee en valeur de la variable. L'attribut nameref peut etre affecte a une variable en utilisant l'option -n des commandes internes declare et local (consultez la description des commandes declare et local ci-dessous) pour creer une nameref ou une reference vers une autre variable. Cela permet aux variables d'etre manipulees indirectement. A chaque fois qu'une variable nameref est referencee, affectee, detruite ou a ses attributs modifies (autrement qu'en utilisant ou en changeant l'attribut nameref lui-meme), l'operation est en fait realisee sur la variable indiquee par la valeur de la variable nameref. nameref est generalement utilisee dans des fonctions d'interpreteur pour referencer une variable dont le nom est passe en argument de la fonction. Par exemple, si un nom de variable est passe en premier argument a une fonction d'interpreteur, executer declare -n ref=$1 dans la fonction cree une variable de nameref ref dont la valeur est le nom de la variable passee en premier argument. Les references et affectations de ref et les modifications de ses attributs sont traitees comme des references, affectations et modifications d'attribut sur la variable dont le nom a ete passe par $1. Si la variable de controle dans une boucle for a l'attribut nameref, la liste de mots peut etre une liste de variables d'interpreteur et une reference de nom est etablie pour chaque mot de la liste, tour a tour, lorsque la boucle est executee. L'attribut nameref ne peut pas etre donne aux variables de type tableau. Cependant, les variables nameref peuvent referencer des variables de type tableau et des variables de type tableau indice. nameref peut etre detruit en utilisant l'option -n de la commande interne unset. Sinon, si unset est execute avec le nom d'une variable nameref en argument, la variable referencee par la variable nameref sera detruite. Parametres positionnels Un parametre positionnel est un parametre note par un ou plusieurs chiffres (a l'exception du chiffre 0 seul). Les parametres positionnels sont affectes avec les arguments de l'interpreteur lors de son appel. Ils peuvent etre reaffectes avec la commande interne set. On ne peut pas utiliser les affectations pour les parametres positionnels. Ils sont temporairement remplaces lors de l'execution d'une fonction de l'interpreteur (consultez FONCTIONS ci-dessous). Un parametre positionnel constitue de plusieurs chiffres doit etre encadre par des accolades lors de son developpement (consultez DEVELOPPEMENTS ci-dessous). Parametres speciaux L'interpreteur traite plusieurs parametres specifiquement. Ces parametres peuvent uniquement etre consultes, il n'est pas permis de leur affecter une valeur. * Se developpe en l'ensemble des parametres positionnels, commencant par le premier. Quand le developpement n'est pas entre guillemets doubles, tous les parametres positionnels se developpent en mots separes. Dans les contextes ou il sont realises, ces mots sont soumis a d'autres decoupages en mots et developpements de chemin. Quand le developpement se produit entre des guillemets doubles, * se transforme en un seul mot constitue de la valeur de tous les parametres positionnels separes par le premier caractere de la variable speciale IFS. C'est-a-dire que "$*" est equivalent a "$1c$2c...", ou c est le premier caractere de la valeur de la variable IFS. Si IFS est inexistante, les parametres sont separes par des espaces. Si IFS est NULL, les parametres sont accoles sans separateurs. @ Se developpe en ensemble des parametres positionnels, commencant par le premier. Dans les contextes ou le decoupage en mots est realise, chaque parametre positionnel se developpe en un mot separe ; si ces mots ne sont pas entre des guillemets doubles, ils sont sujets au decoupage de mot. Dans les contextes ou il n'y a pas de decoupage en mots, chaque parametre positionnel se developpe en un mot distinct separe par des espaces. Quand le developpement a lieu entre guillemets doubles, chaque parametre se developpe en un mot distinct. C'est-a-dire que "$@" est equivalent a "$1" "$2" .... Si le developpement des guillemets doubles survient dans un mot, le developpement du premier parametre est accole a la premiere partie du mot d'origine et le developpement du dernier parametre est accole a la derniere partie du mot d'origine. Quand il n'y a pas de parametres positionnels, "$@" et $@ ne se developpent en rien (c'est-a-dire qu'ils sont simplement elimines). # Correspond au nombre de parametres positionnels, en base decimale. ? Se developpe en etat final du dernier pipeline execute au premier plan. - Est remplace par la liste des options de l'interpreteur indiquees durant l'appel, configurees avec la commande interne set ou celles creees par l'interpreteur lui-meme (comme avec l'option -i). $ Se transforme en PID de l'interpreteur. Dans un sous-interpreteur, il se transforme en PID de l'interpreteur et non pas du sous-interpreteur. ! Se transforme en PID de la derniere tache placee en arriere-plan, soit executee comme une commande asynchrone, soit en utilisant la commande interne bg (consultez CONTROLE DES TACHES ci-dessous). 0 Se developpe en nom de l'interpreteur ou du script. Ce parametre est cree lors de l'initialisation de l'interpreteur. Si bash est appele avec un fichier de commandes, $0 correspond au nom de ce fichier. Si bash est lance avec l'option -c, alors $0 contient le premier argument, s'il y en a un, apres la chaine de commandes a executer. Sinon, ce parametre contient le nom de fichier utilise pour appeler bash, comme indique par l'argument zero. Variables de l'interpreteur Les variables suivantes sont creees par l'interpreteur : _ Au lancement de l'interpreteur, contient le chemin d'acces utilise pour appeler l'interpreteur, ou le script en cours d'execution tel qu'il est passe dans l'environnement ou dans la liste des arguments. Devient ensuite le dernier argument de la commande simple precedente executee au premier plan, apres developpement. Contient egalement le chemin d'acces complet de chaque commande executee et se retrouve dans l'environnement exporte a cette commande. Lors de la verification de l'arrivee de courrier, contient le nom du fichier de courrier en cours de consultation. BASH Se developpe en chemin d'acces complet a l'instance actuelle de bash. BASHOPTS Liste des options activees de l'interpreteur, separees par des deux-points << : >>. Chaque mot de la liste est un argument correct pour l'option -s de la commande interne shopt (consultez COMMANDES INTERNES DE L'INTERPRETEUR ci-dessous). Les options apparaissant dans BASHOPTS sont celles indiquees comme actives par shopt. Si cette variable est dans l'environnement au lancement de bash, chaque option de la liste est activee avant de lire les fichiers d'initialisation. Cette variable est en lecture seule. BASHPID Se transforme en PID du processus de l'interpreteur bash actuel. Differe de $$ sous certaines conditions, comme dans les sous-interpreteurs ne necessitant pas que bash soit reinitialise. Les assignations a BASHPID n'ont pas d"effet. Si BASHPID est detruite, elle perd ses proprietes speciales, meme si elle est recreee par la suite. BASH_ALIASES Une variable de type tableau associatif dont les elements correspondent a une liste interne d'alias comme celle geree par la commande interne alias. Les elements ajoutes a ce tableau apparaissent dans la liste d'alias ; cependant, la destruction d'elements du tableau ne provoque pas actuellement le retrait des alias de la liste d'alias. Si BASH_ALIASES est detruite, elle perd ses proprietes speciales, meme si elle est recreee par la suite. BASH_ARGC Une variable de type tableau contenant le nombre de parametres de chaque trame de la pile d'appel d'execution de l'interpreteur bash actuel. Le nombre de parametres du sous-programme actuel (fonction de l'interpreteur ou du script execute par . ou source) est au sommet de la pile. Lorsqu'un sous-programme est execute, le nombre de parametres passes est place dans BASH_ARGC. L'interpreteur cree BASH_ARGC seulement dans le mode de tracage etendu (consultez ci-dessous la description de l'option extdebug de la commande interne shopt). La configuration de extdebug apres que l'interpreteur ait demarre l'execution d'un script, ou le referencement de cette variable quand extdebug n'existe pas, peut provoquer une incoherence des valeurs. BASH_ARGV Une variable de type tableau contenant tous les parametres de la pile d'appel d'execution de l'interpreteur bash actuel. Le dernier parametre du dernier sous-programme est au sommet de la pile ; le premier parametre de l'appel initial est en bas. Lorsqu'un sous-programme est execute, les parametres fournis sont places dans BASH_ARGV. BASH_ARGV est cree uniquement dans le mode de tracage etendu (consultez ci-dessous la description de l'option extdebug de la commande interne shopt). La configuration de extdebug apres que l'interpreteur ait demarre l'execution d'un script, ou le referencement de cette variable quand extdebug n'existe pas peut provoquer une incoherence des valeurs. BASH_ARGV0 Quand elle est referencee, cette variable developpe le nom de l'interpreteur ou du script de l'interpreteur (identique a $0 ; voir la description du parametre special 0 ci-dessus). L'affectation d'une valeur a BASH_ARGV0 fait que cette valeur est aussi assignee a $0. Si BASH_ARGV0 est detruite, elle perd ses proprietes speciales, meme si elle est recreee par la suite. BASH_CMDS Une variable de type tableau associatif dont les elements correspondent a une table de hachage interne de commandes comme celle geree par la commande interne hash. Les elements ajoutes a ce tableau apparaissent dans la table de hachage ; cependant, la destruction d'elements du tableau ne provoque pas actuellement le retrait des noms de commandes de la table de hachage. Si BASH_CMDS est detruite, elle perd ses proprietes speciales, meme si elle est recreee par la suite. BASH_COMMAND La commande en cours d'execution ou sur le point d'etre executee, a moins que l'interpreteur n'execute une commande a la suite d'une capture, auquel cas c'est la commande s'executant au moment de la capture. Si BASH_COMMAND est detruite, elle perd ses proprietes speciales, meme si elle est recreee par la suite. BASH_EXECUTION_STRING L'argument commande de l'option d'appel -c. BASH_LINENO Une variable de type tableau dont les elements sont les numeros de ligne des fichiers sources ou chaque element correspondant de FUNCNAME a ete invoque. ${BASH_LINENO[$i]} est le numero de la ligne dans le fichier source (${BASH_SOURCE[$i+1]}) ou ${FUNCNAME[$i]} a ete appele (ou ${BASH_LINENO[$i-1]} si consulte depuis une autre fonction de l'interpreteur). Utilisez LINENO pour obtenir le numero de ligne actuel. BASH_LOADABLES_PATH Liste des repertoires, separes par des deux-points << : >>, que l'interpreteur consulte lorsqu'il cherche les commandes internes chargeables dynamiquement specifiees par la commande enable. BASH_REMATCH Une variable de type tableau dont les elements sont affectes avec l'operateur binaire =~ dans la commande conditionnelle [[. L'element d'indice 0 est la partie de la chaine correspondant a l'expression rationnelle complete. L'element d'indice n est la partie de la chaine correspondant a la n-ieme sous-expression entre parentheses. BASH_SOURCE Une variable de type tableau dont les elements sont les noms des fichiers source ou les noms des fonctions d'interpreteur correspondants a la variable de type tableau FUNCNAME sont definis. La fonction d'interpreteur ${FUNCNAME[$i]} est definie dans le fichier ${BASH_SOURCE[$i]} et appelee depuis ${BASH_SOURCE[$i+1]}. BASH_SUBSHELL Incrementee dans tous les sous-interpreteurs et environnements de sous-interpreteur quand l'interpreteur commence a s'executer dans cet environnement. La valeur initiale est 0. Si BASH_COMMAND est detruite, elle perd ses proprietes speciales, meme si elle est recreee par la suite. BASH_VERSINFO Une variable de type tableau protegee en ecriture dont les elements representent la version de cette instance de bash. Cette valeur est affectee aux elements du tableau comme suit : BASH_VERSINFO[0] Le numero majeur de la version (release). BASH_VERSINFO[1] Le numero mineur de la version (version). BASH_VERSINFO[2] Le niveau de correctif. BASH_VERSINFO[3] Le numero de compilation. BASH_VERSINFO[4] Le statut de cette version (par exemple beta1). BASH_VERSINFO[5] La valeur de MACHTYPE. BASH_VERSION Se developpe en une chaine decrivant le numero de version de cette instance de bash. COMP_CWORD Un indice dans ${COMP_WORDS} du mot contenant la position actuelle du curseur. Cette variable n'est disponible que dans les fonctions de l'interpreteur appelees par les outils de completement programmables (consultez Completement programmable ci-dessous). COMP_KEY La touche (ou derniere touche d'une suite de touches) utilisee pour appeler la fonction de completement actuelle. COMP_LINE La ligne de commande actuelle. Cette variable n'est disponible que dans les fonctions de l'interpreteur appelees par les outils de completement programmables (consultez Completement programmable ci-dessous). COMP_POINT L'indice de la position actuelle du curseur relatif au debut de la commande actuelle. Si la position actuelle du curseur est a la fin de la commande actuelle, la valeur de cette variable est egale a ${#COMP_LINE}. Cette variable n'est disponible que dans les fonctions de l'interpreteur et les commandes externes appelees par les outils de completement programmables (consultez Completement programmable ci-dessous). COMP_TYPE Configuree a une valeur entiere correspondant au type de completement essaye qui a provoque l'appel d'une fonction de completement : TAB pour un completement normal, ? pour l'affichage des completements apres tabulations successives, ! pour l'affichage des alternatives de completement de mot partiel, @ pour afficher les completements si le mot n'est pas modifie, ou % pour le menu de completement. Cette variable n'est disponible que dans les fonctions de l'interpreteur et les commandes externes appelees par les outils de completement programmables (consultez Completement programmable ci-dessous). COMP_WORDBREAKS Le jeu de caracteres que la bibliotheque readline considere comme separateurs de mots lors du completement de mot. Si COMP_WORDBREAKS est detruite, elle perd ses proprietes speciales, meme si elle est recreee 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 decoupee en mots comme readline la decouperait, en utilisant COMP_WORDBREAKS tel que decrit ci-dessus. Cette variable n'est disponible que dans les fonctions de l'interpreteur appelees par les outils de completement programmables (consultez Completement programmable ci-dessous). COPROC Une variable de type tableau (consultez Tableaux ci-dessous) creee pour representer les descripteurs de fichier pour les sorties depuis et les entrees vers un coprocessus non nomme (consultez Coprocessus ci-dessus). DIRSTACK Une variable de type tableau (consultez Tableaux ci-dessous) representant le contenu actuel de la pile de repertoires. Les repertoires apparaissent dans la pile dans l'ordre dans lequel la commande interne dirs les affiche. Les affectations des elements de cette variable tableau peuvent etre utilises pour modifier les repertoires deja dans la pile, mais les commandes internes pushd et popd doivent etre utilisees pour ajouter et enlever des repertoires. L'affectation de cette variable ne modifiera pas le repertoire actuel. Si DIRSTACK est detruite, elle perd ses proprietes speciales, meme si elle est recreee par la suite. EPOCHREALTIME A chaque fois que ce parametre est consulte, il se developpe en nombre de secondes ecoulees depuis l'Epoch Unix (consultez time(3)) comme valeur en virgule flottante avec une granularite d'une microseconde. Les affectations a EPOCHREALTIME sont ignorees. Si EPOCHREALTIME est detruite, elle perd ses proprietes speciales, meme si elle est recreee par la suite. EPOCHSECONDS A chaque fois que ce parametre est consulte, il se developpe en nombre de secondes ecoulees depuis l'Epoch Unix (consultez time(3)). Les affectations a EPOCHSECONDS sont ignorees. Si EPOCHSECONDS est detruite, elle perd ses proprietes speciales, meme si elle est recreee par la suite. EUID Contient l'UID effectif de l'utilisateur, initialise au demarrage de l'interpreteur. Cette variable est en lecture seule. FUNCNAME Une variable de type tableau contenant le nom de toutes les fonctions de l'interpreteur actuellement dans la pile d'appel d'execution. L'element d'indice 0 est le nom de l'une des fonctions en cours d'execution dans l'interpreteur. L'element le plus bas (celui avec l'indice le plus grand) est "main". Cette variable n'existe que si une fonction de l'interpreteur est en cours d'execution. Les affectations de FUNCNAME n'ont aucun effet. Si FUNCNAME est detruite, elle perd ses proprietes speciales, meme si elle est recreee par la suite. Cette variable peut etre utilisee avec BASH_LINENO et BASH_SOURCE. Chaque element de FUNCNAME a des elements correspondant dans BASH_LINENO et BASH_SOURCE pour decrire la pile d'appel. Par exemple, ${FUNCNAME[$i]} a ete appele depuis le fichier ${BASH_SOURCE[$i+1]} a la ligne numero ${BASH_LINENO[$i]}. La commande interne caller affiche la pile d'appel actuelle utilisant 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 detruite, elle perd ses proprietes speciales, meme si elle est recreee par la suite. HISTCMD Le numero d'historique, ou l'indice dans la file d'historique, de la commande en cours. Les affectations de HISTCMD sont ignorees. Si HISTCMD est detruite, elle perd ses proprietes speciales, meme si elle est recreee par la suite. HOSTNAME Automatiquement configuree au nom de la machine actuelle. HOSTTYPE Automatiquement configuree en chaine decrivant de facon unique le type de machine sur laquelle bash s'execute. La valeur par defaut depend du systeme. LINENO Chaque fois que ce parametre est consulte, l'interpreteur le remplace par un nombre decimal representant le numero de la ligne actuelle (commencant a 1), au sein du script ou de la fonction. Hors d'un script ou d'une fonction, la valeur n'a pas necessairement de sens. Si LINENO est detruite, elle perd ses proprietes speciales, meme si elle est recreee par la suite. MACHTYPE Automatiquement configuree en chaine decrivant le type du systeme sur lequel bash s'execute, dans le format standard de GNU processeur-compagnie-systeme. La valeur par defaut depend du systeme. MAPFILE Une variable de type tableau (consultez Tableaux ci-dessous) creee pour representer le texte lu par la commande interne mapfile si aucun nom de variable n'a ete fourni. OLDPWD Le repertoire de travail precedent tel que configure par la commande cd. OPTARG La valeur du dernier argument d'option traite par la commande interne getopts (consultez COMMANDES INTERNES DE L'INTERPRETEUR ci-dessous). OPTIND L'indice du prochain argument a traiter par la commande interne getopts (consultez COMMANDES INTERNES DE L'INTERPRETEUR ci-dessous). OSTYPE Automatiquement configuree en chaine decrivant le systeme d'exploitation sur lequel bash s'execute. La valeur par defaut depend du systeme. PIPESTATUS Une variable de type tableau (consultez Tableaux ci-dessous) contenant une liste des etats finaux des processus executes dans le pipeline execute le plus recemment au premier plan (qui peut eventuellement contenir une seule commande). PPID L'identifiant du processus parent de l'interpreteur. Cette variable est en lecture seule. PWD Le repertoire de travail actuel tel que configure par la commande cd. RANDOM A chaque fois que ce parametre est consulte, un entier aleatoire entre 0 et 32767 est engendre. L'affectation d'une valeur a RANDOM initialise (ensemence) la suite de nombres aleatoires. Si RANDOM est detruite, elle perd ses proprietes speciales, meme si elle est recreee par la suite. READLINE_ARGUMENT Tout argument numerique donne a une commande readline qui a ete definie en utilisant "bind -x" (consultez COMMANDES INTERNES DE L'INTERPRETEUR ci-dessous) quand il a ete invoque. READLINE_LINE Le contenu du tampon de ligne readline, pour utiliser avec "bind -x" (consultez COMMANDES INTERNES DE L'INTERPRETEUR ci-dessous). READLINE_MARK La position de la marque (point d'insertion enregistre) dans le tampon de ligne readline, pour utiliser avec "bind -x" (consultez COMMANDES INTERNES DE L'INTERPRETEUR ci-dessous). Les caracteres entre le point d'insertion et la marque sont souvent appeles la zone. READLINE_POINT La position du point d'insertion dans le tampon de ligne readline, pour utiliser avec "bind -x" (consultez COMMANDES INTERNES DE L'INTERPRETEUR ci-dessous). REPLY Configuree en ligne de saisie lue par la commande interne read lorsqu'aucun argument n'a ete fourni. SECONDS A chaque fois que ce parametre est consulte, il se developpe en nombre de secondes ecoulees depuis le lancement de l'interpreteur. Si une valeur est affectee a SECONDS, la valeur renvoyee lors d'une consultation ulterieure est le temps en seconde ecoule depuis l'affectation, ajoute a la valeur affectee. Le nombre de secondes entre le moment du lancement de l'interpreteur et l'heure actuelle sont toujours determines en interrogeant l'horloge systeme. Si SECONDS est detruite, elle perd ses proprietes speciales, meme si elle est recreee par la suite. SHELLOPTS Liste des options activees de l'interpreteur, separees par des deux-points << : >>. Chaque mot de la liste est un argument correct pour l'option -o de la commande interne set (consultez COMMANDES INTERNES DE L'INTERPRETEUR ci-dessous). Les options apparaissant dans SHELLOPTS sont celles indiquees comme actives par set -o. Si cette variable est dans l'environnement au lancement de bash, chaque option de la liste est activee avant de lire les fichiers d'initialisation. Cette variable est en lecture seule. SHLVL Incremente de 1 a chaque appel d'une instance de bash. SRANDOM Cette variable engendre un nombre pseudo-aleatoire de 32 bits chaque fois qu'elle est consultee. Le generateur de nombres aleatoires n'est pas lineaire sur les systemes qui prennent en charge /dev/urandom ou arc4random, aussi chaque nombre renvoye n'a aucune relation avec les nombres precedents. Le generateur de nombre aleatoire ne peut pas etre ensemence, aussi les affectations a cette variable n'ont aucun effet. Si SRANDOM est detruite, elle perd ses proprietes speciales, meme si elle est recreee par la suite. UID Contient l'UID de l'utilisateur actuel, initialise au demarrage de l'interpreteur. Cette variable est en lecture seule. Les variables suivantes sont utilisees par l'interpreteur. Dans certains cas, bash affecte des valeurs par defaut aux variables ; ces cas sont decrits ci-dessous. BASH_COMPAT La valeur est utilisee pour definir le niveau de compatibilite de l'interpreteur. Consultez MODE DE COMPATIBILITE DE L'INTERPRETEUR ci-dessous pour une description des differents niveaux de compatibilite et leurs consequences. La valeur peut etre un nombre decimal (par exemple 4.2) ou entier (par exemple 42) correspondant au niveau de compatibilite voulu. Si BASH_COMPAT est detruite ou definie comme une chaine vide, le niveau de compatibilite est defini a la valeur par defaut de la version actuelle. Si BASH_COMPAT est definie a une valeur de niveau de compatibilite impossible, l'interpreteur affiche un message d'erreur et definit le niveau de compatibilite a la valeur par defaut de la version actuelle. Les valeurs possibles correspondent aux niveaux de compatibilite decrits ci-dessous dans MODE DE COMPATIBILITE DE L'INTERPRETEUR. Par exemple, 4.2 et 42 sont des valeurs possibles qui correspondent a l'option compat42 de shopt et definissent le niveau de compatibilite a 42. La version actuelle est aussi une valeur possible. BASH_ENV Si ce parametre existe lorsque bash execute un script, sa valeur est consideree comme un nom de fichier contenant les commandes d'initialisation de l'interpreteur, comme dans ~/.bashrc. La valeur de BASH_ENV est soumise au developpement des parametres, a la substitution de commande et au developpement arithmetique avant d'etre consideree comme un nom de fichier. PATH n'est pas utilisee pour rechercher le fichier obtenu. BASH_XTRACEFD Si configuree a une valeur entiere correspondant a un descripteur de fichier correct, bash ecrira la trace de sortie si set -x est active vers ce descripteur de fichier. Le descripteur de fichier est ferme quand BASH_XTRACEFD est detruite ou qu'une nouvelle valeur lui est affectee. Detruire BASH_XTRACEFD ou lui affecter la chaine vide conduit la trace de sortie a etre envoyee vers la sortie d'erreur standard. Remarquez que configurer BASH_XTRACEFD a 2 (le descripteur de fichier de la sortie d'erreur standard) puis la detruire revient a fermer la sortie d'erreur standard. CDPATH Le chemin de recherche de la commande interne cd. Il s'agit d'une liste de repertoires, separes par des deux-points << : >>, que l'interpreteur consulte lorsqu'il cherche un sous-repertoire destination de la commande cd. Un exemple de valeur est ".:~:/usr". CHILD_MAX Definir le nombre de valeurs d'etat de sortie des enfants dont l'interpreteur doit se souvenir. Bash ne permettra pas a cette valeur d'etre inferieure a un minimum impose par POSIX, ni d'etre superieure a une valeur maximale (8192 pour l'instant). La valeur minimale depend du systeme. COLUMNS Utilisee par la commande composee select pour determiner la largeur du terminal lors de l'affichage des listes de selection. Automatiquement configuree si l'option checkwinsize est activee ou dans un interpreteur interactif a la reception d'un signal SIGWINCH. COMPREPLY Une variable de type tableau dans lequel bash lit les completements possibles produits par une fonction de l'interpreteur appelee par les outils de completement programmables (consultez Completement programmable ci-dessous). Chaque element du tableau contient un completement possible. EMACS Si bash trouve cette variable dans l'environnement lorsque l'interpreteur demarre avec la valeur "t", il considere que l'interpreteur est lance dans un tampon d'interpreteur d'Emacs et desactive l'edition en ligne. ENV Developpe et execute de facon similaire a BASH_ENV (consultez APPEL ci-dessus) quand l'interpreteur interactif est invoque en mode POSIX. EXECIGNORE Une liste, separee par des deux-points << : >>, de motifs de l'interpreteur (voir Motifs generiques) definissant la liste de noms de fichier a ignorer par la commande de recherche utilisant PATH. Les fichiers dont les noms de chemin complets correspondent a un de ces motifs ne sont pas consideres comme des fichiers executables en vue du completement et de l'execution 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 sujets a EXECIGNORE. Utiliser cette variable pour ignorer des fichiers de bibliotheque partagee dont le bit executable est present, mais qui ne sont pas des fichiers executables. La correspondance de motif respecte la configuration de l'option d'interpreteur extglob. FCEDIT L'editeur par defaut utilise par la commande interne fc. FIGNORE Une liste de suffixes, separes par des deux-points << : >>, que bash ignorera lors du completement des noms de fichiers (consultez READLINE ci-dessous). Un nom de fichier dont le suffixe correspond a l'un de ceux mentionnes dans FIGNORE est exclu de la liste des noms de fichiers correspondant pour le completement. Par exemple, cette variable peut prendre la valeur ".o:~". FUNCNEST Si configuree a une valeur numerique strictement positive, cela definit le niveau maximal d'imbrication de fonctions. Les invocations de fonctions qui depassent ce niveau d'imbrication forceront la commande actuelle a abandonner. GLOBIGNORE Une liste de motifs separes par des deux-points << : >>, definissant l'ensemble des noms de fichier a ignorer lors du developpement des chemins. Si un nom de fichier correspondant a un des motif de developpement des chemins correspond egalement a un des motifs dans GLOBIGNORE, il est supprime de la liste des correspondances. HISTCONTROL Une liste de valeurs, separees par des deux-points << : >>, commandant la facon dont les commandes sont sauvegardees dans la file d'historique. Si la liste des valeurs contient la valeur ignorespace, les lignes commencant par une espace ne sont pas sauvegardees dans la file d'historique. La valeur ignoredups conduit a ne pas sauvegarder une ligne correspondant exactement a la ligne de commande precedente. La presence de ignoreboth est un condense pour ignorespace et ignoredups. La valeur erasedups conduit a retirer de la file d'historique toutes les lignes precedant la ligne actuelle et lui correspondant avant que cette ligne y soit sauvegardee. Toute valeur qui ne fait pas partie de la liste ci-dessus est ignoree. Si HISTCONTROL est inexistante ou si elle ne contient pas une valeur correcte, toutes les lignes lues par l'analyseur de l'interpreteur seront sauvegardees dans la file d'historique, selon la valeur de HISTIGNORE. La seconde ligne et les suivantes d'une commande multiligne ne sont pas testees et sont ajoutees dans l'historique independamment de la valeur de HISTCONTROL. HISTFILE Le nom du fichier dans lequel l'historique des commandes est sauvegarde (consultez HISTORIQUE ci-dessous). Par defaut, il s'agit de ~/.bash_history. Si inexistante, l'historique des commandes n'est pas sauvegarde lorsqu'un interpreteur se termine. HISTFILESIZE Le nombre maximal de lignes contenues dans le fichier d'historique. Quand cette variable contient une valeur, le fichier d'historique est tronque, si besoin, pour ne pas contenir plus que ce nombre de lignes en enlevant les entrees les plus anciennes. Ce fichier est aussi tronque a cette taille apres son ecriture quand un interpreteur se termine. Si la valeur est 0, le fichier d'historique est tronque a une taille nulle. Les valeurs non numeriques ou negatives empechent la troncature. L'interpreteur definit la valeur par defaut a la valeur de HISTSIZE apres avoir lu tous les fichiers d'initialisation. HISTIGNORE Une liste de motifs, separes par des deux-points << : >>, determinant quelles lignes de commande devraient etre sauvegardees dans la file d'historique. Chaque motif est accroche au debut de la ligne et doit correspondre a celle-ci completement (aucun ajout de << * >> implicite). Chaque motif est compare a chaque ligne apres application des verifications de HISTCONTROL. En plus des motifs generiques usuels de l'interpreteur, << & >> correspond a la ligne precedente de l'historique. << & >> peut etre protegee par une contre-oblique ; la contre-oblique est supprimee avant de tenter une comparaison. La seconde ligne et les suivantes d'une commande composee multiligne ne sont pas testees et sont ajoutees dans l'historique quelque soit la valeur de HISTIGNORE. La correspondance de motif respecte la configuration de l'option d'interpreteur extglob. HISTSIZE Le nombre de commandes a memoriser dans l'historique (consultez HISTORIQUE ci-dessous). Si la valeur est 0, les commandes ne sont pas sauvegardees dans la liste d'historique. Les valeurs negatives permettent de sauvegarder toutes les commandes dans la liste d'historique (sans limite). L'interpreteur definit la valeur par defaut a 500 apres avoir lu tous les fichiers d'initialisation. HISTTIMEFORMAT Si cette variable existe et n'est pas NULL, sa valeur est utilisee comme une chaine de caracteres par strftime(3) afin d'imprimer l'horodatage associe a chaque element de l'historique affiche par la commande interne history. Si cette variable existe, les horodatages sont ecrits dans le fichier d'historique afin d'etre conserves au fur et a mesure des sessions de l'interpreteur. Cela utilise le caractere de commentaire d'historique pour distinguer l'horodatage des autres lignes de l'historique. HOME Le repertoire d'accueil de l'utilisateur actuel ; l'argument par defaut de la commande interne cd. La valeur de cette variable est aussi utilisee lors du developpement du tilde. HOSTFILE Contient le nom d'un fichier ayant le meme format /etc/hosts qui devra etre lu lorsque l'interpreteur aura besoin de completer un nom de machine. La liste des completements possibles de noms de machine peut etre changee pendant l'execution de l'interpreteur ; a la tentative de completement de nom de machine suivant le changement de valeur, bash ajoute le contenu du nouveau fichier a la liste existante. Si HOSTFILE existe mais est vide, ou designe un fichier non accessible en lecture, bash essaie de lire /etc/hosts pour obtenir la liste des completements de noms de machine possibles. Lorsque HOSTFILE est detruite, la liste des noms de machine est effacee. IFS Le separateur de champs interne (<< Internal Field Separator >>) qui est utilise pour le decoupage en mots apres les developpements et pour decouper les lignes en mots avec la commande interne read. La valeur par defaut est << >>. IGNOREEOF Commande le comportement d'un interpreteur interactif a la reception d'un caractere EOF (fin de fichier) comme unique saisie. Si elle existe, la valeur est le nombre de caracteres EOF consecutifs qui doivent etre tapes comme premiers caracteres sur une ligne de saisie avant que bash ne termine. Si la variable existe mais que sa valeur n'est pas numerique ou si elle n'a pas de valeur, la valeur par defaut est 10. Si elle n'existe pas, EOF signifie la fin de la saisie pour l'interpreteur. INPUTRC Le nom du fichier d'initialisation pour readline, prioritaire sur le fichier par defaut de ~/.inputrc (consultez READLINE ci-dessous). INSIDE_EMACS Si cette variable apparait dans l'environnement quand le script demarre, bash considere qu'il s'execute dans un tampon d'interpreteur d'Emacs et peut desactiver l'edition de ligne, suivant la valeur de TERM. LANG Utilisee pour determiner le parametre linguistique regional pour toute categorie non specifiquement selectionnee par une variable commencant par LC_. LC_ALL Cette variable surpasse LANG et toute autre variable LC_ indiquant une categorie de parametres linguistiques regionaux. LC_COLLATE Cette variable determine l'ordre de collation utilise pour trier les resultats du developpement des chemins et determine le comportement des expressions d'intervalle, des classes d'equivalences et des suites de collations dans le developpement des chemins et la correspondance de motifs. LC_CTYPE Cette variable determine l'interpretation des caracteres et le comportement des classes de caracteres lors du developpement des chemins et de la recherche de correspondances de motifs. LC_MESSAGES Cette variable determine le parametre linguistique regional utilise pour traduire les chaines entre guillemets doubles precedees d'un $. LC_NUMERIC Cette variable determine le parametre linguistique regional utilise pour formater les nombres. LC_TIME Cette variable determine le parametre linguistique regional utilise pour les donnees et le temps. LINES Utilisee par la commande composee select pour determiner la taille des colonnes lors de l'affichage des listes de selection. Automatiquement configuree si l'option checkwinsize est activee ou dans un interpreteur interactif a la reception d'un signal SIGWINCH. MAIL Si ce parametre correspond a un nom de fichier ou de repertoire et si la variable MAILPATH est inexistante, bash informe l'utilisateur de l'arrivee de messages dans le fichier indique ou le repertoire au format Maildir. MAILCHECK Indique la duree (en seconde) au bout de laquelle bash verifie si un nouveau message est arrive. La valeur par defaut est 60 secondes. Lorsque le delai est ecoule, l'interpreteur verifiera la presence d'un courrier electronique avant d'afficher son invite de base. Si cette variable est inexistante, ou contient une valeur strictement negative, l'interpreteur desactive la verification du courrier. MAILPATH Une liste de noms de fichiers separes par des deux-points << : >>, dans lesquels on verifiera l'arrivee de courrier. Le nom d'un fichier peut etre suivi d'un point d'interrogation << ? >>, puis d'une chaine de caracteres indiquant le message a afficher en cas de courrier. Dans cette chaine, le parametre $_ correspond au nom du fichier de courrier actuel. Exemple : MAILPATH='/usr/spool/mail/bfox?"Vous avez du courrier":~/shell-mail?"$_ a du courrier !"' Bash peut etre configuree pour fournir une valeur par defaut pour cette variable (il n'y a pas de valeur par defaut), mais l'emplacement du fichier de boite a lettres depend du systeme (par exemple /var/mail/$USER). OPTERR Si configuree a la valeur 1, bash affiche les messages d'erreurs engendres par la commande interne getopts (consultez COMMANDES INTERNES DE L'INTERPRETEUR ci-dessous). OPTERR est initialisee avec la valeur 1 a chaque appel de l'interpreteur ou au lancement d'un script. PATH Le chemin de recherche des commandes a executer. Il s'agit d'une liste de repertoires, separes par des deux-points << : >> dans lesquels l'interpreteur recherche les commandes (consultez EXECUTION DES COMMANDES ci-dessous). Un nom de repertoire de taille nulle (NULL) dans la valeur de PATH designe le repertoire actuel. Un repertoire NULL peut apparaitre comme deux deux-points consecutifs ou comme des deux-points en debut ou en fin. Le chemin par defaut depend du systeme et est choisi par l'administrateur 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 demarre, l'interpreteur passe en mode POSIX avant de lire les fichiers d'initialisation comme si l'option --posix avait ete fournie. Si elle est creee pendant que l'interpreteur est en cours d'execution, bash active le mode POSIX comme si la commande set -o posix a ete executee. Quand l'interpreteur passe en mode POSIX, il configure cette variable si elle ne l'a pas deja ete. PROMPT_COMMAND Si cette variable existe et est un tableau, la valeur de chaque element existant est executee comme commande prealablement a l'affichage de chaque invite de base. Si elle existe mais n'est pas une variable de type tableau, sa valeur est utilisee comme commande a executer a la place. PROMPT_DIRTRIM Si elle contient un nombre superieur a zero, cette valeur est utilisee comme nombre de repertoires finaux a conserver lors du developpement des protections de chaine d'invite \w et \W (consultez INVITES ci-dessous). Les caracteres supprimes sont remplaces par une ellipse. PS0 La valeur de ce parametre est developpee (consultez INVITES ci-dessous) puis affichee par les interpreteurs interactifs apres la lecture d'une commande et avant son execution. PS1 La valeur de ce parametre est developpee puis utilisee comme chaine d'invite de base (consultez INVITES ci-dessous). La valeur par defaut est << \s-\v\$ >>. PS2 La valeur de ce parametre est developpee comme PS1 puis utilisee comme chaine d'invite secondaire. La valeur par defaut est << > >>. PS3 La valeur de ce parametre est utilisee comme invite de la commande select (consultez GRAMMAIRE DE L'INTERPRETEUR ci-dessus). PS4 La valeur de ce parametre est developpee comme PS1 puis affichee avant chaque commande affichee par bash lors d'un suivi d'execution. Le premier caractere de PS4 est repete autant de fois que necessaire pour indiquer le niveau d'imbrication. La valeur par defaut est << + >>. SHELL Cette variable developpe le chemin d'acces complet a l'interpreteur de commandes. Si elle est inexistante au demarrage de l'interpreteur, bash lui affecte le chemin d'acces complet a l'interpreteur de commandes de connexion de l'utilisateur actuel. TIMEFORMAT La valeur de ce parametre est utilisee en tant que chaine de format indiquant comment les informations de parametrage doivent etre affichees pour les pipelines precedes du mot reserve time. Le caractere % introduit une suite de caracteres de protection qui est developpee en valeur de temps ou autre information. Les suites de caracteres de protection et leurs significations sont les suivantes ; les crochets marquent les parties facultatives. %% Un % seul (non interprete). %[p][l]R Le temps ecoule en seconde. %[p][l]U Le temps processeur ecoule en mode utilisateur en seconde. %[p][l]S Le temps processeur ecoule en mode systeme en seconde. %P Le pourcentage de temps processeur utilise calcule avec (%U + %S) / %R. Le p facultatif est un chiffre indiquant la precision, le nombre de chiffres apres la virgule. Une valeur de 0 conduit a affichage de nombres entiers. Trois chiffres au plus peuvent etre affiches apres la virgule ; toute valeur superieure a 3 sera modifiee en 3. Si p n'est pas precise, la valeur 3 est utilisee. Le l facultatif indique un format plus long, incluant les minutes, de la forme MMmSS.DDs. La valeur de p determine si la partie decimale est affichee 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 chronometrage n'est affichee. Un caractere final de changement de ligne est ajoute quand la chaine de format est affichee. TMOUT Si configuree en valeur strictement positive, TMOUT est traitee comme le delai par defaut pour la commande interne read. La commande select se termine s'il n'y a pas de saisie au bout de TMOUT secondes lorsque l'entree vient d'un terminal. Dans un interpreteur interactif, la valeur est interpretee comme une duree en seconde a attendre une ligne de saisie apres avoir affiche l'invite de base. Bash se termine apres avoir attendu pendant ce temps en seconde si aucune saisie de ligne complete n'est arrivee. TMPDIR Si existante, bash utilise sa valeur comme nom de repertoire dans lequel bash cree les fichiers temporaires necessaires au fonctionnement de l'interpreteur. auto_resume Cette variable commande le comportement de l'interpreteur vis-a-vis de l'utilisateur et du controle des taches. Si cette variable existe, les commandes simples constituees d'un seul mot, sans redirection, sont considerees comme de possibles relances de taches suspendues. Aucune ambiguite n'est possible, si plusieurs taches commencent par la chaine saisie, la tache a laquelle il a ete accede le plus recemment est selectionnee. Le nom d'une tache suspendue, dans ce contexte, est la ligne de commande utilisee pour la lancer. Si configuree a la valeur exact, la chaine fournie doit correspondre exactement au nom d'une tache suspendue ; si configuree a substring, la chaine fournie doit correspondre a une sous-chaine du nom de la tache suspendue. La valeur substring donne une fonctionnalite analogue a l'identificateur de tache %? (consultez CONTROLE DES TACHES ci-dessous). Si configuree a toute autre valeur, la chaine fournie doit etre le prefixe du nom d'une tache suspendue ; cela fournit une fonctionnalite analogue a l'identificateur de tache %string. histchars Les deux ou trois caracteres commandant le developpement de l'historique et le decoupage en lexemes (consultez DEVELOPPEMENT DE L'HISTORIQUE ci-dessous). Le premier caractere est le caractere de developpement de l'historique, celui qui indique le debut d'un developpement d'historique (normalement << ! >>). Le second caractere est celui de substitution rapide, utilise comme raccourci pour relancer la commande precedente, en modifiant une partie de la chaine (par defaut << ^ >>). Le troisieme caractere facultatif est celui qui indique, lorsqu'on le trouve en debut de mot que le reste de la ligne est un commentaire (normalement << # >>). Ce caractere de commentaire empeche le developpement de l'historique pour tous les mots restants sur la ligne. Il ne conduit pas necessairement l'analyseur de l'interpreteur a considerer le reste de la ligne comme un commentaire. Tableaux Bash fournit des variables de type tableau indice ou associatif, a une dimension. Toute variable peut etre utilisee comme tableau indice ; la commande interne declare peut servir a declarer explicitement un tableau. Il n'y a pas de limitation maximale a la taille d'un tableau, ni d'obligation a indicer les elements ou les affecter de facon contigue. Les tableaux indices sont consultes avec des entiers (evaluations arithmetiques comprises) commencant a zero ; les tableaux associatifs sont consultes avec des chaines arbitraires. Sauf mention contraire, les indices de tableaux indices ne doivent pas etre des entiers negatifs. Un tableau indice est cree automatiquement si une variable quelconque est affectee en utilisant la syntaxe nom[indice]=valeur. L'indice est traite comme une expression arithmetique et doit s'evaluer en un nombre. declare -a nom permet de declarer explicitement un tableau indice (consultez COMMANDES INTERNES DE L'INTERPRETEUR ci-dessous). declare -a nom[indice] est aussi accepte ; l'indice est ignore. Les tableaux associatifs sont crees en utilisant declare -A nom. Des attributs peuvent etre indiques pour une variable tableau en utilisant les commandes internes declare et readonly. Les attributs s'appliquent a tous les elements d'un tableau. Les tableaux sont affectes en utilisant l'affectation composee de la forme nom=(valeur_1 ... valeur_n), ou chaque valeur peut etre de la forme [indice]=chaine. Les affectations de tableau indice ne necessitent rien d'autre que chaine. Chaque valeur de la liste est developpee en utilisant tous les developpements de l'interpreteur decrits ci-dessous dans DEVELOPPEMENTS. Lors de l'affectation de tableaux indices, si les crochets et les indices facultatifs sont fournis, les affectations ont lieu en consequence ; sinon l'indice de l'element affecte est le dernier indice affecte plus un. L'indexation commence a zero. Lors de l'affectation a un tableau associatif, les mots d'une affectation composee peuvent etre soit des affectations pour lesquelles un indice est requis, soit une liste de mots qui est interpretee comme une sequence alternant cles et valeurs : nom=( cle1 valeur1 cle2 valeur2 ...). Elles sont traitees de la meme maniere que nom=( [cle1]=valeur1 [cle2]=valeur2 ...). Le premier mot de la liste determine comment les autres mots sont interpretes ; toutes les affectations d'une liste doivent etre du meme type. Lors de l'utilisation de paires cle/valeur, les cles ne peuvent pas etre absentes ou vides ; une valeur finale absente est traitee comme une chaine vide. Cette syntaxe est aussi acceptee par la commande interne declare. Les elements individuels du tableau sont affectes en utilisant la syntaxe nom[indice]=valeur presentee ci-dessus. Lors de l'affectation vers un tableau indice, si nom est indice avec un nombre negatif, ce nombre est considere comme ajoute a l'indice maximal de nom plus un, ainsi, un indice negatif compte a rebours depuis la fin du tableau et un indice -1 fait reference au dernier element du tableau. L'operateur += ajoutera a une variable tableau lors d'une affectation en utilisant la syntaxe d'affectation composee ; consultez PARAMETRES ci-dessous. Tout element d'un tableau est accessible avec la notation ${nom[indice]}. Les accolades sont necessaires pour eviter les conflits avec le developpement des chemins. Si indice est @ ou *, le mot se developpe en tous les elements de nom. Ces deux indices ne different que lorsque le mot apparait entre guillemets doubles. Si le mot est entre guillemets doubles, ${nom[*]} se developpe en un seul mot contenant les valeurs de chaque element du tableau separees par le premier caractere de la variable speciale IFS et ${nom[@]} developpe chaque element de nom en un mot distinct. Quand il n'y a pas d'element dans le tableau, ${nom[@]} ne se developpe en rien. Si le developpement entre guillemets doubles survient a l'interieur d'un mot, le developpement du premier parametre est accole a la premiere partie du mot original et le developpement du dernier parametre est accole a la derniere partie du mot original. Le comportement est analogue a celui des parametres speciaux * et @ (consultez Parametres speciaux ci-dessus). ${#nom[indice]} s'evalue en longueur de l'element ${nom[indice]}. Si l'indice est * ou @, il s'evalue en nombre d'elements dans le tableau. Si l'indice utilise pour referencer un element de tableau indice s'evalue en un nombre negatif, il est considere comme ajoute a l'indice maximal du tableau plus un, ainsi, un indice negatif compte a rebours depuis la fin du tableau et un indice -1 fait reference au dernier element du tableau. Le referencement d'une variable tableau sans indice est equivalent au referencement d'un tableau avec un indice de 0. Toute reference a une variable utilisant un indice valable est legale et bash creera un tableau si necessaire. Une variable tableau est consideree configuree si une valeur a ete affectee a un indice. La chaine NULL est une valeur possible. Les clefs (indices) d'un tableau peuvent etre aussi bien obtenues que les valeurs. ${!nom[@]} et ${!nom[*]} se developpent en indices assignes dans la variable tableau nom. Le traitement entre guillemets doubles est similaire au developpement des parametres speciaux @ et * entre guillemets doubles. La commande interne unset sert a detruire les tableaux. unset nom[indice] detruit l'element de tableau d'indice indice, pour a la fois les tableaux indices et les tableaux associatifs. Les indices negatifs des tableaux indices sont traites comme decrit precedemment. Supprimer le dernier element d'une variable tableau ne detruit pas la variable. unset nom, ou nom est un tableau, supprime le tableau entier. unset nom[indice], ou indice est un * ou un @, se comporte differemment selon que nom est un tableau indice ou associatif. Si nom est un tableau associatif, la commande detruit l'element avec un indice * ou @. Si nom est un tableau indice, unset supprime tous les elements mais ne supprime pas le tableau lui-meme. Lors de l'utilisation d'un nom de variable avec un indice comme argument d'une commande comme avec unset, sans utiliser la syntaxe des developpements de mots decrite precedemment, l'argument est sujet au developpement de chemin. Si le developpement de chemin n'est pas souhaite, l'argument doit etre protege. Les commandes internes declare, local et readonly acceptent toutes une option -a pour preciser un tableau indice et une option -A pour preciser un tableau associatif. Si les deux options sont fournies, -A est prioritaire. La commande interne read accepte une option -a pour affecter une liste de mots lus depuis l'entree standard dans un tableau. Les commandes internes set et declare affichent les valeurs d'un tableau d'une facon qui permet de les reutiliser pour des affectations. DEVELOPPEMENTS Les developpements sont appliques a la ligne de commande apres avoir ete decoupee en mots. Sept types de developpements sont effectues : le developpement des accolades, le developpement du tilde, le developpement des parametres et des variables, la substitution de commande, le developpement arithmetique, le decoupage en mots et le developpement des chemins. L'ordre des developpements est : developpement des accolades ; developpement du tilde, des parametres, des variables et arithmetique, et substitution de commande (effectuee de la gauche vers la droite) ; decoupage en mots ; et developpement des chemins. Sur les systemes qui le permettent, un developpement supplementaire a lieu : la substitution de processus. Il est realise en meme temps que le developpement du tilde, des parametres, des variables et arithmetique, et que la substitution de commande. Apres la realisation de ces developpements, les caracteres de protection presents dans le mot original sont supprimes a moins qu'ils n'aient ete proteges eux-memes (suppression des protections) Seuls le developpement des accolades, le decoupage en mots et le developpement des chemins peuvent modifier le nombre de mots. Les autres developpements transforment un mot unique en un autre mot unique. La seule exception a cette regle est le developpement de << $@ >> et << ${nom[@]} >>, ainsi que, dans la plupart des cas, $* et ${name[*]} comme explique precedemment (consultez PARAMETRES). Developpement des accolades Le developpement des accolades est un mecanisme permettant de produire des chaines quelconques. Il est similaire au developpement des chemins, mais les noms de fichiers produits n'existent pas necessairement. Les motifs qui seront developpes prennent la forme d'un preambule facultatif, suivi soit par une serie de chaines separees par des virgules, soit par l'expression d'une serie entre accolades, et suivi par un post-scriptum facultatif. Le preambule est insere devant chacune des chaines contenues entre les accolades et le post-scriptum est concatene a la fin de chacune des chaines resultantes, le developpement se faisant de gauche a droite. Plusieurs developpements d'accolades peuvent etre imbriques. Les resultats de chaque developpement ne sont pas tries, l'ordre de gauche a droite est conserve. Par exemple a{d,c,b}e se developpe en << ade ace abe >>. Une expression de sequence est de la forme {x..y[..incr]}, ou x et y sont soit des entiers, soit des lettres uniques, et incr, un increment facultatif, est un entier. Lorsqu'il s'agit d'entiers, l'expression est remplacee par la liste des nombres entre x et y inclus. Les entiers fournis peuvent etre prefixes par 0 pour forcer chaque terme a avoir la meme longueur. Si x ou y commencent par un zero, l'interpreteur essaiera de forcer tous les termes crees a la meme longueur, en ajoutant des zeros au besoin. S'il s'agit de lettres, l'expression se developpe en l'ensemble des caracteres situes entre x et y, inclus, d'un point de vue lexicographique en utilisant les parametres regionaux par defaut de C. Remarquez que x et y doivent etre du meme type (entier ou lettre). Si l'increment est fourni, il est utilise comme difference entre chaque terme. L'increment par defaut est 1 ou -1 suivant les valeurs de x et y. Le developpement des accolades est effectue avant tout autre developpement et tous les caracteres ayant une signification speciale pour les autres developpements sont conserves dans le resultat. Il s'agit d'une modification purement litterale. Bash n'effectue aucune interpretation syntaxique du texte entre les accolades. Un developpement d'accolades correctement forme doit contenir des accolades ouvrante et fermante non protegees et au moins une virgule non protegee ou une expression de serie correcte. Tout developpement d'accolades incorrectement forme est laisse inchange. Un { ou un , peuvent etre proteges par une contre-oblique pour eviter d'etre consideres comme partie d'une expression entre accolades. Pour eviter tout conflit avec le developpement des parametres, la chaine ${ n'est pas consideree comme eligible au developpement des accolades, et empeche le developpement d'accolades jusqu'au } fermant. Cette construction est typiquement utilisee comme raccourci lorsque le prefixe commun aux chaines a engendrer est plus long que dans les exemples precedents : mkdir /usr/local/src/bash/{old,new,dist,bugs} ou chown root /usr/{ucb/{ex,edit},lib/{ex?.?*,how_ex}} Le developpement des accolades induit une legere incompatibilite 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 inchangees. Bash supprime les accolades dans les mots, apres developpement. Par exemple, si le mot file{1,2} est fourni a sh, il reste inchange en sortie. En revanche, il est transforme en file1 file2 par bash. Si une compatibilite stricte avec sh est necessaire, lancez bash avec l'option +B ou desactivez le developpement des accolades avec l'option +B de la commande set (consultez COMMANDES INTERNES DE L'INTERPRETEUR ci-dessous). Developpement du tilde Si un mot commence par un caractere tilde (<< ~ >>) non protege, tous les caracteres precedant la premiere barre oblique non protegee (voire tous les caracteres s'il n'y a pas de barre oblique non protegee), sont consideres comme un prefixe tilde. Si aucun caractere du prefixe tilde n'est protege, les caracteres suivant le tilde sont traites comme un identifiant de connexion possible. Si cet identifiant de connexion est la chaine NULL, le tilde est remplace par la valeur du parametre d'interpreteur HOME. Si HOME n'existe pas, le repertoire d'accueil de l'utilisateur executant l'interpreteur est utilise a la place. Sinon le prefixe tilde est remplace par le repertoire d'accueil associe a l'identifiant de connexion indique. Si le prefixe tilde est << ~+ >>, la valeur de la variable de l'interpreteur PWD le remplace. Si le prefixe tilde est << ~- >>, la valeur de la variable de l'interpreteur OLDPWD, si existante, lui est substituee. Si les caracteres a la suite du tilde dans le prefixe tilde representent un nombre N prefixe facultativement par un << + >> ou un << - >> le prefixe tilde est remplace par l'element correspondant de la pile de repertoires telle qu'il serait affiche par la commande interne dirs appelee avec le prefixe tilde en argument. Si les caracteres a la suite du tilde dans le prefixe tilde representent un nombre sans un << + >> ou << - >> en tete, on suppose qu'il s'agit de << + >>. Si l'identifiant de connexion est incorrect ou si le developpement du tilde echoue, le mot est inchange. Chaque affectation de variable verifie immediatement la presence de prefixes tilde non proteges suivant un : ou le premier =. Dans ces cas, le developpement des tildes est aussi effectue. On peut donc utiliser des noms de fichiers avec des tildes dans des affectations de PATH, MAILPATH et CDPATH et l'interpreteur affectera la valeur developpee. Bash effectue aussi le developpement des tildes sur les mots satisfaisant les conditions d'affectations de variable (comme decrit precedemment dans PARAMETRES) quand elles apparaissent comme arguments de commandes simples. Bash ne le fait pas en mode POSIX sauf pour les commandes de declaration listees ci-dessus. Developpement des parametres Le caractere << $ >> permet d'introduire le developpement des parametres, la substitution de commande ou le developpement arithmetique. Le nom du parametre ou du symbole a developper peut etre encadre par des accolades facultatives mais permettant d'eviter le developpement de la variable a partir de caracteres la suivant immediatement et qui pourraient etre consideres comme appartenant a son nom. Lorsque les accolades sont utilisees, l'accolade de fin correspondante est le premier caractere << } >> ni protege par une contre-oblique, ni inclus dans une chaine protegee, un developpement arithmetique, une substitution de commande ou un developpement des parametres. ${parametre} est remplace par la valeur du parametre. Les accolades sont necessaires quand le parametre est un parametre positionnel ayant plusieurs chiffres, ou si le parametre est suivi de caracteres n'appartenant pas a son nom. Le parametre est un parametre d'interpreteur (comme decrit precedemment dans PARAMETRES) ou une reference de tableau (Tableaux). Si le premier caractere du parametre est un point d'exclamation (!), et si le parametre n'est pas un nameref, il introduit un niveau d'indirection de variable. Bash utilise la valeur formee par le developpement du reste du parametre en tant que nouveau parametre. Cette variable est alors developpee et la valeur utilisee pour le reste du developpement plutot que le developpement du parametre original. On appelle ce mecanisme le developpement indirect. La valeur est sujette au developpement de tildes et de parametres, a la substitution de commande ou au developpement arithmetique. Si le parametre est un nameref, le developpement porte sur le nom du parametre reference par le parametre plutot que sur le developpement indirecte complet. Les exceptions a cela sont les developpements de ${!prefixe*} et de ${!nom[@]} decrits ci-dessous. Le point d'exclamation doit immediatement suivre l'accolade ouvrante afin d'introduire l'indirection. Dans chacun des cas ci-dessous, le mot est soumis au developpement de tilde, au developpement des parametres, a la substitution de commande et au developpement arithmetique. Quand il n'effectue pas de developpement de sous-chaine, en utilisant les formes documentees ci-dessous (par exemple :-), bash teste si le parametre est inexistant ou NULL. L'absence de deux-points induit un test sur la seule inexistence du parametre. ${parametre:-mot} Utilisation de valeur par defaut. Si le parametre est inexistant ou NULL, le developpement du mot est substitue. Sinon, c'est la valeur du parametre qui est substituee. ${parametre:=mot} Affectation de valeur par defaut. Si le parametre est inexistant ou NULL, le developpement du mot lui est affecte. La valeur du parametre est alors substitue. Les parametres positionnels et speciaux ne peuvent pas etre affectes de cette facon. ${parametre:?mot} Affichage d'erreur si NULL ou inexistant. Si le parametre est inexistant ou NULL, le developpement du mot (ou un message approprie si aucun mot n'est fourni) est affiche sur la sortie d'erreur standard et l'interpreteur termine, s'il n'est pas interactif. Sinon, la valeur du parametre est substituee. ${parametre:+mot} Utilisation de valeur alternative. Si le parametre est NULL ou inexistant, rien n'est substitue. Sinon le developpement du mot est substitue. ${parametre:debut} ${parametre:debut:longueur} Developpement des sous-chaines. Se developpe pour fournir la sous-chaine de longueur indiquee (en caractere) commencant au debut. Si le parametre est @ ou *, un tableau indice par @ ou *, ou un nom de tableau associatif, le resultat differe comme decrit ci-dessous. Si la longueur est omise, fournit la sous-chaine commencant au caractere indique par debut et s'etendant jusqu'a la fin de la valeur. La longueur et le debut sont des expressions arithmetiques (consultez EVALUATION ARITHMETIQUE ci-dessous). Si le debut est negatif, sa valeur est consideree a partir de la fin du contenu du parametre. Si longueur est negatif, sa valeur est consideree comme une position en caractere a partir de la fin de la valeur du parametre plutot que comme un nombre de caracteres, et le developpement est constitue des caracteres entre le debut et cette position. Remarquez que les positions negatives doivent etre separees des deux-points par au moins une espace pour eviter d'etre confondues avec le developpement de :-. Si le parametre est @ ou *, le resultat correspond a longueurparametres positionnels commencant au debut. Une valeur negative de debut est consideree relative au plus grand parametre positionnel plus un (ainsi un indice -1 fait reference au dernier parametre positionnel). C'est une erreur de developpement si longueur est evaluee en nombre negatif. Si le parametre est un nom de tableau indice par @ ou *, le resultat est les longueur elements du tableau commencant a ${parametre[debut]}. Une valeur negative de debut est prise relativement a la valeur maximale de l'indice du tableau considere plus un. C'est une erreur de developpement si longueur est evaluee en nombre negatif. Le developpement de sous-chaine applique a un tableau associatif produit des resultats non definis. L'indexation des sous-chaines commence a zero, sauf pour les parametres positionnels pour lesquels l'indexation commence a 1 par defaut. Si debut est 0, et que les parametres positionnels sont utilises, la liste est prefixee par $0. ${!prefixe*} ${!prefixe@} Noms correspondant au prefixe. Se developpe en noms des variables dont les noms commencent par prefixe, separes par le premier caractere de la variable speciale IFS. Si @ est utilise et que le developpement apparait entre guillemets doubles, chaque nom de variable se developpe separement. ${!nom[@]} ${!nom[*]} Liste des clefs du tableau. Si nom est une variable de type tableau, elle se developpe en liste des indices (clefs) du tableau affecte a nom. Si nom n'est pas un tableau, se developpe en 0 si nom existe et en NULL sinon. Quand @ est utilise et que le developpement apparait entre guillemets doubles, chaque clef se developpe en un mot separe. ${#parametre} Longueur du parametre. Est remplace par la longueur, en caracteres, de la valeur du parametre. Si le parametre est * ou @, la valeur est le nombre de parametres positionnels. Si le parametre est un nom de tableau indice par * ou @, la valeur donnee est le nombre d'elements du tableau. Si le parametre est un nom de tableau indice par un nombre negatif, ce nombre est considere comme ajoute a l'indice maximal de parametre plus un (ainsi un indice negatif compte a rebours depuis la fin du tableau et un indice -1 fait reference au dernier element). ${parametre#mot} ${parametre##mot} Retrait du motif correspondant au prefixe. Le mot est developpe pour fournir un motif, comme dans le developpement des chemins et mis en correspondance avec la valeur developpee du parametre avec les regles decrites dans Motifs generiques ci-dessous. Si le motif correspond au debut de la valeur du parametre, alors le developpement prend la valeur developpee du parametre apres suppression du plus court (cas << # >>) ou du plus long (cas << ## >>) motif correspondant. Si le parametre est @ ou *, l'operation de suppression de motif est appliquee a chaque parametre positionnel tour a tour et le developpement est la liste resultante. Si le parametre est une variable tableau indicee par @ ou *, l'operation de suppression de motif est appliquee a chaque element du tableau tour a tour et le developpement est la liste resultante. ${parametre%mot} ${parametre%%mot} Retrait du motif correspondant au suffixe. Le mot est developpe pour fournir un motif, comme dans le developpement des chemins et mis en correspondance avec la valeur developpee du parametre avec les regles decrites dans Motifs generiques ci-dessous. Si le motif correspond a une portion finale de la valeur developpee du parametre, alors le developpement prend la valeur developpee du parametre apres suppression du plus court (cas << % >>) ou du plus long (cas << %% >>) motif correspondant. Si le parametre est @ ou *, l'operation de suppression de motif est appliquee a chaque parametre positionnel tour a tour et le developpement est la liste resultante. Si le parametre est une variable tableau indicee par @ ou *, l'operation de suppression de motif est appliquee a chaque element du tableau tour a tour et le developpement est la liste resultante. ${parametre/motif/chaine} ${parametre//motif/chaine} ${parametre/#motif/chaine} ${parametre/%motif/chaine} Substitution de motif. Le motif est developpe produire un motif comme dans le developpement des chemins. Le parametre est developpe et la plus longue portion correspondant au motif est remplacee par la chaine. La chaine est sujette au developpement du tilde, des parametres et des variables, au developpement arithmetique, a la substitution de commande et de processus, et a la suppression des protections. La mise en correspondance est realisee en utilisant les regles decrites dans Motifs generiques ci-dessous. Dans la premiere forme ci-dessus, seule la premiere correspondance est remplacee. S'il y a deux barres obliques separant le parametre et le motif, (la seconde forme ci-dessus) toutes les correspondances au motif sont remplacees par la chaine. Si le motif est precede par # (la troisieme forme ci-dessus), il doit correspondre au debut de la valeur developpee du parametre. Si le motif est precede par % (la quatrieme forme ci-dessus), il doit correspondre a la fin de la valeur du developpement du parametre. Si la chaine est NULL, les portions correspondant au motif sont supprimees et le / suivant le motif peut etre omis. Si l'option d'interpreteur patsub_replacement est activee en utilisant shopt, toutes les instances non protegees de & dans la chaine sont remplacees par la partie correspondante du motif. La protection d'une partie de la chaine empeche les remplacements dans le developpement de la partie protegee, y compris le remplacement des chaines stockees dans les variables de l'interpreteur. La contre-oblique protegera & dans la chaine ; la contre-oblique est supprimee afin de permettre un & litteral dans la chaine de remplacement. La contre-oblique peut aussi etre utilisee pour proteger une contre-oblique ; \\ resulte en une contre-oblique litterale dans le remplacement. Les utilisateurs doivent faire attention si la chaine est protegee entre des guillemets doubles pour eviter des interactions non souhaitees entre la contre-oblique et les guillemets doubles, dans la mesure ou la contre-oblique a une signification particuliere avec des guillemets doubles. La substitution de motif realise la verification de la presence de & non protegee apres le developpement de chaine ; les developpeurs de programmes d'interpreteur doivent proteger toutes les occurrences de & qu'ils souhaitent etre traitees litteralement dans le remplacement et s'assurer que toutes les instances de & qu'ils souhaitent voir remplacees ne soient pas protegees. Si l'option d'interpreteur nocasematch est activee, la mise en correspondance est realisee sans tenir compte de la casse des caracteres alphabetiques. Si le parametre est @ ou *, la substitution est appliquee a chaque parametre positionnel tour a tour et le developpement est la liste resultante. Si le parametre est une variable tableau indicee par @ ou *, l'operation de substitution est appliquee a chaque element du tableau tour a tour et le developpement est la liste resultante. ${parametre^motif} ${parametre^^motif} ${parametre,motif} ${parametre,,motif} Modification de la casse. Ce developpement modifie la casse des caracteres alphabetiques du parametre. Le motif est developpe pour fournir un motif, comme dans le developpement des chemins. Chaque caractere de la valeur developpee du parametre est teste par rapport au motif et, en cas de correspondance, sa casse est convertie. Le motif ne devrait pas essayer de correspondre a plus d'un caractere. L'operateur ^ convertit les lettre minuscules correspondant a ce motif en majuscules ; l'operateur , convertit les lettre majuscules correspondant a ce motif en minuscules. Les developpements ^^ et ,, convertissent tous les caracteres correspondant a leur valeur developpee ; les developpements ^ et , convertissent seulement le premier caractere de la valeur developpee correspondant. Si motif est omis, il est traite comme un ?, ce qui correspond a n'importe quel caractere. Si le parametre est @ ou *, la modification de casse s'applique a chaque parametre positionnel tour a tour et le developpement est la liste resultante. Si le parametre est une variable tableau indicee par @ ou *, la modification de casse s'applique a chaque element du tableau tour a tour et le developpement est la liste resultante. ${parametre@operateur} Transformation de parametre. Le developpement est soit une transformation de la valeur du parametre ou des informations sur parametre lui-meme, selon la valeur de operateur. Chaque operateur est une lettre unique : U Le developpement est une chaine qui est la valeur de l'argument avec des caracteres alphabetiques en minuscule convertis en majuscule. u Le developpement est une chaine qui est la valeur de l'argument avec son premier caractere converti en majuscule, si c'est un caractere alphabetique. L Le developpement est une chaine qui est la valeur de l'argument avec les caracteres alphabetiques en majuscule convertis en minuscule. Q Le developpement est une chaine qui est la valeur de l'argument protegee dans un format reutilisable en entree de l'interpreteur. E Le developpement est une chaine qui est la valeur du parametre avec des suites de caracteres de protection par contre-oblique developpee comme avec le mecanisme de protection $'...'. P Le developpement est une chaine qui est le resultat du developpement de lavaleur du parametre comme s'il s'agissait d'une chaine d'invite (consultez INVITES ci-dessous). A Le developpement est une chaine sous la forme d'une affectation ou d'une commande declare qui, lorsqu'elle est evaluee, recreera parametre avec sa valeur et ses attributs. K Produit une version potentiellement protegee de la valeur de l'argument, sauf qu'il affiche les valeurs des tableaux indices et associatifs comme une sequence de paires cle/valeur protegees (consultez Tableaux ci-dessus). a Le developpement est une chaine consistant en valeurs d'indicateur representant les attributs de parametre. k Comme la transformation K, mais developpe les cles et les valeurs des tableaux indices et associatifs pour separer les mots apres le decoupage en mots. Si le parametre est @ ou *, l'operation est appliquee a chaque parametre positionnel tour a tour et le developpement est la liste resultante. Si le parametre est une variable tableau indicee par @ ou *, l'operation est appliquee a chaque element du tableau tour a tour et le developpement est la liste resultante. Le resultat du developpement est sujet au decoupage en mots et au developpement des chemins comme decrit ci-dessous. Substitution de commande La substitution de commande permet de remplacer le nom d'une commande par son resultat. Il en existe deux formes : $(commande) ou `commande` Bash effectue le developpement en executant la commande dans un environnement de sous-interpreteur et en remplacant la substitution de commande par sa sortie standard dont les eventuels sauts de lignes finaux sont supprimes. Les changements de ligne internes ne sont pas supprimes mais peuvent disparaitre lors du decoupage en mots. La substitution de commande $(cat fichier) peut etre remplacee par l'equivalent plus rapide $(< fichier). Quand l'ancienne forme de substitution avec les accents graves << ` >> est utilisee, le caractere contre-oblique garde sa signification propre sauf lorsqu'il est suivi de $, ` ou \. Le premier accent grave non protege par une contre-oblique termine la substitution de commande. Quand on utilise la forme $(commande), tous les caracteres entre parentheses constituent la commande ; aucun n'est traite specifiquement. Les substitutions de commande peuvent etre imbriquees. Pour imbriquer en utilisant la forme a accents graves, il faut proteger les accents graves internes avec des contre-obliques. Si la substitution apparait entre guillemets doubles, le decoupage en mots et le developpement des chemins ne sont pas effectues sur ses resultats. Developpement arithmetique Le developpement arithmetique permet de remplacer une expression arithmetique par le resultat de son evaluation. Le format du developpement arithmetique est : $((expression)) L'expression est traitee comme si elle etait entre guillemets doubles, mais des caracteres guillemet double dans l'expression ne sont pas traites specifiquement et sont supprimes. Tous les lexemes dans l'expression sont sujets au developpement des parametres et des variables, a la substitution de commande et a la suppression des protections. Le resultat est traite comme l'expression arithmetique a evaluer. Les developpements arithmetiques peuvent etre imbriques. L'evaluation est effectuee en suivant les regles decrites ci-dessous dans EVALUATION ARITHMETIQUE. Si l'expression est incorrecte, bash affiche un message indiquant l'echec et aucune substitution n'a lieu. Substitution de processus La substitution de processus permet a une entree ou une sortie d'un processus d'etre referencee en utilisant un nom de fichier. Elle prend la forme <(liste) ou >(liste). La liste de processus est executee de facon asynchrone est son entree ou sortie apparait comme un nom de fichier. Le nom de ce fichier est passe en argument a la commande actuelle comme resultat de ce developpement. Si on utilise la forme >(liste), le fichier passe en argument devra etre lu pour obtenir la sortie de la liste. La substitution de processus est prise en charge sur les systemes acceptant le mecanisme des tubes nommes (FIFO) ou la methode /dev/fd de nommage de fichiers ouverts. Sur les systemes qui le permettent, la substitution de processus est effectuee simultanement au developpement des parametres et variables, a la substitution de commande et au developpement arithmetique. Decoupage en mots Les resultats du developpement des parametres, de la substitution de commande et du developpement arithmetique qui ne se trouvent pas entre guillemets doubles sont analyses par l'interpreteur afin d'appliquer le decoupage en mots. L'interpreteur considere chaque caractere du parametre IFS comme un delimiteur et decoupe le resultat des autres developpements en mots utilisant ces caracteres comme terminaisons de champ. Si IFS est inexistante ou si sa valeur est exactement , la valeur par defaut, alors les suites de caracteres , et au debut ou a la fin du resultat des developpements precedents sont ignores, et toute suite de caracteres de IFS ni au debut ni a la fin sert a delimiter les mots. Si IFS a une valeur autre que celle par defaut, alors les suites de caracteres blancs espace et tabulation et changement_de_ligne sont ignorees en debut et fin de mot, a condition que ces caracteres blancs se trouvent dans la valeur de IFS (un caractere blanc de IFS). Tout caractere de IFS qui n'est pas un caractere blanc, se trouvant a cote d'un caractere blanc de IFS, delimite un champ. Une suite de caracteres blancs de IFS est egalement traitee comme un delimiteur. Si la valeur de IFS est NULL, aucun decoupage en mots n'a lieu. Les arguments NULL explicites ("" ou '') sont conserves et passes a des commandes comme chaines vides. Les arguments NULL implicites non proteges, resultant du developpement des parametres qui n'ont pas de valeurs, sont supprimes. Si un parametre sans valeur est developpe entre guillemets doubles, le resultat est un argument NULL qui est conserve et passe a une commande comme une chaine vide. Quand un argument NULL protege apparait comme appartenant a un mot dont l'expansion n'est pas NULL, l'argument NULL est supprime. C'est-a-dire que le mot -d'' devient -d apres le decoupage en mots et le retrait de l'argument NULL. Remarquez que si aucun developpement n'a lieu, le decoupage en mots n'est pas effectue. Developpement des chemins Apres le decoupage en mots, a moins que l'option -f soit presente, bash recherche dans chaque mot les caracteres *, ? et [. Si l'un d'eux apparait et n'est pas protege, le mot est considere comme un motif et remplace par une liste, classee par ordre alphabetique de noms de fichiers correspondant a ce motif (consultez Motifs generiques ci-dessous). Si aucun nom de fichier ne correspond et si l'option d'interpreteur nullglob n'est pas activee, le mot reste inchange. Si l'option nullglob existe et si aucune correspondance n'est trouvee, le mot est supprime. Si l'option d'interpreteur failglob existe et si aucune correspondance n'est trouvee, un message d'erreur est affiche et la commande n'est pas executee. Si l'option d'interpreteur nocaseglob est activee, la correspondance est effectuee sans tenir compte de la casse des caracteres alphabetiques. Quand un motif est utilise pour le developpement des chemins, le caractere << . >> au debut d'un nom ou immediatement a la suite d'une barre oblique doit etre explicitement mis en correspondance, a moins que l'option d'interpreteur dotglob n'existe. Pour etre mis en correspondance avec les noms de fichier << . >> et << .. >>, le motif doit debuter par un << . >> (par exemple, << .? >>), meme si l'option dotglob existe. Si l'option d'interpreteur globskipdots est activee, les noms de fichier << . >> et << .. >> ne sont jamais mis en correspondance, meme si le motif debute par un << . >>. Quand il ne s'agit pas de correspondance avec des chemins, le caractere << . >> n'est pas traite specifiquement. Lors de la correspondance avec un chemin, le caractere barre oblique doit toujours etre mis en correspondance explicitement par une barre oblique dans le motif, mais dans les autres contextes de correspondance, il peut etre mis en correspondance par un caractere de motif special comme decrit ci-dessous dans Motifs generiques. Voyez la description de la commande shopt dans COMMANDES INTERNES DE L'INTERPRETEUR pour une description des options d'interpreteur nocaseglob, nullglob, globskipdots, failglob et dotglob. La variable de l'interpreteur GLOBIGNORE peut servir a restreindre l'ensemble des noms de fichiers correspondant a un motif. Si GLOBIGNORE existe, chaque nom de fichier qui correspond aussi a un motif de GLOBIGNORE est supprime de la liste des correspondances. Si l'option nocaseglob existe, la mise en correspondance avec les motifs dans GLOBIGNORE est realisee sans tenir compte de la casse. Les noms de fichiers << . >> et << .. >> sont toujours ignores quand GLOBIGNORE existe et n'est pas NULL. Toutefois, configurer GLOBIGNORE avec une valeur non NULL a pour effet d'activer l'option d'interpreteur dotglob, ainsi tous les autres noms de fichiers commencant par << . >> correspondront. Pour obtenir l'ancien comportement ignorant les noms commencant par << . >>, placez << .* >> dans l'un des motifs de GLOBIGNORE. L'option dotglob est desactivee si la variable GLOBIGNORE est inexistante. La correspondances de motifs respecte la configuration de l'option d'interpreteur extglob. Motifs generiques Tout caractere apparaissant dans un motif, hormis les caracteres speciaux decrits ci-dessous, correspond a lui-meme. Le caractere NUL ne peut pas se trouver dans un motif. Une contre-oblique protege le caractere qui la suit ; la contre-oblique de protection est supprimee lors de la recherche de correspondance. Les caracteres speciaux de motifs doivent etre proteges s'ils sont destines a une correspondance litterale. Les caracteres speciaux ont les significations suivantes : * Correspond a n'importe quelle chaine, y compris la chaine NULL. Si l'option globstar de l'interpreteur est activee, et que * est utilise dans un contexte de developpement des chemins, deux * adjacents sont utilises pour un seul motif correspondant a tous les fichiers et zero ou plus de repertoires et sous-repertoires. Lorsqu'il sont suivis de /, deux * adjacents correspondront seulement aux repertoires et sous-repertoires. ? Correspond a n'importe quel caractere. [...] Correspond a tout caractere entre les crochets. Un couple de caracteres separes par un trait d'union indique une expression d'intervalle ; tout caractere qui correspond a n'importe quel caractere situe entre les deux bornes incluses, en utilisant les suites de collations et le jeu de caracteres des parametres linguistiques regionaux actuels, est capture. Si le premier caractere suivant le [ est un ! ou un ^ alors la correspondance se fait sur tous les caracteres hors intervalle. L'ordre de tri des caracteres dans les expressions d'intervalle et les caracteres inclus dans l'intervalle sont determines par les parametres linguistiques regionaux actuels et par les valeurs des variables de l'interpreteur LC_COLLATE et LC_ALL si existantes. Pour obtenir l'interpretation traditionnelle des expressions d'intervalle, ou [a-d] est equivalent a [abcd], configurez la valeur de la variable d'interpreteur LC_ALL a C ou activez l'option d'interpreteur globasciiranges. Un - peut faire partie du motif de correspondance a condition d'etre le premier ou le dernier caractere de l'ensemble. Un ] peut faire partie du motif de correspondance a condition d'etre le premier caractere de l'ensemble. Entre [ et ], on peut indiquer une classe de caractere en utilisant la syntaxe [:classe:], ou classe est l'une des classes suivantes, definies dans la norme POSIX : alnum alpha ascii blank cntrl digit graph lower print punct space upper word xdigit Une classe correspond a n'importe quel caractere qui s'y trouve. La classe de caracteres word correspond aux lettres, aux chiffres et au caractere souligne << _ >>. Entre [ et ], on peut indiquer une classe d'equivalence en utilisant la syntaxe [=c=] qui correspond a n'importe quel caractere ayant le meme poids de collation (comme indique par les parametres linguistiques regionaux actuels) que le caractere c. Entre [ et ], la syntaxe [.symbole.] correspond au symbole de collation symbole. Si l'option extglob d'interpreteur est activee par la commande interne shopt l'interpreteur reconnait plusieurs operateurs de correspondance etendue. Dans la description suivante, une liste-motif est une liste d'un ou plusieurs motifs separes par des |. Les motifs composes sont formes en utilisant un ou plusieurs sous-motifs comme suit : ?(liste-motif) Correspond a zero ou une occurrence des motifs indiques. *(liste-motif) Correspond a zero ou plusieurs occurrences des motifs indiques. +(liste-motif) Correspond a une ou plusieurs occurrences des motifs indiques. @(liste-motif) Correspond a une occurrence exactement des motifs indiques. !(liste-motif) Correspond a tout sauf l'un des motifs indiques. L'option extglob d'interpreteur modifie le comportement de l'analyseur dans la mesure ou les parentheses sont normalement traitees comme des operateurs avec une signification syntaxique. Pour etre sur que les motifs developpes mis en correspondance sont analyses correctement, il faut s'assurer que extglob est active avant d'analyser les constructions contenant les motifs, y compris les fonctions de l'interpreteur et les substitutions de commande. Lors de la correspondance avec des noms de fichier, l'option de l'interpreteur dotglob determine l'ensemble de noms de fichiers a tester : quand dotglob est active, l'ensemble de noms de fichier inclut tous les fichiers commencant par << . >>, mais << . >> et << .. >> doivent etre mis en correspondance avec un motif ou un sous-motif qui commence par un point ; quand dotglob est desactive, l'ensemble ne comprend pas tous les fichiers commencant par << . >>, a moins que le motif ou le sous-motif debute par un << . >>. Comme precedemment, << . >> tout seul a une signification particuliere lors de la correspondance avec des noms de fichiers. La mise en correspondance de motifs etendus complexes avec de longues chaines est lente surtout quand les motifs contiennent des alternances et les chaines contiennent plusieurs correspondances. L'utilisation de correspondances separees avec des chaines plus courtes ou en utilisant des tableaux de chaines a la place d'une longue chaine unique peut etre plus court. Suppression des protections Apres les developpements precedents, toutes les occurrences non protegees des caracteres \, ' et " qui ne resultent pas d'un des developpements ci-dessus sont supprimees. REDIRECTIONS Avant qu'une commande ne soit executee, il est possible de rediriger son entree ou sa sortie en utilisant une notation speciale prise en compte par l'interpreteur. La redirection permet aux descripteurs de fichier d'etre dupliques, ouverts, fermes, de faire reference a d'autres fichiers et peut modifier les fichiers lus et ecrits par la commande. Les redirections permettent egalement de modifier les descripteurs de fichier dans l'environnement d'execution actuel de l'interpreteur. Les operateurs de redirection suivants peuvent preceder ou apparaitre n'importe ou dans une commande simple ou suivre une commande. Les redirections sont traitees dans leur ordre d'apparition, de gauche a droite. Toutes les redirections pouvant etre precedees par un numero de descripteur de fichier peuvent aussi etre precedees par un mot de la forme {nom_de_variable}. Dans ce cas, pour chaque operateur de redirection a part >&- et <&-, l'interpreteur de commande allouera un descripteur de fichier superieur ou egal a 10 et l'affectera a nom_de_variable. Si >&- ou <&- sont precedes de {nom_de_variable}, la valeur de nom_de_variable definit le descripteur de fichier a fermer. Si {nom_de_variable} est fournie, la redirection persiste au-dela de la portee de la commande, permettant au programmeur de l'interpreteur de gerer manuellement la duree de vie du descripteur de fichier. L'option de l'interpreteur varredir_close gere ce comportement. Dans les descriptions suivantes, si le numero de descripteur de fichier est omis et si le premier caractere de l'operateur de redirection est <, la redirection se rapporte a l'entree standard (descripteur de fichier 0). Si le premier caractere de l'operateur de redirection est >, la redirection se rapporte a la sortie standard (descripteur de fichier 1). Le mot qui suit l'operateur de redirection dans les descriptions suivantes, a moins qu'il en soit fait etat autrement, est soumis au developpement des accolades, du tilde, des parametres et des variables, a la substitution de commande, au developpement arithmetique, a la suppression des protections, au developpement des chemins et au decoupage en mots. S'il se developpe en plusieurs mots, bash signale une erreur. Remarquez que l'ordre des redirections est important. Par exemple, la commande ls > liste_repertoires 2>&1 redirige a la fois la sortie standard et la sortie d'erreur standard vers le fichier liste_repertoires, alors que la commande ls 2>&1 > liste_repertoires ne redirige que la sortie standard vers le fichier liste_repertoires, car la sortie d'erreur standard a ete dupliquee de la sortie standard avant que celle-ci ne soit redirigee vers liste_repertoires. Bash gerent plusieurs noms de fichier specifiquement quand ils sont utilises dans des redirections. Si le systeme d'exploitation sur lequel bash s'execute fournit ces fichiers speciaux, bash les utilise ; sinon, il les emule en interne avec le comportement decrit ci-dessous. /dev/fd/df Si df est un entier correct, le descripteur de fichier df est duplique. /dev/stdin Le descripteur de fichier 0 est duplique. /dev/stdout Le descripteur de fichier 1 est duplique. /dev/stderr Le descripteur de fichier 2 est duplique. /dev/tcp/hote/port Si hote est un nom de machine ou une adresse Internet corrects et si port est un numero de port entier ou un nom de service, bash tentera d'ouvrir le socket TCP correspondant. /dev/udp/hote/port Si hote est un nom de machine ou une adresse Internet corrects et si port est un numero de port entier ou un nom de service, bash tentera d'ouvrir le socket UDP correspondant. Un echec a l'ouverture ou a la creation de fichier conduit a l'echec de la redirection. Les redirections utilisant des descripteurs de fichier superieurs a 9 doivent etre utilisees avec precaution, car des conflits peuvent survenir avec les descripteurs de fichier utilises en interne par l'interpreteur. Redirection d'entree Une redirection d'entree conduit a l'ouverture en lecture avec le descripteur de fichier numero n du fichier dont le nom resulte du developpement du mot ou en tant qu'entree standard (descripteur de fichier 0) si n n'est pas indique. Le format general des redirections d'entree est : [n]mot Si l'operateur de redirection est > et si l'option noclobber de la commande interne set est activee, la redirection echouera si le fichier dont le nom resulte du developpement du mot existe et est un fichier normal. Si l'operateur de redirection est >| ou l'operateur > avec l'option noclobber de la commande interne set n'est pas activee, la redirection sera tentee meme si le fichier dont le nom resulte du developpement du mot existe. Ajout d'une sortie redirigee La redirection de la sortie de cette facon conduit a l'ouverture du fichier dont le nom resulte du developpement du mot pour ajouter au descripteur de fichier n ou a la sortie standard (descripteur de fichier 1) si n n'est pas indique. Si le fichier n'existe pas, il est cree. Le format general 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 simultanee de la sortie standard (descripteur 1) et de la sortie d'erreur standard (descripteur 2), dans un fichier dont le nom est le resultat du developpement du mot. Il y a deux formes pour rediriger les sortie standard et sortie d'erreur standard : &>mot et >&mot La premiere des deux formes est preferee. C'est semantiquement equivalent a >mot 2>&1 En utilisant la deuxieme forme, mot ne peut pas etre developpe en nombre ou -. Si c'est le cas, les autres operateurs de redirection s'appliquent (consultez Dedoublement de descripteurs de fichier ci-dessous) pour des raisons de compatibilite. Ajout de la sortie standard et de la sortie d'erreur standard Cette construction permet l'ajout simultane de la sortie standard (descripteur 1) et de la sortie d'erreur standard (descripteur 2), dans un fichier dont le nom est le resultat du developpement du mot. La forme pour ajouter les sortie standard et sortie d'erreur standard est : &>>mot C'est semantiquement equivalent a >>mot 2>&1 (consultez Dedoublement de descripteurs de fichier ci-dessous). Document en ligne Ce type de redirection commande a l'interpreteur de lire son entree de la source actuelle jusqu'a ce qu'il voit une ligne contenant seulement le delimiteur prevu (sans blancs finaux). Toutes les lignes lues jusqu'a ce point sont ensuite utilisees comme entree standard (ou comme descripteur de fichier n, si n est specifie) pour une commande. Le format des documents en ligne est le suivant : [n]<<[-]mot document_en_ligne delimiteur Aucun developpement des parametres ou des variables, ni substitution de commande, ni developpement arithmetique ou des chemins n'est effectue sur le mot. Si une partie du mot est protegee, le delimiteur est le resultat de la suppression des protections sur mot et les lignes du document_en_ligne ne sont pas developpees. Si mot n'est pas protege, toutes les lignes du document_en_ligne sont soumises au developpement des parametres, a la substitution de commande et au developpement arithmetique, la suite de caracteres \ est ignoree et \ doit etre utilisee pour proteger les caracteres \, $ et `. Si l'operateur de redirection est <<-, alors les tabulations en tete de chaque ligne sont supprimees de l'entree, y compris dans la ligne contenant delimiteur. Cela permet d'indenter de facon naturelle les documents en ligne au sein des scripts. Chaines en ligne Une variante aux documents en ligne, le format est : [n]<<&mot est utilise de facon similaire pour dupliquer les descripteurs de sortie. Si n n'est pas explicite, la sortie standard (descripteur 1) est utilisee. Si les chiffres du mot ne correspondent pas a un descripteur en ecriture, une erreur de redirection se produit. Si mot est evalue en -, le descripteur de fichier n est ferme. Dans le cas particulier ou n est omis et ou mot ne se developpe pas en un ou plusieurs chiffres, ou -, les sorties standard et d'erreur standard sont toutes deux redirigees comme decrit precedemment. Deplacement de descripteurs de fichier L'operateur de redirection [n]<&chiffre- deplace le descripteur de fichier chiffre vers le descripteur de fichier n ou sur l'entree standard (descripteur de fichier 0) si n n'est pas indique. chiffre est ferme apres avoir ete duplique en n. De la meme facon, l'operateur de redirection [n]>&chiffre- deplace le descripteur de fichier chiffre vers le descripteur de fichier n ou sur la sortie standard (descripteur de fichier 1) si n n'est pas indique. Ouverture en Lecture/Ecriture d'un descripteur de fichier L'operateur de redirection [n]<>mot conduit a l'ouverture du fichier dont le nom resulte du developpement du mot, a la fois en lecture et en ecriture et lui affecte le descripteur de fichier n ou bien le descripteur 0 si n n'est pas mentionne. Si le fichier n'existe pas, il est cree. ALIAS Les alias permettent de substituer une chaine a un mot lorsqu'il est utilise comme premier mot d'une commande simple. L'interpreteur gere une liste d'alias qui peuvent etre crees et detruits avec les commandes internes alias et unalias (consultez COMMANDES INTERNES DE L'INTERPRETEUR ci-dessous). L'interpreteur verifie si le premier mot de chaque commande simple, si non protege, est un alias. Si c'est le cas, ce mot est remplace par le texte de l'alias. Les caracteres /, $, ` et = et tout metacaractere de l'interpreteur ou caractere de protection decrits ci-dessus ne peuvent pas apparaitre dans un nom d'alias. Le texte de remplacement peut contenir toute entree correcte pour l'interpreteur, y compris les metacaracteres de l'interpreteur. L'interpreteur verifie si le premier mot du texte de remplacement est a son tour un alias, mais un mot identique a un alias en cours de developpement n'est pas developpe une seconde fois. Cela signifie qu'on peut, par exemple, creer un alias ls valant ls -F et bash n'essaiera pas de developper recursivement le texte de substitution. Si le dernier caractere de la valeur de l'alias est un blanc, alors le prochain mot de commande suivant l'alias connaitra aussi le developpement d'alias. Les alias sont crees et affiches avec la commande alias et supprimes avec la commande unalias. Il n'existe pas de mecanisme permettant d'utiliser des arguments dans le texte de remplacement. S'ils sont necessaires, utilisez une fonction de l'interpreteur (consultez FONCTIONS ci-dessous). Les alias ne sont pas developpes quand l'interpreteur n'est pas interactif sauf si l'option expand_aliases de l'interpreteur est creee par la commande shopt (consultez la description de shopt dans COMMANDES INTERNES DE L'INTERPRETEUR ci-dessous). Les regles concernant la definition et l'utilisation des alias sont un peu confuses. Bash lit toujours au moins une ligne d'entree completement et toutes les lignes qui composent une commande composee, avant d'executer une des commandes de cette ligne ou de la commande composee. Les alias sont developpes lorsque la commande est lue et non pas lorsqu'elle est executee. Ainsi, une definition d'alias apparaissant sur la meme ligne qu'une autre commande ne prend pas effet avant la lecture de la prochaine ligne d'entree. Une commande placee a la suite d'une definition d'alias sur la meme ligne ne sera pas affectee par ce nouvel alias. Ce comportement est egalement important lors de l'execution des fonctions. Les alias sont developpes lorsque la definition de la fonction est lue et non pas lors de l'execution de cette fonction, parce qu'une definition de fonction est elle-meme une commande. Ainsi des alias definis dans une fonction ne sont pas disponibles avant la fin de l'execution de la fonction. Pour plus de tranquillite, placez toujours les definitions d'alias sur des lignes isolees et n'utilisez jamais la commande alias dans les commandes composees. Les alias sont surpasses par les fonctions de l'interpreteur dans la plupart des situations. FONCTIONS Une fonction de l'interpreteur, definie comme decrit ci-dessus, dans GRAMMAIRE DE L'INTERPRETEUR, conserve une suite de commandes pour execution ulterieure. Lorsque le nom d'une fonction de l'interpreteur est utilisee comme un simple nom de commande, la liste des commandes associees a ce nom de fonction est executee. Les fonctions sont executees dans le contexte de l'interpreteur actuel ; aucun nouveau processus n'est cree pour les interpreter (a la difference d'un script). Lorsqu'une fonction est executee, les arguments de la fonction deviennent les parametres positionnels pendant son execution. Le parametre special # est mis a jour en consequence. Le parametre special 0 reste inchange. Le premier element de la variable FUNCNAME contient le nom de la fonction pendant son execution. Tous les autres aspects de l'environnement d'execution de l'interpreteur sont identiques entre la fonction et le contexte d'appel, aux exceptions suivantes : les captures de DEBUG et RETURN (consultez la description de la commande interne trap dans COMMANDES INTERNES DE L'INTERPRETEUR ci-dessous) ne sont pas heritees, a moins que l'attribut trace ne soit positionne pour la fonction (consultez la description de la commande interne declare ci-dessous) ou que l'option d'interpreteur -o functrace n'ait ete activee avec la commande interne set (auquel cas toutes les fonctions heriteront des captures de DEBUG et RETURN), et la capture ERR n'est pas heritee a moins que l'option d'interpreteur -o errtrace n'ait ete activee. Les parametres linguistiques regionaux des variables pour les fonctions peuvent etre declares avec la commande interne local (local variables). Normalement, les variables et leurs valeurs sont partagees entre la fonction et son contexte d'appel. Si une variable est declaree local, la portee visible de la variable est restreinte a cette fonction et a ses enfants (y compris les fonctions qu'elle appelle). Dans la description suivante, la portee actuelle est une fonction qui s'execute actuellement. Les portees precedentes consistent en celles du contexte d'appel de la fonction et ainsi de suite, en remontant jusqu'a la portee << globale >>, ou l'interpreteur n'execute aucune fonction de l'interpreteur. Par consequent, une variable locale pour la portee actuelle est une variable declaree avec les commandes internes local ou declare dans la fonction qui est executee actuellement. Les variables locales << suivent >> les variables du meme nom declarees pour des portees precedentes. Par exemple, une variable locale declaree dans une fonction masque une variable globale du meme nom : les references et les affectations se referent a la variable locale, sans modifier la variable globale. Quand la fonction rend la main, la variable globale est a nouveau visible. L'interpreteur utilise les portees dynamiques pour controler la visibilite d'une variable dans les fonctions. Avec les portees dynamiques, les variables visibles et leurs valeurs sont le resultat d'une suite d'appels de fonction qui font que l'execution atteint la fonction actuelles. La valeur de la variable vue par une fonction depend de sa valeur dans son contexte d'appel, s'il existe, que le contexte d'appel soit la portee << globale >> ou une autre fonction de l'interpreteur. C'est aussi la valeur qu'une declaration de variable locale << suit >>, et la valeur qui est restauree quand la fonction rend la main. Par exemple, si une variable var est declaree comme locale dans la fonction fonc1, et que fonc1 appelle une autre fonction, fonc2, les references a var provenant de la fonc2 seront resolues a la valeur de la variable locale var provenant la fonc1, masquant toute variable globale nommee var. La commande interne unset fonctionne avec les memes portees dynamiques : si une variable est locale pour la portee actuelle, unset la detruit ; autrement, la destruction se refere a la variable trouvee dans une portee d'appel comme decrit ci-dessus. Si une variable pour la portee locale actuelle est desactivee, elle reste ainsi (apparaissant comme detruite) jusqu'a ce qu'elle soit reinitialisee dans cette portee ou jusqu'a ce que la fonction rende la main. Une fois que la fonction a rendu la main, toute instance de la variable dans la portee anterieure deviendra visible. Si la desactivation agit sur une variable dans une portee anterieure, toute instance d'une variable de ce nom qui avait ete masquee deviendra visible (voir plus loin comment l'option de l'interpreteur localvar_unset modifie ce comportement). La variable FUNCNEST, si configuree a une valeur numerique strictement positive, definit le niveau maximal d'imbrication de fonctions. Les invocations de fonctions qui depassent la limite forceront toute la commande a abandonner. Si la commande interne return est executee dans une fonction, celle-ci se termine et l'execution reprend avec la commande suivant l'appel de fonction. Toute commande associee a la capture de RETURN est executee avant que l'execution reprenne. Quand une fonction se termine, les parametres positionnels et le parametre special # reprennent les valeurs qu'ils avaient avant l'appel de la fonction. Les noms et les definitions de fonctions peuvent etre affiches 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 facultativement le fichier source et le numero de ligne, si l'option d'interpreteur extdebug est activee). Les fonctions peuvent etre exportees avec l'option -f de la commande interne export, afin d'etre automatiquement definies dans les processus enfant de l'interpreteur (ceux crees lors de l'execution d'un lancement separe de l'interpreteur). Une definition de fonction peut etre supprimee avec l'option -f de la commande interne unset. Les fonctions peuvent etre recursives. La variable FUNCNEST peut etre utilisee pour limiter la profondeur de la pile d'appel de la fonction et restreindre le nombre d'invocations de fonctions. Par defaut, aucune limite n'est imposee quant au nombre d'appels recursifs. EVALUATION ARITHMETIQUE L'interpreteur permet, dans certaines circonstances, l'evaluation d'expressions arithmetiques (consultez les commandes internes let et declare ainsi que Developpement arithmetique). L'evaluation est effectuee en utilisant des entiers de longueur fixe, sans verification du debordement. Neanmoins, la division par 0 est capturee et marquee comme une erreur. Les operateurs, leur priorite, leur associativite et leur valeur sont identiques a ceux du langage C. La liste suivante d'operateurs est groupee par operateurs de niveaux de priorite identiques. Les niveaux sont decrits par ordre de priorite decroissante. id++ id-- post-increment et post-decrement de variables - + moins et plus unaires ++id --id preincrement et predecrement de variables ! ~ negations logique et binaire ** exponentiation * / % multiplication, division, reste + - addition, soustraction << >> decalage arithmetique a gauche et a droite <= >= < > comparaisons == != egalite et difference & ET binaire ^ OU exclusif binaire | OU binaire && ET logique || OU logique expr?expr:expr operateur conditionnel = *= /= %= += -= <<= >>= &= ^= |= affectations expr1 , expr2 virgule Les variables de l'interpreteur sont utilisables comme operandes, le developpement des parametres etant effectue avant l'evaluation arithmetique. Dans une expression, les variables de l'interpreteur peuvent egalement etre referencees par leur nom, sans utiliser la syntaxe de developpement des parametres. Une variable d'interpreteur NULL ou inexistante est evaluee a 0 lorsqu'elle est consultee par son nom sans utiliser la syntaxe de developpement des parametres. La valeur d'une variable est evaluee comme une expression arithmetique lorsqu'elle est consultee, ou lorsqu'une valeur lui est affecte alors que son attribut integer (entier) a ete positionne en utilisant declare -i. Une valeur NULL est evaluee a 0. Une variable d'interpreteur n'a donc pas besoin d'avoir son attribut integer positionne pour etre utilisable dans un calcul. Les constantes de type entier suivent la definition du langage C, sans suffixes ou constantes de caracteres. Les constantes commencant par 0 sont interpretees comme des nombres octaux. Un en-tete 0x ou 0X indique une valeur hexadecimale. Sinon, les nombres ont la forme [base#]n ou la base facultative est un nombre decimal entre 2 et 64 representant la base arithmetique et n est un nombre exprime dans cette base. Si la base# est omise, la base 10 est utilisee. En indiquant n, si un caractere non chiffre est requis, les chiffres superieurs a 9 sont representes par les lettres minuscules, les lettres majuscules, le << @ >> et le << _ >>, dans cet ordre. Si la base est inferieure ou egale a 36, les minuscules et les majuscules sont interchangeables pour representer les nombres entre 10 et 35. Les operateurs sont evalues par ordre de priorite. Les sous-expressions entre parentheses sont evaluees en premier, ce qui permet de surpasser les regles de priorite ci-dessus. CONDITIONS Les conditions sont utilisees par la commande composee [[ et les commandes internes test et [ pour verifier les attributs d'un fichier et effectuer des comparaisons arithmetiques ou sur des chaines. Les commandes test et [ determinent comment elles se comportent a partir du nombre d'arguments ; consultez la description de ces commandes pour toutes les autres actions specifiques aux commandes. Les conditions se forment a partir des primitives unaires ou binaires suivantes. Bash gere plusieurs noms de fichier specifiquement quand ils sont utilises dans des conditions. Si le systeme d'exploitation sur lequel bash s'execute fournit ces fichiers speciaux, bash les utilise ; sinon, il les emule 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 examine. 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 examine. Sauf indication contraire, les primitives relatives aux fichiers suivent les liens symboliques et operent sur la cible du lien plutot que sur le lien lui-meme. Lorsqu'ils sont utilises avec [[, les operateurs < et > ordonnent d'un point de vue lexicographique en utilisant les parametres linguistiques regionaux 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 special bloc. -c fichier Vrai si le fichier existe et est un fichier special caractere. -d fichier Vrai si le fichier existe et est un repertoire. -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 positionne. -h fichier Vrai si le fichier existe et est un lien symbolique. -k fichier Vrai si le fichier existe et a son bit << sticky >> positionne. -p fichier Vrai si le fichier existe et est un tube nomme (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 a un terminal. -u fichier Vrai si le fichier existe et a son bit Set-UID positionne. -w fichier Vrai si le fichier existe et est accessible en ecriture. -x fichier Vrai si le fichier existe et est executable. -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 ete modifie depuis sa derniere lecture. -O fichier Vrai si le fichier existe et appartient a l'UID effectif de l'utilisateur. -S fichier Vrai si le fichier existe et est un socket. fichier_1 -ef fichier_2 Vrai si le fichier_1 et le fichier_2 se rapportent au meme peripherique et ont les memes numeros d'inoeuds. fichier_1 -nt fichier_2 Vrai si le fichier_1 est plus recent que le fichier_2 (selon les dates de derniere 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 fichier_2 existe et non fichier_1. -o nom_opt Vrai si l'option d'interpreteur nom_opt est activee. 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'interpreteur est configuree (si une valeur lui a ete assignee). -R nom_de_variable Vrai si la variable nom_de_variable de l'interpreteur est configuree et est une reference de nom. -z chaine Vrai si la longueur de la chaine est nulle. chaine -n chaine Vrai si la longueur de la chaine est non nulle. chaine_1 == chaine_2 chaine_1 = chaine_2 Vrai si les deux chaines sont egales. Le symbole = devrait etre utilise avec la commande test pour etre en conformite POSIX. Utilisee avec la commande [[, cela realise une correspondance de motif tel que decrit precedemment (Commandes composees). chaine_1 != chaine_2 Vrai si les deux chaines sont differentes. chaine_1 < chaine_2 Vrai si chaine_1 se trouve avant chaine_2 dans l'ordre lexicographique. chaine_1 > chaine_2 Vrai si chaine_1 se trouve apres chaine_2 dans l'ordre lexicographique. arg1 OP arg2 OP est l'un des operateurs suivants -eq, -ne, -lt, -le, -gt ou -ge. Ces operateurs arithmetiques binaires renvoient vrai si arg1 est respectivement egal, different, inferieur, inferieur ou egal, superieur, superieur ou egal a arg2. arg1 et arg2 peuvent etre des entiers positifs ou negatifs. Lorsqu'ils sont utilises avec la commande [[, arg1 et arg2 sont evalues comme des expressions arithmetiques (consultez EVALUATION ARITHMETIQUE ci-dessus). DEVELOPPEMENT DES COMMANDES SIMPLES Lors de l'execution d'une commande simple, l'interpreteur effectue les developpements, affectations et redirections, de gauche a droite dans l'ordre suivant. 1. Les mots que l'analyseur a repere comme affectations de variables (ceux qui precedent le nom de la commande) et les redirections sont conservees pour un traitement ulterieur. 2. Les mots qui ne sont ni des affectations de variables ni des redirections sont developpes. S'il reste des mots apres le developpement, le premier mot est considere comme le nom d'une commande et les suivants comme ses arguments. 3. Les redirections sont effectuees comme decrit ci-dessus dans REDIRECTIONS. 4. Le texte suivant le signe = de chaque affectation de variable est sujet au developpement du tilde, des parametres, a la substitution de commande, au developpement arithmetique et a la suppression des protections avant d'etre affecte a la variable. Si aucun nom de commande ne resulte des precedentes operations, les affectations de variables modifient l'environnement actuel de l'interpreteur. Dans le cas de commandes de ce type (celles qui consistent uniquement en affectations et en redirections), les affectations sont effectuees avant les redirections. Sinon les variables sont ajoutees a l'environnement de la commande executee et n'affectent pas l'environnement de l'interpreteur actuel. Si l'une des tentatives d'affectation concerne une variable en lecture seule, une erreur se produit et la commande termine avec un etat different de zero. Si aucun nom de commande n'est obtenu, les redirections sont effectuees mais ne modifient pas l'environnement de l'interpreteur actuel. Une erreur de redirection conduit a la terminaison de la commande avec un etat different de zero. S'il reste un nom de commande apres le developpement, l'execution a lieu comme decrit ci-dessous. Sinon la commande termine. Si l'un des developpements contient une substitution de commande, l'etat final de la commande est l'etat final de la derniere substitution de commande effectuee. S'il n'y avait aucune substitution de commande, la commande termine avec un etat de zero. EXECUTION DES COMMANDES Apres le decoupage de la ligne de commande en mots, si le resultat est une commande simple suivie d'une liste facultative d'arguments, les actions suivantes sont effectuees. Si le nom de la commande ne contient aucune barre oblique, l'interpreteur tente de la localiser. S'il existe une fonction de l'interpreteur de ce nom, elle est appelee comme nous l'avons vu ci-dessus dans FONCTIONS. Si le nom n'est pas celui d'une fonction, l'interpreteur le recherche dans la liste des commandes internes. Si une correspondance est trouvee, cette commande interne est appelee. Si le nom n'est ni celui d'une fonction de l'interpreteur, ni celui d'une commande interne et s'il ne contient pas de barre oblique, bash va chercher dans chacun des elements de PATH un repertoire contenant un fichier executable du nom desire. Bash utilise une table de hachage pour memoriser les chemins d'acces complets aux fichiers executables (consultez la commande hash dans COMMANDES INTERNES DE L'INTERPRETEUR ci-dessous). Une recherche complete dans les repertoires du PATH n'est effectuee que si la commande ne se trouve pas dans la table de hachage. Si la recherche est infructueuse, l'interpreteur recherche une fonction de l'interpreteur appelee command_not_found_handle. Si cette fonction existe, elle est appelee dans un environnement d'execution separe avec la commande d'origine et comme argument les arguments de celle-ci, et l'etat final de la fonction devient l'etat final de ce sous-interpreteur. Si cette fonction n'est pas definie, l'interpreteur affiche un message d'erreur et renvoie un etat final de 127. Si la recherche reussit ou si le nom de la commande contient une ou plusieurs barres obliques, l'interpreteur execute le programme demande dans un environnement d'execution distinct. L'argument 0 est configure au nom indique et les eventuels arguments restants de la commande sont configures aux arguments indiques. Si cette execution echoue parce que le programme n'est pas un executable et si le fichier n'est pas un repertoire, il est pris pour un script, un fichier contenant des commandes d'interpreteur, et l'interpreteur cree une nouvelle instance de lui-meme pour executer ce script. Ce sous-interpreteur se reinitialisera lui-meme, comme si un nouvel interpreteur avait ete appele pour executer le script, a la difference qu'il continuera a memoriser l'emplacement des commandes connues de son parent (consultez hash dans COMMANDES INTERNES DE L'INTERPRETEUR ci-dessous). Si le programme est un fichier commencant par #!, le reste de la premiere ligne indique un interprete pour ce programme. L'interpreteur se chargera d'executer l'interprete indique sur les systemes d'exploitation qui ne gerent pas eux-memes ce format d'executable. Les arguments de l'interprete consistent en un seul argument facultatif fourni sur la premiere ligne du fichier a la suite du nom de l'interprete, suivi du nom du programme, suivi des arguments de la commande s'il y en a. ENVIRONNEMENT D'EXECUTION DES COMMANDES L'interpreteur fournit un environnement d'execution consistant en l'ensemble des elements suivants : - les fichiers ouverts herites par l'interpreteur a son appel et modifies par les redirections fournies a la commande interne exec ; - le repertoire de travail actuel comme configure par cd, pushd ou popd ou herite par l'interpreteur a son appel ; - le masque de creation de fichier comme configure par umask ou herite du parent de l'interpreteur ; - les captures actuelles configurees par trap ; - les parametres de l'interpreteur configures par des affectations de variables, avec la commande interne set, ou herites de l'environnement du parent de l'interpreteur ; - les fonctions de l'interpreteur definies lors de l'execution ou heritees de l'environnement du parent de l'interpreteur ; - les options activees a l'appel (par defaut ou avec les arguments de ligne de commande) ou par set ; - les options activees par shopt ; - les alias de l'interpreteur definies par la commande alias ; - les ID des divers processus, y compris ceux des taches en arriere-plan, la valeur de $$ et la valeur de PPID. Lorsqu'une commande differente d'une commande interne ou d'une fonction de l'interpreteur doit etre executee, elle est appelee dans un environnement d'execution separe constitue de ce qui suit. Sauf indication contraire, les valeurs sont heritees de l'environnement de l'interpreteur : - les fichiers ouverts de l'interpreteur, ainsi que toutes modifications et ajouts precises par les redirections de la commande ; - le repertoire de travail actuel ; - le masque de creation de fichiers ; - les variables et les fonctions de l'interpreteur marquees pour l'exportation, ainsi que les variables exportees specialement pour la commande ; - les captures interceptees par l'interpreteur sont reinitialisees aux valeurs heritees de l'interpreteur parent et les captures ignorees par l'interpreteur restent ignorees. Une commande appelee dans un environnement distinct ne peut pas affecter l'environnement d'execution de l'interpreteur. Un sous-interpreteur est une copie du processus de l'interpreteur. Les substitutions de commande, les commandes groupees entre parentheses et les commandes asynchrones sont appelees dans un environnement de sous-interpreteur qui est une copie de celui de l'interpreteur, mais les captures interceptees par l'interpreteur sont reinitialisees aux valeurs que l'interpreteur avait heritees de son parent a son appel. Les commandes internes appelees dans un pipeline sont aussi executees dans un environnement de sous-interpreteur. Les modifications apportees a l'environnement d'un sous-interpreteur n'affectent aucunement l'environnement d'execution de l'interpreteur. Les sous-interpreteurs engendres pour executer les substitutions de commande heritent de la valeur de l'option -e de l'interpreteur parent. En dehors du mode POSIX, bash efface l'option -e de tels sous-interpreteurs. Si une commande est suivie par un & et que le controle des taches n'est pas actif, l'entree standard par defaut de la commande est le fichier vide /dev/null. Sinon, la commande appelee herite des descripteurs de fichier de l'interpreteur appelant comme modifies par les redirections. ENVIRONNEMENT Quand un programme est appele, il recoit un tableau de chaines que l'on appelle environnement. Il s'agit d'une liste de couples nom-valeur, de la forme nom=valeur. L'interpreteur fournit plusieurs facons de gerer l'environnement. Au demarrage, l'interpreteur analyse son propre environnement et cree un parametre pour chaque nom trouve, en le marquant comme exportable vers les processus enfants. Les commandes executees heritent de cet environnement. Les commandes export et declare -x permettent d'ajouter ou de supprimer des parametres ou des fonctions de l'environnement. Si la valeur d'un parametre de l'environnement est modifiee, la nouvelle valeur devient une partie de l'environnement et elle remplace l'ancienne. L'environnement herite par toute commande executee est l'environnement initial de l'interpreteur, dont les valeurs peuvent etre modifiees dans l'interpreteur, sans les elements supprimes par la commande unset, et avec les elements ajoutes par les commandes export et declare -x. L'environnement d'une commande simple ou d'une fonction peut etre augmente temporairement, en la faisant preceder des affectations de parametres, comme nous l'avons vu ci-dessus dans PARAMETRES. Ces affectations ne concernent que l'environnement vu par cette commande. Si l'option -k est configuree (consultez ci-dessous la commande interne set), alors toutes les affectations de parametres sont placees dans l'environnement d'une commande executee et non seulement celles qui precedent son nom. Quand bash appelle une commande externe, la variable _ est configuree en chemin d'acces complet a cette commande et elle est transmise dans l'environnement. CODE DE RETOUR L'etat final d'une commande executee est la valeur renvoyee par l'appel systeme waitpid ou fonction equivalente. Les etats finaux prennent leurs valeurs entre 0 et 255, neanmoins, comme explique ci-dessous, l'interpreteur peut utiliser les valeurs superieures a 125 de facon particuliere. Les etats finaux des commandes internes et composees sont egalement limites a cet intervalle. Sous certaines conditions, l'interpreteur utilisera des valeurs particulieres pour indiquer des modes d'echec particuliers. Du point de vue de l'interpreteur, une commande qui termine avec etat final valant zero a reussi. Un etat final de zero indique le succes. Un etat final different de zero indique un echec. Quand une commande se termine par un signal mortel N, bash utilise la valeur 128+N comme etat final. Si une commande n'est pas trouvee, le processus enfant cree pour l'executer renvoie un etat de 127. Si une commande est trouvee mais pas executable, la valeur renvoyee est 126. Si une commande echoue a cause d'une erreur survenue lors d'un developpement ou des redirections, l'etat final est strictement plus grand que zero. Les commandes internes renvoient un etat de 0 (vrai) si reussies et une valeur differente de zero (faux) si une erreur se produit pendant leur execution. Toutes les commandes internes renvoient un etat final de 2 pour indiquer un usage incorrect, en general des options non valables ou des arguments manquants. Le code de retour de la derniere commande est disponible dans le parametre special $?. Bash lui-meme renvoie l'etat final de la derniere commande executee, a moins qu'une erreur de syntaxe ne se produise, auquel cas il termine avec une valeur differente de zero. Consultez aussi ci-dessous la commande interne exit. SIGNAUX Quand bash fonctionne de facon interactive, en absence de toute capture, il ignore SIGTERM (c'est ainsi que kill 0 ne tue pas un interpreteur interactif) et SIGINT est intercepte et gere (c'est ainsi que la commande interne wait est interruptible). Dans tous les cas, bash ignore SIGQUIT. Si le controle des taches est actif, bash ignore SIGTTIN, SIGTTOU et SIGTSTP. Les commandes externes lancees par bash ont les gestionnaires de signaux configures aux valeurs heritees par l'interpreteur de son parent. Quand le controle des taches n'est pas actif, les taches en arriere-plan ignorent les signaux SIGINT et SIGQUIT en plus des gestionnaires herites. Les commandes executees en tant que resultat d'une substitution de commande ignorent les signaux de controle de taches emis par le clavier SIGTTIN, SIGTTOU et SIGTSTP. Par defaut, l'interpreteur termine a la reception de SIGHUP. Avant de terminer, un interpreteur interactif renvoie le SIGHUP a toutes les taches en cours ou suspendues. Les taches suspendues recoivent aussi SIGCONT pour s'assurer qu'elles recoivent bien le SIGHUP. Pour empecher l'interpreteur d'envoyer le signal a une tache particuliere, elle devrait etre supprimee de la table des taches avec la commande interne disown (consultez COMMANDES INTERNES DE L'INTERPRETEUR ci-dessous) ou marquee comme exemptee de SIGHUP en utilisant disown -h. Si l'option d'interpreteur huponexit a ete configuree avec la fonction shopt, bash envoie un signal SIGHUP a toutes les taches lorsqu'un interpreteur de commandes de connexion interactif termine. Lorsque bash attend qu'une commande se termine et qu'il recoit un signal pour lequel une capture a ete configuree, la capture ne sera pas executee tant que la commande n'est pas terminee. Lorsque bash attend la fin d'une commande asynchrone par la commande interne wait, la reception d'un signal pour lequel une capture a ete configuree conduira a un retour immediat de la commande interne wait avec un etat final superieur a 128, a la suite de quoi la capture est immediatement executee. Quand le controle des taches n'est pas active, et que bash est dans l'attente de l'achevement d'une commande au premier plan, l'interpreteur recoit les signaux emis par le clavier comme SIGINT (generalement cree par ^C) que l'utilisateur a generalement l'intention d'envoyer a cette commande. Cela se produit parce que l'interpreteur et la commande sont dans le meme groupe de processus que le terminal, et ^C envoie un SIGINT a tous les processus de ce groupe de processus. Quand bash est execute sans que le controle de tache ne soit active et recoit un SIGINT pendant qu'il attend une commande au premier plan, il attend jusqu'a ce que la commande au premier plan s'acheve et decide 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 a tout le script et repond au SIGINT (par exemple en executant une capture de SIGINT ou en s'arretant lui-meme) ; 2. Si la commande ne se termine pas du fait du SIGINT, le programme a gere le SIGINT lui meme et ne l'a pas traite comme un signal fatal. Dans ce cas bash ne traite pas le SIGINT comme un signal fatal, en supposant plutot soit que le SIGINT etait utilise comme un element du deroulement normal du programme (par exemple, emacs l'utilise pour interrompre des commandes d'edition) ou etait abandonne deliberement. Neanmoins, bash executera toute capture definie par SIGINT, comme il le fait pour tout autre signal capture recu pendant qu'il attend que la commande au premier plan s'acheve, pour des raisons de compatibilite CONTROLE DES TACHES Le controle des taches se refere a la capacite de suspendre (suspend) selectivement l'execution d'un processus et de la reprendre (resume) ulterieurement. L'utilisateur beneficie generalement de cette possibilite grace a l'action conjointe du pilote de terminal du noyau de systeme d'exploitation et de bash. L'interpreteur associe une tache a chaque pipeline. Il maintient une table des taches en cours d'execution, cette table pouvant etre affichee avec la commande jobs. Quand bash lance une tache de facon asynchrone (en arriere-plan), il affiche une ligne qui ressemble a : [1] 25647 Cette ligne indique que la tache est la tache numero 1 et que le PID du dernier processus dans le pipeline associe a cette tache est 25647. Tous les processus d'un meme pipeline font partie de la meme tache. Bash utilise la notion de tache comme base du controle des taches. Pour faciliter l'implementation d'une interface utilisateur pour le controle de taches, le systeme introduit la notion d'ID de groupe de processus associes a un terminal. Les membres de ce groupe de processus (processus dont le GID est egal au Process Group ID du terminal actuel) recoivent les signaux emis par le clavier comme SIGINT. Ces processus sont dits au premier plan. Les processus en arriere-plan sont ceux dont le Process-GID differe de celui du terminal ; ils sont indifferents aux signaux emis par le clavier. Seuls les processus au premier plan peuvent lire depuis le terminal ou, si l'utilisateur l'indique avec stty tostop, y ecrire. Les processus en arriere-plan qui tentent une lecture (ou une ecriture si stty tostop est actif) dans le terminal recoivent un signal SIGTTIN (SIGTTOU) emis par le pilote du terminal du noyau, qui, sauf interception, suspend le processus. Si le systeme d'exploitation sur lequel bash fonctionne permet le controle des taches, bash fournit des outils pour l'utiliser. La frappe d'un caractere de suspension (generalement ^Z, Controle-Z) pendant l'execution d'un processus conduit a la suspension de celui-ci et redonne la main a bash. La frappe d'un caractere de suspension differee (generalement ^Y, Controle-Y) conduira a la suspension du processus au moment ou il tentera de lire des saisies depuis le terminal et la main reviendra a bash. L'utilisateur peut alors manipuler l'etat de cette tache en utilisant la commande bg (background = arriere-plan) pour en continuer l'execution en arriere-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 immediatement et a pour effet de bord d'eliminer les sorties et saisies en attente. Plusieurs facons permettent de se rapporter a une tache. Le caractere % introduit une specification de tache (jobspec). Il est possible de se rapporter a la tache numero n avec %n. Il est egalement possible de se rapporter a une tache en utilisant un prefixe du nom utilise pour la lancer ou une sous-chaine qui apparait dans sa ligne de commande. Par exemple, %ce se rapporte a une tache suspendue dont le nom de commande commence par ce. Si ce prefixe correspond a plusieurs taches, bash signale une erreur. Utiliser %?ce, d'un autre cote, se rapporte a toute tache contenant la chaine ce dans sa ligne de commande. Si la sous-chaine correspond a plusieurs taches, bash signale une erreur. Les symboles %% et %+ se rapportent a la notion de tache actuelle de l'interpreteur, c'est-a-dire la derniere tache suspendue alors qu'elle etait au premier plan ou demarree en arriere-plan. La tache precedente peut etre designee en utilisant %-. Si une seule tache existe, %+ et %- peuvent tous deux etre utilises pour se rapporter a cette tache. Dans les affichages se rapportant aux taches (par exemple la sortie de la commande jobs), la tache actuelle est toujours annotee d'un + et la tache precedente d'un -. Un simple % (non accompagne de specification de tache) se rapporte egalement a la tache actuelle. Il suffit de nommer une tache pour la ramener au premier plan : %1 est synonyme de << fg %1 >> et ramene la tache 1 de l'arriere-plan vers le premier plan. De meme, << %1 & >> reprend la tache 1 en arriere-plan, de facon equivalente a << bg %1 >>. L'interpreteur est immediatement prevenu lorsqu'une tache change d'etat. Normalement bash attend d'etre pret a afficher son interpreteur avant de signaler des changements dans l'etat des taches, afin de ne pas interrompre toute autre sortie. Si l'option -b de la commande interne set est activee, bash signalera de telles modifications immediatement. Toute capture sur SIGCHLD est executee pour chaque enfant qui se termine. Si une tentative visant a terminer bash est realisee alors que des taches sont suspendues (ou, si l'option d'interpreteur checkjobs a ete activee par la commande interne shopt, en cours d'execution), l'interpreteur affiche un message d'avertissement, et, si l'option d'interpreteur checkjobs est activee, affiche la liste les taches et leurs etats. La commande jobs peut alors etre utilisee pour examiner leur etat. Si une deuxieme tentative est faite pour terminer sans commande intercalaire, l'interpreteur n'affiche aucun autre avertissement et les taches suspendues sont terminees. Lorsque l'interpreteur est dans l'attente d'une tache ou d'un processus utilisant la commande interne wait et que le controle des taches est active, wait rendra la main quand la tache changera d'etat. L'option -f fera que wait attendra que la tache ou le processus termine avant de rendre la main. INVITES Quand il est execute de facon interactive, bash affiche l'invite de base PS1 des qu'il est pret a lire une commande et l'invite secondaire PS2 quand il a besoin de plus de saisies pour executer une commande. Bash affiche PS0 apres avoir lu une commande, mais avant de l'executer. Bash affiche PS4 comme decrit ci-dessus avant de tracer chaque commande quand l'option -x est activee. Bash permet de personnaliser ces chaines d'invite, en inserant un certain nombre de caracteres speciaux proteges par des contre-obliques qui sont decodes comme suit : \a un caractere ASCII d'alarme (07) ; \d la date au format << Jour_de_la_semaine Mois Quantieme >> (par exemple : << Tue May 26 >>) ; \D{format} le format est passe a strftime(3) et le resultat est insere dans la chaine de l'invite ; un format vide implique une representation du temps specifique aux parametres linguistiques regionaux. Les accolades sont necessaires ; \e un caractere de protection ASCII (033) ; \h le nom de la machine, jusqu'au premier point << . >> ; \H le nom de la machine ; \j le nombre de taches actuellement gerees par l'interpreteur ; \l le nom de base du nom de peripherique de terminal de l'interpreteur ; \n changement de ligne ; \r retour chariot (<< carriage return >>) ; \s le nom de l'interpreteur, c'est-a-dire le nom de base de $0 (la portion suivant la derniere 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 numero de version complet (avec niveau de correctifs) de bash, (par exemple, 2.00.0) ; \w la valeur de la variable de l'interpreteur ($PWD), avec $HOME abrege en tilde << ~ >> (utilise la valeur de la variable PROMPT_DIRTRIM) ; \W le nom de base de $PWD, avec $HOME abrege en tilde (<< ~ >>) ; \! le numero d'historique de la commande ; \# le numero de la commande ; \$ # si l'UID effectif est 0, $ sinon ; \nnn le caractere de code octal nnn ; \\ une contre-oblique ; \[ debute une suite de caracteres non imprimables, qui peuvent etre utilises pour inclure une suite de caracteres de controle du terminal dans l'interpreteur ; \] finit une suite de caracteres non imprimables. Le numero de commande et le numero d'historique sont generalement differents : le numero d'historique d'une commande correspond a sa position dans la file d'historique qui peut contenir des commandes relues depuis cette liste (consultez HISTORIQUE ci-dessous), alors que le numero de commande est simplement une position dans la suite de commandes executees depuis le debut de la session d'interpreteur actuelle. Apres que la chaine ait ete decodee, elle est soumise au developpement des parametres, a la substitution de commande, au developpement arithmetique, au decoupage des mots et a la suppression des protections, selon la valeur de l'option d'interpreteur promptvars (consultez la description de shopt dans COMMANDES INTERNES DE L'INTERPRETEUR ci-dessous). Cela peut avoir des effets non desires si des portions protegees de la chaine apparaissent a l'interieur de la substitution de commande ou contiennent des caracteres speciaux pour le developpement de mots. READLINE C'est la bibliotheque qui gere la lecture des saisies lors des sessions interactives de l'interpreteur, a moins que l'option --noediting ne soit indiquee a l'appel de l'interpreteur. Par defaut les commandes d'edition de ligne sont similaires a celles d'Emacs. Une interface d'edition de ligne dans le style vi est aussi disponible. Pour arreter l'edition de ligne apres le demarrage de l'interpreteur, utiliser l'option +o emacs ou +o vi de la commande interne set (consultez COMMANDES INTERNES DE L'INTERPRETEUR ci-dessous). Notation readline Dans ce paragraphe on utilisera la notation << a la Emacs >> pour indiquer les frappes de touches. Les touches Controle sont notees C-touche, par exemple C-n signifie Controle-N. De meme, les touches Meta sont notees par M-touche, ainsi M-x signifie Meta-X. (Sur les claviers sans touches Meta, M-x signifie ESC x, c'est-a-dire presser la touche d'Echappement puis la touche x. Cela fait de ESC le prefixe meta. La combinaison M-C-x signifie ESC-Controle-x ou encore presser la touche d'Echappement puis maintenir la touche Controle enfoncee tout en pressant la touche x.) Les commandes readline peuvent recevoir des arguments numeriques, qui fonctionnent en regle generale comme compteurs de repetitions. Parfois, cependant, c'est le signe de l'argument qui est significatif. L'utilisation d'un argument negatif pour une commande agissant dans un sens donne (par exemple kill-line) conduit cette commande a agir dans la direction opposee. Les commandes dont le comportement avec les arguments differe de cela sont indiquees ci-dessous. Lorsqu'une commande est indiquee comme detruisant du texte, le texte efface est en fait sauvegarde pour une eventuelle recuperation ulterieure (<< yanking >>). Il est conserve dans un tampon circulaire (<< kill ring >>). Les suppressions successives conduisent a l'accumulation du texte en un seul bloc qui peut etre recupere en une fois. Les commandes non destructives separent les blocs de textes dans le tampon circulaire. Initialisation de readline Readline est personnalise en placant des commandes dans un fichier d'initialisation (le fichier inputrc). Le nom de ce fichier est pris dans la variable de l'interpreteur INPUTRC. Si cette variable est inexistante, le nom par defaut est ~/.inputrc. Si ce fichier n'existe pas ou s'il ne peut pas etre lu, le dernier fichier par defaut est /etc/inputrc. Lorsqu'un programme utilisant la bibliotheque readline demarre, le fichier d'initialisation est lu et les raccourcis clavier et les variables sont mis en place. Il n'y a que quelques constructions elementaires possibles dans le fichier d'initialisation de readline. Les lignes blanches sont ignorees. Les lignes commencant par # sont des commentaires. Les lignes commencant par $ indiquent des constructions conditionnelles. Les autres lignes indiquent des raccourcis clavier et des parametrages de variables. Les raccourcis clavier par defaut peuvent etre modifies par un fichier inputrc. D'autres programmes qui utilisent cette bibliotheque peuvent ajouter leurs propres commandes et raccourcis. Par exemple, en placant M-Control-u: universal-argument ou C-Meta-u: universal-argument dans le fichier inputrc, on associera la suite de touches M-C-u a la commande readline universal-argument. Les caracteres symboliques suivants sont acceptes : RUBOUT, DEL, ESC, LFD, NEWLINE, RET, RETURN, SPC, SPACE et TAB. En plus des noms de commandes, readline permet d'associer a une touche une chaine de caracteres qui sera inseree lorsque la touche est pressee (une macro). Raccourcis clavier readline La syntaxe pour controler les raccourcis clavier dans le fichier inputrc est simple. Tout ce qui est necessaire est le nom de la commande ou le texte d'une macro et la suite de touches a laquelle il faut l'associer. Les noms de touches peuvent etre indiques de l'une des deux facons : comme un nom de touche symbolique, eventuellement precede des prefixes 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 associe a la fonction universal-argument, M-DEL a la fonction backward-kill-word et C-o a l'execution de la macro exprimee dans la partie gauche (c'est-a-dire, inserer le texte ``> output'' sur la ligne). Avec la seconde forme, "touches":nom_de_fonction ou macro, touches differe de touche ci-dessus en ce que les chaines notant une suite complete de touches peuvent etre indiquees en placant la suite entre guillemets doubles. Certaines suites de touches d'echappement dans le style GNU Emacs peuvent etre utilisees, comme dans l'exemple suivant, mais les noms de caracteres 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 a nouveau associe a la fonction universal-argument, C-x C-r a la fonction re-read-init-file et ESC [ 1 1 ~ a l'insertion du texte ``Function Key 1''. Le jeu complet des suites de caracteres de protection du style GNU Emacs est : \C- prefixe Controle ; \M- prefixe Meta ; \e caractere de protection ; \\ contre-oblique ; \" un guillemet " litteral ; \' un guillemet ' litteral. En plus des suites de caracteres de protection dans le style GNU Emacs, un second jeu de suites de caracteres de protection par contre-obliques est disponible : \a alerte (alarme) ; \b effacement arriere (<< 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 caractere 8 bits dont la valeur octale est nnn (un a trois chiffres) ; \xHH le caractere 8 bits dont la valeur hexadecimale est HH (un ou deux chiffres hexadecimaux) ; Lorsqu'on saisit le texte d'une macro, il faut utiliser des guillemets simples ou doubles pour indiquer la definition de la macro. Les textes non proteges sont consideres comme des noms de fonctions. Dans le corps de la macro, les protections par contre-oblique decrites ci-dessus sont developpees. La contre-oblique protegera tout autre caractere 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'edition a l'autre en mode interactif en utilisant l'option -o de la commande interne set (consultez COMMANDES INTERNES DE L'INTERPRETEUR ci-dessous). Variables de readline Readline dispose de variables permettant de personnaliser encore plus son comportement. Une variable peut etre configuree dans le fichier inputrc avec une affectation de la forme set nom_de_variable valeur ou utilisant la commande interne bind (consultez COMMANDES INTERNES DE L'INTERPRETEUR ci-dessous). Sauf indication contraire, les variables de readline prennent les valeurs On ou Off (la casse etant sans importance). Les noms de variables non reconnues sont ignores. Lorsqu'une valeur de variable est lue, les variables vides ou de valeur NULL, << on >> (insensible a la casse) et << 1 >> sont equivalentes a On. Toutes les autres valeurs sont equivalentes a Off. Les variables et leurs valeurs par defaut, sont : active-region-start-color Une variable de chaine qui controle 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 chaine ne doit pas occuper l'emplacement d'un caractere physique quelconque sur l'affichage, aussi elle devrait consister uniquement en sequences d'echappement du terminal. Elle est envoyee au terminal avant l'affichage du texte dans la zone active. Cette variable est remise a sa valeur par defaut chaque fois que le type de terminal change. La valeur par defaut est la chaine qui place le terminal en mode standout tel qu'obtenu a partir de la description terminfo du terminal. Cette valeur pourrait etre par exemple "\e[01;33m". active-region-end-color Une variable de chaine qui << annule >> les effets de active-region-start-color et retablit l'apparence << normale >> de l'affichage du terminal apres l'affichage de texte dans la zone active. Cette chaine ne doit pas occuper l'emplacement d'un caractere physique quelconque sur l'affichage, aussi elle devrait consister uniquement en sequences d'echappement du terminal. Elle est envoyee au terminal apres l'affichage du texte dans la zone active. Cette variable est remise a sa valeur par defaut chaque fois que le type de terminal change. La valeur par defaut est la chaine qui retablit le terminal a partir du mode standout tel qu'obtenu a partir de la description terminfo du terminal. Cette valeur pourrait etre par exemple "\e[0m". bell-style (audible) Cette variable commande readline lorsqu'il faut declencher l'alarme du terminal. Si configuree a none, readline n'emet jamais d'alarme. Si configuree a visible, readline utilise une alarme visuelle s'il y en a une disponible. Si configuree a audible, readline essaie de faire sonner l'alarme du terminal. bind-tty-special-chars (On) Si configuree a On, readline tente d'associer les caracteres de controle traites specialement par le pilote de terminal du noyau a leurs equivalents readline. blink-matching-paren (Off) Si configuree a On, readline tente de deplacer brievement le curseur vers une parenthese ouvrante lors de l'insertion d'une parenthese fermante. colored-completion-prefix (Off) Si configuree a On, lors du listage des completements, readline affiche le prefixe commun du jeu des completements possibles en utilisant une couleur differente. Les definitions de couleur sont prises selon la valeur de la variable d'environnement LS_COLORS. S'il y a une definition de couleur dans $LS_COLORS pour le suffixe personnalise << readline-colored-completion-prefix >>, readline utilise cette couleur pour le suffixe commun plutot que la valeur par defaut. colored-stats (Off) Si configuree a On, readline affiche les completements possibles en utilisant des couleurs differentes pour indiquer leur type de fichier. Les definitions de couleur sont prises dans la valeur de la variable d'environnement LS_COLORS. comment-begin (<< # >>) Cette chaine est inseree quand la commande readline insert-comment est executee. Cette commande est associee a M-# en mode Emacs et a # en mode de commande vi. completion-display-width (-1) Le nombre de colonnes d'ecran utilisees pour afficher de possibles correspondances lors de la realisation du completement. La valeur est ignoree si elle est inferieure a 0 ou superieure a la largeur de l'ecran du terminal. Une valeur de 0 fera que les correspondances seront affichees une par ligne. La valeur par defaut est -1. completion-ignore-case (Off) Si configuree a On, readline effectue les correspondances et completements de noms de fichiers sans tenir compte de la casse. completion-map-case (Off) Si configuree a On et completion-ignore-case activee, readline traite les traits d'union (-) et les tirets bas (_) comme equivalents lorsqu'elle realise une recherche de correspondance et un completement de nom de fichier insensibles a la casse. completion-prefix-display-length (0) La longueur, en caracteres, du prefixe commun d'une liste de completements possibles affiche sans modification. Si configuree en valeur positive, les prefixes communs plus longs que cette valeur sont remplaces par une ellipse lors de l'affichage des completements possibles. completion-query-items (100) Cela determine quand l'utilisateur est interroge pour voir le nombre de completements possibles produits par la commande possible-completions. Elle peut etre configuree a toute valeur entiere positive. Si le nombre de completements possibles est superieur ou egal a la valeur de cette variable, readline demandera a l'utilisateur s'il veut ou non les voir ; sinon, ils sont simplement affiches sur le terminal. Une valeur zero signifie que readline ne demandera jamais ; des valeurs negatives sont traitees comme un zero. convert-meta (On) Si configuree a On, readline transformera les caracteres avec leur huitieme bit regle a une suite de caracteres ASCII en supprimant le huitieme bit et en prefixant un caractere de protection (en fait, en utilisant le caractere de protection comme prefixe meta). La configuration par defaut est On, mais readline la fixe a Off si le parametre linguistique regional contient des caracteres 8 bits. Cette variable depend du parametre linguistique regional LC_CTYPE et peut etre modifiee si le parametre linguistique regional est change. disable-completion (Off) Si configuree a On, readline empechera le completement des mots. Les caracteres de completement seront inseres sur la ligne comme s'ils avaient ete associes a self-insert. echo-control-characters (On) Si configuree a On, sur les systemes d'exploitation le permettant, readline affiche un caractere correspondant a un signal provenant du clavier. editing-mode (emacs) Commande si readline doit demarrer avec des raccourcis clavier similaires a Emacs ou a vi. editing-mode peut etre positionne soit a emacs, soit a vi. emacs-mode-string (@) Si la variable show-mode-in-prompt est activee, cette chaine est affichee immediatement avant la derniere ligne de la premiere invite quand le mode edition d'Emacs est active. La valeur est developpee comme un raccourci clavier, donc le jeu standard de prefixes meta- ou Control- et de sequences de protections par contre-oblique est disponible. Utiliser les caracteres de protection \1 et \2 pour ouvrir et fermer les sequences de caracteres non imprimables, ce qui peut etre utilise pour inclure une suite de caracteres de controle du terminal dans la chaine de mode. enable-active-region (On) Le curseur (<< point >>) correspond a la position actuelle du curseur et la marque correspond a une position de curseur sauvegardee. Le texte entre le curseur et la marque est designe comme la zone. Quand cette variable est reglee a On, readline permet a certaines commandes de designer la zone comme active. Quand la zone est active, readline surligne le texte en utilisant la valeur de active-region-start-color qui est par defaut la chaine qui active le mode standout du terminal. La region active montre le texte insere par collage special (bracketed-paste) et tout texte correspondant trouve lors de recherches incrementales et non-incrementales dans l'historique. enable-bracketed-paste (On) Quand configuree a On, readline configurera le terminal pour pouvoir inserer chaque collage dans le tampon d'edition comme une chaine de caracteres uniques, plutot que de traiter chaque caractere comme s'il avait ete lu du clavier. Cela empeche readline d'executer toute commande d'edition liee a des suites de touches apparaissant dans le texte colle. enable-keypad (Off) Quand configuree a On, readline essayera d'activer le pave numerique de l'application une fois appelee. Sur certains systemes, c'est necessaire pour utiliser les fleches. enable-meta-key (On) Quand configuree a On, readline essayera d'activer toutes les touches de modificateur Meta que le terminal peut prendre en charge une fois appele. Sur de nombreux terminaux, la touche Meta est utilisee pour saisir des caracteres sur huit bits. expand-tilde (Off) Si configuree a On, le developpement du tilde est effectue lorsque readline tente un completement de commandes. history-preserve-point (Off) Si configuree a On, le programme d'historique tente de placer le curseur au meme endroit sur chaque ligne d'historique recuperee avec previous-history ou next-history. history-size (unset) Configure le nombre maximal d'elements sauvegardes dans la file de l'historique. Si configure a zero, tous les elements sont effaces et aucun nouvel element n'est sauvegarde. Si configure a une valeur strictement negative, le nombre d'elements de la file d'historique n'est pas limite. Par defaut, le nombre d'elements est configure a la valeur de la variable HISTSIZE de l'interpreteur. En cas de tentative de regler history-size a une valeur non numerique, le nombre maximal d'elements est configure a 5OO. horizontal-scroll-mode (Off) Quand configuree a On, readline utilisera une seule ligne d'affichage et fera defiler la saisie horizontalement sur une seule ligne d'ecran quand elle devient plus longue que la largeur de l'ecran, plutot que de faire un retour a la ligne. Ce reglage est active automatiquement pour les terminaux de hauteur 1. input-meta (Off) Si configuree a On, readline acceptera des saisies sur huit bits (autrement dit il ne supprimera pas le huitieme bit), quel que soit le terminal utilise. Le nom meta-flag est un synonyme pour cette variable. La configuration par defaut est Off, mais readline la fixe a On si le parametre linguistique regional contient des caracteres 8 bits. Cette variable depend du parametre linguistique regional LC_CTYPE et peut etre modifiee si le parametre linguistique regional est change. isearch-terminators (<< C-[C-J >>) La chaine de caracteres qui doit terminer une recherche incrementale sans que le caractere ne soit execute comme une commande. Si cette variable n'a pas recu de valeur, les caracteres ESC et C-J termineront une recherche incrementale. 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 equivalent a vi-command ; emacs est equivalent a emacs-standard. La valeur par defaut est emacs ; la valeur de editing-mode modifie aussi le jeu de raccourcis par defaut. keyseq-timeout (500) Indique le temps que readline attendra un caractere lors de la lecture d'une suite de touches ambigue (c'est-a-dire qui peut former une suite de touches complete en utilisant l'entree lue jusqu'a present, ou accepter une entree supplementaire pour completer une suite de touches plus longue). Si aucune entree n'est recue pendant le temps d'attente, readline utilisera la suite la plus courte, mais complete. La valeur est indiquee en milliseconde, donc une valeur de 1000 signifie que readline attendra pendant une seconde une entree supplementaire. Si cette variable est configuree a une valeur inferieure ou egale a zero, ou a une valeur non numerique, readline attendra la saisie d'une autre touche pour decider de la suite de touches a completer. mark-directories (On) Si configuree a On, une barre oblique est ajoutee aux noms de repertoires. mark-modified-lines (Off) Si configuree a On, les lignes d'historique qui ont ete modifiees seront precedees a l'affichage d'un asterisque (*). mark-symlinked-directories (Off) Si configuree a On, une barre oblique est ajoutee aux noms completes si ce sont des liens symboliques vers des repertoires (selon la valeur de mark-directories). match-hidden-files (On) Cette variable, quand elle est configuree a On, conduit readline a faire correspondre des fichiers dont le nom commence par un << . >> (fichiers caches) lors du completement de noms de fichiers. Si configuree a Off, le << . >> du debut doit etre fourni par l'utilisateur dans le nom de fichier a completer. menu-complete-display-prefix (Off) Si configuree a On, le completement de menu affiche le prefixe commun a la liste de completements possibles (qui peut etre vide) avant de tourner dans la liste. output-meta (Off) Si configuree a On, readline affichera directement les caracteres ayant leur huitieme bit defini plutot que d'utiliser une suite de caracteres de protection avec prefixe meta. La configuration par defaut est Off, mais readline la fixe a On si le parametre linguistique regional contient des caracteres 8 bits. Cette variable depend du parametre linguistique regional LC_CTYPE et peut etre modifiee si le parametre linguistique regional est change. page-completions (On) Si configuree a On, readline utilise un afficheur de texte interne du type more pour afficher les completements possibles sur un seul plein ecran. print-completions-horizontally (Off) Si configuree a On, readline affichera les completements correspondants tries horizontalement dans l'ordre alphabetique plutot que verticalement. revert-all-at-newline (Off) Si configuree a On, readline annulera toutes les modifications des lignes d'historique avant de s'arreter quand accept-line est execute. Par defaut les lignes d'historique peuvent etre modifiees et conservent les listes d'annulation individuelles au fur et a mesure des appels a readline. show-all-if-ambiguous (Off) Cela modifie le comportement par defaut des fonctions de completement. Si configuree a On, les mots qui ont plus d'un completement possibles conduisent a l'affichage immediat des correspondances plutot qu'a l'emission d'une alarme. show-all-if-unmodified (Off) Cela modifie le comportement par defaut des fonctions de completement de facon similaire a show-all-if-ambiguous. Si configuree a On, les mots qui ont plus d'un completement possible sans aucun completement partiel possible (les completements possibles ne partagent pas de prefixe commun) conduisent a l'affichage immediat des correspondances plutot qu'a l'emission d'une alarme. show-mode-in-prompt (Off) Si configuree a On, ajoute une chaine au debut de l'invite indiquant le mode d'edition : Emacs, commande Vi ou insertion Vi. L'utilisateur peut configurer la chaine de mode (par exemple, emacs-mode-string). skip-completed-text (Off) Si configuree a On, modifie le comportement par defaut du completement lors de l'insertion d'une unique correspondance dans la ligne. Elle n'est utilisee que lors d'un completement effectue au milieu d'un mot. Si elle est activee, readline n'insere pas de caracteres de completement correspondant a des caracteres situes apres le curseur dans le mot en train d'etre complete, ainsi les parties du mots situees apres le curseur ne sont pas dupliquees. vi-cmd-mode-string ((cmd)) Si la variable show-mode-in-prompt est activee, cette chaine est affichee immediatement avant la derniere ligne de la premiere invite quand le mode d'edition de vi est active et en mode commande. La valeur est developpee comme un raccourci clavier, donc le jeu standard de prefixes meta- ou Control- et de sequences de protections par contre-oblique est disponible. Utiliser les caracteres de protection \1 et \2 pour ouvrir et fermer les sequences de caracteres non imprimables, ce qui peut etre utilise pour inclure une suite de caracteres de controle du terminal dans la chaine de mode. vi-ins-mode-string ((ins)) Si la variable show-mode-in-prompt est activee, cette chaine est affichee immediatement avant la derniere ligne de la premiere invite quand le mode d'edition de vi est active et en mode insertion. La valeur est developpee comme un raccourci clavier, donc le jeu standard de prefixes meta- ou Control- et de sequences de protections par contre-oblique est disponible. Utiliser les caracteres de protection \1 et \2 pour ouvrir et fermer les sequences de caracteres non imprimables, ce qui peut etre utilise pour inclure une suite de caracteres de controle du terminal dans la chaine de mode. visible-stats (Off) Si configuree a On, un caractere indiquant le type de fichier, comme signale par stat(2) est ajoute aux noms de fichiers en affichant les completements possibles. Constructions conditionnelles de readline Readline implemente un mecanisme inspire des fonctionnalites de compilation conditionnelle du preprocesseur C qui permet d'effectuer le parametrage des raccourcis clavier et des variables selon les resultats de tests. Il y a quatre directives d'analyse utilisees. $if La structure $if permet de choisir les raccourcis selon le mode d'edition, le terminal utilise ou l'application utilisant readline. Le texte du test, apres n'importe quel operateur de comparaison, va jusqu'a la fin de la ligne ; sauf notation contraire, aucun caractere n'est necessaire pour le delimiter. mode La forme mode= de la directive $if est utilisee pour verifier si readline est en mode emacs ou vi. Cela peut etre utilise conjointement a la commande set keymap, par exemple pour ne configurer les raccourcis des jeux de raccourcis emacs-standard et emacs-ctlx que si readline demarre en mode emacs. term La forme term= peut etre utilisee pour ajouter des raccourcis clavier specifiques au terminal, comme associer des suites de touches produites par des touches de fonction du terminal. Le mot a droite du signe = est compare a la fois au nom complet du terminal et a la portion de nom du terminal qui precede le premier signe -. Cela permet, par exemple, de faire correspondre sun avec a la fois sun et sun-cmd. version Le test de version peut etre utilise pour effectuer des comparaisons avec des versions particulieres de readline. La version est developpee selon la version actuelle de readline. L'ensemble d'operateurs de comparaison inclut =, (et ==), !=, <=, >=, < et >. Le numero de version fourni a droite de l'operateur consiste en un numero de version majeure, un point decimal facultatif et un numero de version mineure facultatif (par exemple, 7.1). Si la version mineure est omise, on considere que c'est 0. L'operateur peut etre separe de la chaine version et de l'argument du numero de version par une espace. application La structure application est utilisee pour inclure des parametrages specifiques a chaque application. Chaque programme utilisant la bibliotheque readline configure un nom d'application et un fichier d'initialisation peut tester une valeur particuliere. Ce peut etre utilise pour associer des suites de touches a des fonctions utiles pour un certain programme. Par exemple, les commandes suivantes ajoutent une suite de touches qui protege le mot actuel ou precedant dans bash : $if Bash # Proteger le mot actuel ou le precedant "\C-xq": "\eb\"\ef\"" $endif variable La structure variable fournit des tests d'egalite simples pour les variables et les valeurs de readline. Les operateurs de comparaison permis sont =, ==, et !=. Le nom de la variable doit etre separe de l'operateur par une espace ; l'operateur peut etre separe de la valeur a droite par une espace. Les variables de chaine ainsi que les variables booleennes peuvent etre testees. Les variables booleennes doivent etre comparees aux valeurs on et off. $endif Cette commande, comme on l'a vu dans l'exemple ci-dessus, termine une commande $if. $else Permet d'ajouter des commandes qui seront executees si un $if echoue. $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 chaine donnee. Il y a deux modes de recherche : incremental et non incremental. Les recherches incrementales commencent avant meme que l'utilisateur n'ait termine de saisir la chaine recherchee. A chaque caractere saisi, readline affiche l'element suivant de l'historique qui correspond a la chaine deja entree. Une recherche incrementale necessite seulement le nombre de caracteres indispensable pour retrouver l'element d'historique desire. Les caracteres se trouvant dans la variable isearch-terminators servent a terminer une recherche incrementale. Si aucune valeur n'a ete affectee a cette variable, les caracteres Echappement (<< Escape >>) et Controle-J terminent une recherche incrementale. Controle-G permet d'interrompre une recherche incrementale et de restaurer la ligne originale. Lorsque la recherche est finie, l'element d'historique contenant la chaine desiree devient la ligne actuelle. Pour trouver les autres elements correspondant dans la file d'historique, saisissez selon Controle-S ou Controle-R. Cela recherchera en avant ou en arriere dans l'historique l'element suivant correspondant a la chaine saisie jusque-la. Toute autre suite de touches associee a une commande readline interrompra la recherche et executera la commande. Par exemple, un changement de ligne interrompra la recherche et acceptera la ligne, executant ainsi la commande de la file d'historique. Readline se souvient de la derniere chaine de recherche incrementale. Si deux Controle-R sont tapes sans caractere pour definir une nouvelle recherche de chaine, toute chaine memorisee sera utilisee. Les recherches non incrementales lisent la chaine desiree en entier avant de demarrer la recherche de correspondance dans la file d'historique. La chaine peut etre 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 associees par defaut. Les noms de commandes sans suite de touche les accompagnant ne sont pas associees par defaut. Dans les descriptions suivantes, le curseur (<< point >>) se rapporte a la position actuelle du curseur et la marque se rapporte a une position de curseur sauvegardee par la commande set-mark. Le texte entre le curseur et la marque est designe comme la zone. Commandes de deplacement beginning-of-line (C-a) Reculer au debut de la ligne actuelle. end-of-line (C-e) Avancer a la fin de la ligne. forward-char (C-f) Avancer d'un caractere. backward-char (C-b) Reculer d'un caractere. forward-word (M-f) Avancer jusqu'a la fin du mot suivant. Les mots sont composes de caracteres alphanumeriques (lettres et chiffres). backward-word (M-b) Reculer jusqu'au debut du mot actuel ou du precedent. Les mots sont composes de caracteres alphanumeriques (lettres et chiffres). shell-forward-word Avancer jusqu'a la fin du mot suivant. Les mots sont separes par des metacaracteres non proteges de l'interpreteur. shell-backward-word Reculer jusqu'au debut du mot actuel ou du precedent. Les mots sont separes par des metacaracteres non proteges de l'interpreteur. previous-screen-line Tenter de deplacer le curseur vers la meme colonne physique de l'ecran sur la ligne physique precedente de l'ecran. Cela n'aura pas l'effet desire si la ligne actuelle de readline n'accepte pas sur d'une ligne physique ou si le but n'est pas superieur a la longueur de l'invite plus la largeur de l'ecran. next-screen-line Tenter de deplacer le curseur vers la meme colonne de l'ecran physique sur la ligne suivante de l'ecran physique. Cela n'aura pas l'effet desire si la ligne actuelle de readline n'accepte pas plus d'une ligne physique ou si la longueur de la ligne actuelle de readline n'est pas superieure a la longueur de l'invite plus la largeur de l'ecran. clear-display (M-C-l) Effacer l'ecran et, si possible, le tampon de defilement du terminal, puis rafraichir la ligne actuelle, en laissant la ligne actuelle au sommet de l'ecran. clear-screen (C-l) Effacer l'ecran, puis rafraichir la ligne actuelle, en laissant la ligne actuelle au sommet de l'ecran. S'il y a un argument, rafraichir la ligne actuelle sans effacer l'ecran. redraw-current-line Rafraichir 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 a la file d'historique, sous controle de la variable HISTCONTROL. Si cette ligne est une ligne d'historique modifiee, restaurer cette derniere. previous-history (C-p) Recuperer la commande precedente de la file d'historique, en remontant dans la file. next-history (C-n) Recuperer la commande suivante dans la file d'historique, en descendant dans la file. beginning-of-history (M-<) Recuperer la premiere ligne de l'historique. end-of-history (M->) Retourner a la fin de l'historique de saisie, c'est-a-dire a la ligne en cours de saisie. operate-and-get-next (C-o) Valider la ligne actuelle pour execution et recuperer de l'historique la ligne suivante liee a la ligne actuelle pour edition. Si un argument numerique est fourni, il specifie l'entree de l'historique a utiliser a la place de la ligne actuelle. fetch-history Avec argument numerique, recuperer cette entree de la file d'historique et en faire la ligne actuelle. Sans argument, revenir a la premiere entree de la file d'historique.' reverse-search-history (C-r) Rechercher en arriere dans l'historique, en remontant. C'est une recherche incrementale. forward-search-history (C-s) Rechercher en avant dans l'historique, en descendant. C'est une recherche incrementale. non-incremental-reverse-search-history (M-p) Rechercher une chaine en arriere dans l'historique, en remontant depuis la ligne actuelle, utiliser une recherche non incrementale pour une chaine fournie par l'utilisateur. non-incremental-forward-search-history (M-n) Rechercher une chaine en avant dans l'historique, utiliser une recherche non incrementale pour une chaine fournie par l'utilisateur. history-search-forward Rechercher en avant dans l'historique la chaine comprise entre le debut de la ligne actuelle et la position du curseur. C'est une recherche non incrementale. history-search-backward Rechercher en arriere dans l'historique la chaine comprise entre le debut de la ligne actuelle et la position du curseur. C'est une recherche non incrementale. history-substring-search-backward Rechercher en arriere dans l'historique la chaine comprise entre le debut de la ligne actuelle et la position du curseur. La chaine recherchee peut trouver une correspondance n'importe ou dans une ligne de l'historique. C'est une recherche non incrementale. history-substring-search-forward Rechercher en avant dans l'historique la chaine comprise entre le debut de la ligne actuelle et la position du curseur. La chaine recherchee peut trouver une correspondance n'importe ou dans une ligne de l'historique. C'est une recherche non incrementale. yank-nth-arg (M-C-y) Inserer, a l'emplacement du curseur, le premier argument de la commande precedente. Generalement, il s'agit du second mot de la ligne precedente. Avec un argument n, inserer le n-ieme mot de la commande precedente (les mots sont numerotes a partir de 0). Un argument negatif insere le n-ieme mot en partant de la fin de la commande precedente. Une fois que l'argument n est traite, l'argument est extrait comme si le developpement d'historique << !n >> avait ete indique. yank-last-arg (M-., M-_) Inserer le dernier argument de la commande precedente (le dernier mot de l'element precedent de la file d'historique). Avec un argument numerique, se comporte exactement comme yank-nth-arg. Les appels successifs a yank-last-arg remontent dans la file d'historique en inserant le dernier mot (ou le mot indique par l'argument du premier appel) de chaque ligne tour a tour. Tous les arguments numeriques fournis a ces appels successifs determinent la direction de deplacement dans l'historique. Un argument negatif modifie la direction dans l'historique (en avant ou en arriere). Les outils de developpement d'historique sont utilises pour extraire le dernier mot, comme si le developpement d'historique << !$ >> avait ete indique. shell-expand-line (M-C-e) Developper, comme le fait l'interpreteur, la ligne actuelle. Cela effectue le developpement des alias et d'historique, ainsi que tous les developpements de mot de l'interpreteur. Consultez ci-dessous DEVELOPPEMENT DE L'HISTORIQUE, pour une description detaillee du developpement de l'historique. history-expand-line (M-^) Effectuer le developpement d'historique sur la ligne actuelle. Consultez ci-dessous DEVELOPPEMENT DE L'HISTORIQUE, pour une description detaillee. magic-space Effectuer le developpement de l'historique sur la ligne actuelle et inserer une espace. Consultez ci-dessous DEVELOPPEMENT DE L'HISTORIQUE, pour une description detaillee. alias-expand-line Effectuer le developpement des alias sur la ligne actuelle. Consultez ALIAS ci-dessus pour une description des developpements d'alias. history-and-alias-expand-line Effectuer le developpement 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 editeur sur la ligne de commande actuelle et executer le resultat comme une commande d'interpreteur. Bash tente d'appeler, dans cet ordre, $VISUAL, $EDITOR et emacs comme editeur. Commande d'edition de texte end-of-file (generalement C-d) Le caractere indiquant la fin de fichier, comme defini, par exemple, par ``stty''. Si ce caractere est lu alors qu'aucun caractere n'est sur la ligne, et que le curseur est au debut de la ligne, readline l'interprete comme le fin de l'entree et renvoie EOF. delete-char (C-d) Effacer le caractere sous le curseur. Si cette fonction est associee au meme caractere que le caractere EOF du terminal, comme c'est souvent le cas avec C-d, consultez les effets dans le paragraphe precedent. backward-delete-char (Effacement ou << Rubout >>) Effacer le caractere avant le curseur. Lorsque un argument numerique est indique, le texte efface est sauvegarde dans le tampon circulaire. forward-backward-delete-char Effacer le caractere sous le curseur, sauf s'il est en fin de ligne, auquel cas le caractere avant le curseur est efface. quoted-insert (C-q, C-v) Ajouter litteralement sur la ligne le caractere saisi suivant. Cela permet d'inserer des caracteres comme C-q, par exemple. tab-insert (C-v TAB) Inserer un caractere de tabulation. self-insert (a, b, A, 1, !, ...) Inserer le caractere mentionne. transpose-chars (C-t) Echanger les caracteres se trouvant devant et sous le curseur. Le curseur est avance d'un caractere. A la fin d'une ligne, les caracteres echanges sont les deux precedents. Les arguments negatifs n'ont aucun effet. transpose-words (M-t) Deplace le mot avant le curseur au-dela du mot apres le curseur et deplace aussi le curseur sur ce mot. Si le curseur est a la fin de la ligne, cela echange les deux derniers mots de la ligne. upcase-word (M-u) Transformer le mot actuel (ou le suivant) en majuscules. Avec un argument negatif, agir sur le mot precedent mais ne pas deplacer le curseur. downcase-word (M-l) Transformer le mot actuel (ou le suivant) en minuscules. Avec un argument negatif, agir sur le mot precedent mais ne pas deplacer le curseur. capitalize-word (M-c) Passer en majuscule l'initiale du mot actuel (ou du suivant). Avec un argument negatif, agir sur le mot precedent mais ne pas deplacer le curseur. overwrite-mode Basculer en mode d'ecrasement. Avec un argument numerique explicite strictement positif, bascule en mode d'ecrasement. Avec un argument numerique explicite negatif ou nul, bascule en mode d'insertion. Cette commande n'affecte que le mode emacs ; le mode vi ecrase de facon differente. Chaque appel a readline() demarre en mode d'insertion. En mode d'ecrasement, les caracteres associes a self-insert remplacent le texte sous le curseur plutot que de deplacer le texte vers la droite. Les caracteres associes a backward-delete-char remplacent le caractere avant le curseur par une espace. Par defaut, cette commande n'est pas associee. Effacement et recuperation kill-line (C-k) Effacer le texte depuis la position du curseur jusqu'a la fin de la ligne. backward-kill-line (C-x Effacement) Effacer en arriere jusqu'au debut de ligne. unix-line-discard (C-u) Effacer le texte entre le debut de la ligne et la position du curseur. Le texte est sauvegarde dans le tampon circulaire. kill-whole-line Effacer toute la ligne sans tenir compte de la position du curseur. kill-word (M-d) Effacer le texte entre le curseur et la fin du mot actuel ou, si entre des mots, jusqu'a la fin du mot suivant. Les limites des mots sont identiques a celles utilisees par forward-word. backward-kill-word (M-Effacement) Effacer le mot sous le curseur. Les limites de mots sont identiques a celles utilisees par backward-word. shell-kill-word Effacer le texte entre le curseur et la fin du mot actuel ou, si entre des mots, jusqu'a la fin du mot suivant. Les limites des mots sont identiques a celles utilisees par shell-forward-word. shell-backward-kill-word Effacer le mot sous le curseur. Les limites de mots sont identiques a celles utilisees 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 efface est sauvegarde dans le tampon 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 supprime est sauvegarde 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 precedant le curseur dans le tampon circulaire. Les limites de mots sont identiques a celles de backward-word. copy-forward-word Copier le mot suivant le curseur dans le tampon circulaire. Les limites de mots sont identiques a celles de forward-word. yank (C-y) Recuperer le texte au sommet du tampon circulaire a la position du curseur dans le tampon. yank-pop (M-y) Executer une rotation du tampon circulaire et recuperer le texte situe a son nouveau sommet. Cela ne fonctionne qu'apres yank ou yank-pop. Arguments numeriques digit-argument (M-0, M-1, ..., M--) Ajouter ce chiffre a l'argument en cours de redaction ou creer un nouvel argument. M-- cree un argument negatif. universal-argument Il s'agit d'une autre facon d'indiquer un argument. Si cette commande est suivie d'un ou plusieurs chiffres facultativement precedes d'un signe moins, ces chiffres definissent l'argument. Si la commande est suivie de chiffres, une nouvelle execution de universal-argument termine l'argument numerique, mais est ignoree dans les autres cas. Par exception, si cette commande est suivie immediatement par un caractere qui n'est ni un chiffre ni le signe moins, le compteur d'arguments de la commande suivante est multiplie par 4. Le compteur d'arguments est initialement a un, donc la premiere execution de cette commande amene le compteur d'arguments a quatre, une seconde fois porte le compteur d'arguments a seize et ainsi de suite. Completement complete (TAB) Essayer d'effectuer un completement du texte situe avant le curseur. Bash effectue le completement en considerant tour a tour le texte comme une variable (s'il commence par $), un nom d'utilisateur (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 completement de nom de fichier est essaye. possible-completions (M-?) Afficher les completements possibles pour le texte situe avant le curseur. insert-completions (M-*) Inserer avant le curseur l'ensemble des completements qui auraient ete produits par possible-completions. menu-complete Analogue a complete, mais en remplacant le mot a completer par une seule correspondance de la liste des completements possibles. Des executions repetees de menu-complete parcourent la liste des completements possibles, en inserant chaque correspondance tour a tour. A la fin de la liste des completements, une alarme est emise (selon la configuration de bell-style) et le texte original est restaure. Un argument de n deplace de n positions dans la liste des correspondances. Un argument negatif peut etre utilise pour revenir en arriere dans la liste. Cette commande est destinee a etre associee a la touche TAB, mais ne l'est pas par defaut. menu-complete-backward Identique a menu-complete, mais se deplace en arriere dans la liste des completements possibles, comme si un argument negatif avait ete passe a menu-complete. Cette commande n'est associee a aucune touche par defaut. delete-char-or-list Effacer le caractere sous le curseur sauf au debut ou en fin de ligne (comme delete-char). En fin de ligne, se comporte comme possible-completions. Cette commande n'est associee a aucune touche par defaut. complete-filename (M-/) Essayer le completement des noms de fichiers sur le texte situe avant le curseur. possible-filename-completions (C-x /) Afficher les completements possibles du texte situe avant le curseur, traite comme un nom de fichier. complete-username (M-~) Essayer le completement sur le texte situe avant le curseur, en le traitant comme un nom d'utilisateur. possible-username-completions (C-x ~) Afficher les completements possibles du texte situe avant le curseur, en le traitant comme un nom d'utilisateur. complete-variable (M-$) Essayer le completement sur le texte situe avant le curseur, en le traitant comme une variable de l'interpreteur. possible-variable-completions (C-x $) Afficher les completements possibles du texte situe avant le curseur, en le traitant comme une variable de l'interpreteur. complete-hostname (M-@) Essayer le completement sur le texte situe avant le curseur, en le traitant comme un nom de machine. possible-hostname-completions (C-x @) Afficher les completements possibles du texte situe avant le curseur, en le traitant comme un nom de machine. complete-command (M-!) Essayer le completement sur le texte situe avant le curseur, en le traitant comme un nom de commande. Le completement des commandes essaie de faire correspondre le texte, dans cet ordre, aux alias, mots reserves, fonctions de l'interpreteur, commandes internes de l'interpreteur et finalement les noms de fichiers executables. possible-command-completions (C-x !) Afficher les completements possibles du texte situe avant le curseur, en le traitant comme un nom de commande. dynamic-complete-history (M-TAB) Essayer le completement du texte situe avant le curseur, en le comparant aux lignes de la file d'historique lui correspondant pour les completements possibles. dabbrev-expand Essayer le menu de completement du texte situe avant le curseur, en le comparant aux lignes de la file d'historique lui correspondant pour les completements possibles. complete-into-braces (M-{) Effectuer un completement en noms de fichiers et inserer la liste des completements possibles entre accolades afin que la liste soit exploitable par l'interpreteur (consultez Developpement des accolades ci-dessus). Macros clavier start-kbd-macro (C-x () Demarrer la memorisation dans la macro en cours des caracteres tapes. end-kbd-macro (C-x )) Arreter la memorisation dans la macro en cours des caracteres saisis et conserver la definition. call-last-kbd-macro (C-x e) Reexecuter la derniere macro definie, en agissant comme si les caracteres contenus dans cette macro etaient saisis au clavier. print-last-kbd-macro () Afficher la derniere macro de clavier definie, mise en forme de facon a etre incorporee 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'edition en cours et emettre une alarme de terminal (selon la configuration de la variable bell-style). do-lowercase-version (M-A, M-B, M-x, ...) Si le caractere x precede de Meta est en majuscule, executer la commande qui est associee aux caracteres minuscules correspondants. Le comportement est non defini si x est deja en minuscule. prefix-meta (ESC) Considerer le prochain caractere saisi comme un Meta. ESC f est equivalent a Meta-f. undo (C-_, C-x C-u) Fonction d'annulation incrementale, chaque ligne etant memorisee separement. revert-line (M-r) Annuler toutes les modifications sur cette ligne. C'est equivalent a repeter undo suffisamment de fois pour ramener la ligne a son etat initial. tilde-expand (M-&) Effectuer le developpement du tilde sur le mot actuel. set-mark (C-@, M-) Placer la marque a la position actuelle du curseur. Si un argument numerique est fourni, la marque est posee a la position correspondante. exchange-point-and-mark (C-x C-x) Echanger le curseur et la marque. La position actuelle du curseur est configuree a la position sauvegardee precedemment et l'ancienne position du curseur est memorisee comme la marque. character-search (C-]) Un caractere est lu et le curseur deplace a l'occurrence suivante de ce caractere. Un argument negatif recherche les occurrences precedentes. character-search-backward (M-C-]) Un caractere est lu et le curseur deplace a l'occurrence precedente de ce caractere. Un argument negatif recherche les occurrences suivantes. skip-csi-sequence Lire suffisamment de caracteres pour englober une suite multitouche comme celles definies pour des touches comme Debut et Fin. De telles suites commencent par un indicateur de suite de controle (<< control sequence indicator >> ou CSI), habituellement ESC-[. Si cette suite est associee a "\[", les touches qui produisent de telles suites n'auront pas d'effet a moins d'etre explicitement associees a une commande readline, au lieu d'inserer des caracteres parasites dans le tampon d'edition. N'est associee a aucune touche par defaut, mais est souvent associee a ESC-[. insert-comment (M-#) Sans argument numerique, la valeur de la variable comment-begin de readline est inseree au debut de la ligne actuelle. Si un argument numerique est fourni, cette commande agit comme une bascule : si les caracteres du debut de ligne ne correspondent pas a la valeur de comment-begin, la valeur est inseree, sinon, les caracteres de comment-begin sont effaces du debut de la ligne. Dans les deux cas, la ligne est acceptee comme si un changement de ligne avait ete saisi. La valeur par defaut de comment-begin conduit cette commande a transformer la ligne actuelle de l'interpreteur en commentaire. Si un argument numerique conduit a l'effacement du caractere de commentaire, la ligne sera executee par l'interpreteur. spell-correct-word (C-x s) Effectuer la correction orthographique sur le mot actuel, en le traitant comme un repertoire ou un nom de fichier, de la meme maniere que l'option de l'interpreteur cdspell. Les limites des mots sont identiques a celles utilisees par shell-forward-word. glob-complete-word (M-g) Le mot avant le curseur est traite comme un motif pour un developpement de chemin, avec un asterisque implicitement ajoute. Ce motif est utilise pour produire une liste de noms de fichiers correspondants pour de possibles completements. glob-expand-word (C-x *) Le mot precedant le curseur est considere comme un motif de developpement de chemin et la liste des fichiers correspondants est inseree a sa place. Si un argument numerique est fourni, un asterisque est ajoute avant le developpement du chemin. glob-list-expansions (C-x g) La liste des developpements qui auraient ete produits par glob-expand-word est affichee et la ligne est rafraichie. Si un argument numerique est fourni, un asterisque est ajoute devant le developpement du chemin. dump-functions Afficher toutes les fonctions et leurs raccourcis clavier sur le flux de sortie de readline. Si un argument numerique est fourni, la sortie est mise en forme de facon a etre incorporee dans un fichier inputrc. dump-variables Afficher toutes les variables readline modifiables et leurs valeurs sur le flux de sortie de readline. Si un argument numerique est fourni, la sortie est mise en forme de facon a etre incorporee dans un fichier inputrc. dump-macros Afficher toutes les suites de touches readline associees a des macros et les chaines auxquelles elles correspondent. Si un argument numerique est fourni, la sortie est mise en forme de facon a etre incorporee dans un fichier inputrc. display-shell-version (C-x C-v) Afficher des informations sur la version actuelle de bash. Completement programmable Lorsqu'un completement de mot est tente pour un argument d'une commande pour laquelle une specification de completement a ete definie en utilisant la commande interne complete (consultez COMMANDES INTERNES DE L'INTERPRETEUR ci-dessous), les outils de completement programmables sont appeles. En premier lieu, le nom de la commande est identifie. Si le mot de commande est vide (completement essaye en debut de ligne vide), toutes les specifications de completement definies par l'option -E de complete sont utilisees. Si une specification de completement a ete definie pour cette commande, elle est utilisee pour produire la liste des completements possibles pour le mot. Si le mot de commande est un chemin d'acces complet, on cherche en premier lieu une specification de completement pour le chemin d'acces complet. Si aucune specification de completement n'est trouvee pour le chemin d'acces complet, une tentative est effectuee pour trouver une specification de completement pour la partie situee apres la barre oblique finale. Si ces recherches ne donnent aucun resultat sous forme de specification de completement, toutes les specifications de completement definies par l'option -D de complete sont utilisees par defaut. S'il n'existe pas de specification de completement par defaut, bash tente un developpement d'alias sur le mot de commande en dernier ressort et tente de trouver une specification de completement pour le mot de commande a partir de n'importe quel developpement ayant reussi. Une fois qu'une specification de completement a ete trouvee, elle est utilisee pour produire la liste des mots correspondants. Si aucune specification de completement n'est trouvee, le completement par defaut de bash, tel que decrit ci-dessus dans Completement est effectue. Tout d'abord, les actions definies par la specification de completement sont utilisees. Seules les correspondances prefixees par le mot a completer sont renvoyees. Lorsque l'option -f ou -d sont utilisees pour le completement des noms de fichier ou de repertoire, la variable d'interpreteur FIGNORE est utilisee pour filtrer les correspondances. Tous les completements indiques par le motif de developpement de chemin de l'option -G sont ensuite produits. Il n'est pas necessaire que les mots produits par le motif correspondent au mot a completer. La variable de l'interpreteur GLOBIGNORE n'est pas utilisee pour filtrer les correspondances, mais la variable FIGNORE est utilisee. Ensuite, la chaine indiquee comme argument a l'option -W est prise en compte. Cette chaine est tout d'abord decoupee en utilisant les caracteres de la variable speciale IFS comme delimiteurs. Les protections de l'interpreteur sont prises en compte. Chaque mot est ensuite developpe en utilisant les developpements d'accolades, du tilde, des parametres et des variables, de meme que la substitution de commande et le developpement arithmetique comme decrit ci-dessus dans DEVELOPPEMENTS. Les resultats sont decoupes en utilisant les regles decrites ci-dessus dans Decoupage en mots. Les resultats du developpement sont compares au mot a completer en considerant ce dernier comme prefixe et les mots correspondants deviennent les completements possibles. Apres la creation de ces correspondances, toute fonction de l'interpreteur ou commande indiquee avec les options -F et -C est appelee. Lorsque la commande ou la fonction est appelee, les variables COMP_LINE, COMP_POINT, COMP_LINKEY, et COMP_POINTYPE se voient affectees de valeurs comme decrit ci-dessus dans Variables de l'interpreteur. Si une fonction de l'interpreteur est appelee, les variables COMP_WORDS et COMP_CWORD sont egalement creees. Lorsqu'une fonction ou une commande est appelee, le premier argument ($1) est le nom de la commande dont les arguments doivent etre completes, le deuxieme argument ($2) est le mot a completer et le troisieme argument ($3) est le mot precedant celui devant etre complete sur la ligne de commande actuelle. Aucun filtrage des completements produits pour le mot a completer n'est effectue ; la fonction ou la commande a toute liberte dans la production des correspondances. Toute fonction indiquee avec -F est appelee en premier. La fonction peut utiliser tous les outils de l'interpreteur, incluant la commande interne compgen decrite ci-dessous, pour produire les correspondances. Elle doit mettre les completements possibles dans la variable tableau COMPREPLY, un par element de tableau. Ensuite, toute commande indiquee avec l'option -C est appelee dans un environnement equivalent a la substitution de commande. Elle devrait afficher une liste des completements possibles, un par ligne, sur la sortie standard. Si necessaire, une contre-oblique peut etre utilisee pour proteger un caractere de changement de ligne. Apres la creation de tous les completements possibles, tout filtre, indique avec l'option -X, est applique a la liste. Ce filtre est un motif comme dans le developpement des chemins ; un & dans le motif est remplace par le texte du mot en cours de completement. Un & litteral peut etre protege par une contre-oblique ; la contre-oblique est supprimee avant la tentative de mise en correspondance. Tout completement qui correspond au motif sera supprime de la liste. Un ! au debut du motif provoque la negation de ce motif ; dans ce cas, tout completement ne correspondant pas au motif sera supprime de la liste. Si l'option d'interpreteur nocasematch est activee, la mise en correspondance est effectuee sans tenir compte de la casse des caracteres alphabetiques. Finalement, tous prefixe et suffixe indiques avec les options -P et -S sont ajoutes a chacun des elements de la liste de completement et le resultat est renvoye au programme de completement de readline comme etant la liste des completements possibles. Si les operations precedemment appliquees ne produisent aucune correspondance et si l'option -o dirnames a ete fournie a complete lorsque la specification de completement a ete definie, le completement des noms de repertoire est tente. Si l'option -o plusdirs a ete fournie a complete lors de la definition de la specification de completement, le completement des noms de repertoires est tente et toute correspondance est ajoutee aux resultats des autres actions. Par defaut, si une specification de completement est trouvee, tout ce qu'elle produit est renvoye au programme de completement comme un jeu complet des completements possibles. Les completements par defaut de bash ne sont pas tentes et le completement de fichiers par defaut de readline est desactive. Si l'option -o bashdefault a ete fournie a complete lors de la definition de la specification de completement, les completements par defaut de bash sont tentes si la specification de completement ne produit aucune correspondance. Si l'option -o default a ete fournie a complete lors de la definition de la specification de completement, le completement par defaut de readline sera effectue si la specification de completement (et, si tentes, les completements par defaut de bash) ne produit aucune correspondance. Lorsqu'une specification de completement indique qu'un completement de nom de repertoire est souhaite, les fonctions de completement programmable forcent readline a ajouter une barre oblique pour completer les noms qui sont des liens symboliques vers des repertoires, selon la valeur de la variable mark-directories de readline, independamment du parametrage de la variable mark-symlinked-directories de readline. La modification dynamique des completements est egalement possible. C'est particulierement utile combine avec un completement par defaut indique a l'aide de complete -D. Les fonctions de l'interpreteur executes comme gestionnaires de completement permettent d'annoncer que le completement devrait etre reessaye en renvoyant un etat final de 124. Si une fonction de l'interpreteur renvoie 124, et modifie la specification de completement associee a la commande sur laquelle le completement est essaye (fournie comme premier argument quand la fonction est executee), le completement programmable recommence depuis le debut, en essayant de trouver une nouvelle specification de completement pour cette commande. Un jeu de completements peut ainsi etre construit dynamiquement lorsque le completement est essaye, plutot que d'etre charge entierement au debut. Par exemple, en supposant l'existence d'une bibliotheque de specifications de completement, chacune conservee dans un fichier correspondant au nom de la commande, la fonction de completement par defaut suivante chargerait les completements de facon 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 activee, l'interpreteur donne acces a un historique des commandes, c'est-a-dire la liste des commandes precedemment utilisees. La valeur de la variable HISTSIZE est utilisee comme nombre de commandes a sauvegarder dans la file d'historique. Le texte des HISTSIZE dernieres commandes (par defaut 500) est sauvegarde. L'interpreteur conserve chaque commande dans la file d'historique avant le developpement des parametres et des variables (consultez DEVELOPPEMENTS ci-dessus) mais apres avoir effectue le developpement de l'historique, selon les valeurs des variables de l'interpreteur HISTIGNORE et HISTCONTROL. Au demarrage, l'historique est initialise avec le fichier dont le nom est contenu dans la variable HISTFILE (par defaut ~/.bash_history). Le fichier designe par la valeur de HISTFILE est tronque si necessaire, pour ne pas contenir plus de lignes que le nombre precise par HISTFILESIZE. Si HISTFILESIZE est detruite, ou definie a NULL, une valeur non numerique ou une valeur numerique strictement inferieure a zero, le fichier d'historique n'est pas tronque. Quand le fichier d'historique est lu, les lignes commencant par le caractere de commentaire d'historique suivi immediatement par un chiffre sont considerees comme des horodatages de la ligne d'historique precedente. Ces horodatages sont facultativement affiches en fonction de la valeur de la variable HISTTIMEFORMAT. Lorsqu'un interpreteur avec historique active se termine, les HISTSIZE dernieres lignes de la file d'historique sont copiees dans le fichier HISTFILE. Si l'option d'interpreteur histappend est activee (consultez la description de shopt dans COMMANDES INTERNES DE L'INTERPRETEUR ci-dessous), les lignes sont ajoutees au fichier d'historique, sinon le fichier est ecrase. Si HISTFILE est inexistante ou si le fichier d'historique n'est pas accessible en ecriture, l'historique n'est pas sauvegarde. Si la variable HISTTIMEFORMAT est configuree, les horodatages sont ecrits dans le fichier d'historique, reperes par le caractere de commentaire d'historique, afin d'etre conserves au fur et a mesure des sessions de l'interpreteur. Le caractere de commentaire d'historique est utilise pour distinguer l'horodatage des autres lignes de l'historique. Apres la sauvegarde de l'historique, le fichier d'historique est tronque pour ne pas contenir plus de HISTFILESIZE lignes. Si HISTFILESIZE est detruite, ou definie a NULL, une valeur non numerique ou une valeur numerique inferieure a zero, le fichier d'historique n'est pas tronque. La commande interne fc (consultez COMMANDES INTERNES DE L'INTERPRETEUR ci-dessous) permet d'afficher, d'editer ou de reexecuter 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'edition en ligne de commande, des commandes de recherche donnent acces a la file d'historique. L'interpreteur permet de configurer quelles commandes seront sauvegardees dans la file d'historique. Les variables HISTCONTROL et HISTIGNORE peuvent etre configurees pour conduire l'interpreteur a ne sauvegarder qu'un sous-ensemble des commandes saisies. L'option d'interpreteur cmdhist, si activee, conduit l'interpreteur a essayer de sauvegarder chaque ligne d'une commande multiligne dans le meme element de l'historique, en ajoutant des points-virgules si necessaire pour preserver l'exactitude de la syntaxe. L'option d'interpreteur lithist conduit l'interpreteur a sauvegarder les commandes avec des changements de ligne incorpores plutot que des points-virgules. Consultez ci-dessous la description de la commande interne shopt dans COMMANDES INTERNES DE L'INTERPRETEUR pour des details sur la creation et la destruction des options d'interpreteur. DEVELOPPEMENT DE L'HISTORIQUE L'interpreteur propose des possibilites de developpement de l'historique qui sont semblables a celles de csh. Ce paragraphe decrit quelles syntaxes sont disponibles. Cette fonctionnalite est activee par defaut dans les interpreteurs interactifs et peut etre desactivee en utilisant l'option +H de la commande interne set (consultez COMMANDES INTERNES DE L'INTERPRETEUR ci-dessous). Les interpreteurs non interactifs n'effectuent pas de developpement d'historique par defaut. Le developpement de l'historique permet d'inserer des mots de la file d'historique dans le flux de saisie, facilitant la repetition de commandes, l'insertion des arguments d'une ligne anterieure dans la saisie en cours ou la correction rapide d'erreurs dans les commandes precedentes. Le developpement de l'historique est effectue immediatement apres la lecture d'une ligne complete, avant que l'interpreteur ne la decompose en mots. Il est effectue sur chaque ligne individuellement sans prendre en compte une protection sur les lignes precedentes. Il se deroule en deux parties. La premiere consiste a determiner la ligne de la file d'historique a utiliser pour les substitutions, la seconde permet de selectionner les parties de la ligne a inclure dans la ligne actuelle. La ligne selectionnee dans l'historique est l'evenement et les parties de cette ligne a reutiliser sont des mots. Plusieurs modificateurs permettent de manipuler les mots selectionnes. La ligne est decoupee en mots de la meme facon que lors de la lecture d'une saisie, ainsi plusieurs mots separes par des metacaracteres et encadres par des guillemets sont consideres comme un unique mot. Le developpement de l'historique est introduit par l'apparition du caractere de developpement, qui est ! par defaut. Seules la contre-oblique (\) et les guillemets simples permettent de proteger le caractere de developpement de l'historique, mais le caractere de developpement de l'historique est aussi traite comme protege s'il precede immediatement le guillemet double fermant dans une chaine entre guillemets doubles. Plusieurs caracteres empechent le developpement de l'historique s'ils se trouvent immediatement apres le caractere de developpement de l'historique, meme s'il n'est pas protege : espace, tabulation, changement de ligne, retour chariot et =. Si l'option d'interpreteur extglob est activee, ( empechera aussi le developpement. Plusieurs options d'interpreteur, configurables avec la commande interne shopt, permettent d'ajuster le comportement du developpement de l'historique. Si l'option d'interpreteur histverify est activee (consultez la description de la commande interne shopt ci-dessous) et si readline est utilisee, les substitutions d'historique ne sont pas transmises tout de suite a l'analyseur de l'interpreteur. A la place, la ligne developpee est rechargee dans le tampon d'edition de readline pour permettre des modifications ulterieures. Si readline est utilisee et si l'option histreedit est activee, une substitution d'historique qui echoue est rechargee dans la memoire tampon de readline pour correction. L'option -p de la commande interne history peut servir a examiner ce qu'une substitution donnera avant de l'employer reellement. L'option -s de la commande interne history permet d'ajouter des commandes a la fin de la file d'historique sans les avoir effectivement executees, afin qu'elles soient disponibles pour des rappels ulterieurs. L'interpreteur offre le controle des divers caracteres utilises par le mecanisme de developpement de l'historique (consultez la description de histchars ci-dessus dans Variables de l'interpreteur). L'interpreteur utilise le caractere de commentaire d'historique pour reperer l'horodatage lors de l'ecriture du fichier d'historique. Indicateur d'evenement Un indicateur d'evenement est une reference a un element ligne de commande dans la file d'historique. Sauf s'il s'agit d'une reference absolue, les evenements sont relatifs a la position actuelle dans la file d'historique. ! Debute une substitution d'historique, sauf s'il est suivi par un blanc, changement de ligne, retour chariot, = ou ( (lorsque l'option d'interpreteur extglob est activee en utilisant la commande interne shopt). !n Se rapporte a la ligne de commande n. !-n Se rapporte a la commande actuelle moins n. !! Se rapporte a la commande precedente. C'est un synonyme de << !-1 >>. !chaine Se rapporte a la commande la plus recente precedant la position actuelle dans la file d'historique commencant par chaine. !?chaine[?] Se rapporte a la commande la plus recente precedant la position actuelle dans la file d'historique contenant chaine. Le ? final peut etre omis si chaine est immediatement suivie d'un changement de ligne. Si chaine est absente, la chaine de la derniere recherche est utilisee ; c'est une erreur s'il n'y a pas de chaine de recherche precedente. ^chaine_1^chaine_2^ Substitution rapide. Repeter la commande precedente en remplacant chaine_1 par chaine_2. Equivalent a << !!:s^chaine_1^chaine_2^ >> (consultez Modificateurs ci-dessous). !# La ligne entiere tapee jusqu'a present. Indicateurs de mots Ces indicateurs servent a selectionner les mots desires dans un evenement. Un : separe l'indicateur d'evenements de l'indicateur de mot. On peut l'omettre si l'indicateur de mot commence par ^, $, *, - ou %. Les mots sont numerotes depuis le debut de la ligne, le premier etant note 0 (zero). Les mots sont inseres dans la ligne actuelle, separes par des espaces. 0 (zero) Le zeroieme mot. Pour l'interpreteur, c'est le nom de la commande. n Le n-ieme mot. ^ Le premier argument, c'est-a-dire le mot 1. $ Le dernier mot. C'est generalement le dernier argument, mais qui sera developpe en zeroieme mot s'il n'y a qu'un seul mot sur la ligne. % Le premier mot correspondant a la recherche << ?chaine? >> la plus recente, si la chaine de recherche debute par un caractere qui fait partie d'un mot. x-y Un intervalle de mots, << -y >> permet d'abreger << 0-y >>. * Tous les mots sauf le zeroieme. C'est un synonyme pour << 1-$ >>. Il n'est pas errone d'utiliser * s'il n'y a qu'un mot dans l'evenement ; la chaine vide est renvoyee dans ce cas. x* Abreviation de x-$. x- Abreviation de x-$ comme x*, mais sans le dernier mot. Si x est absent, la valeur par defaut est 0. Si un indicateur de mot est fourni sans indication d'evenement, la derniere commande est utilisee. Modificateurs Apres un indicateur de mot facultatif, une suite d'un ou plusieurs des modificateurs suivants peut apparaitre, chacun precede par un << : >>. Cela modifie ou corrige le ou les mots selectionnes a partir de l'evenement de l'historique. h Eliminer la fin du chemin d'acces, en ne gardant que le debut. t Supprimer tout le debut d'un chemin d'acces, 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'executer. q Proteger les mots substitues, pour eviter des substitutions futures. x Proteger les mots substitues comme avec q, mais avec separation des mots aux blancs et changements de ligne. Les modificateurs q et x s'excluent mutuellement ; le dernier fourni est utilise. s/ancien/nouveau/ Remplacer par nouveau la premiere occurrence de ancien sur la ligne d'evenement. Tout caractere peut etre utilise comme delimiteur a la place de /. Le dernier delimiteur est facultatif si c'est le dernier caractere de la ligne d'evenement. Le delimiteur peut etre protege dans ancien et nouveau avec une seule contre-oblique. Si & apparait dans nouveau, il est remplace par ancien. Une seule contre-oblique protegera le &. Si ancien est NULL, il est configure au dernier ancien substitue ou si aucune substitution n'a eu lieu precedemment, a la derniere chaine dans une recherche !?chaine[?]. Si nouveau est NULL, chaque correspondance a ancien est supprimee. & Repeter la substitution precedente. g Appliquer les modifications sur toute la ligne d'evenements. C'est utilise conjointement a << :s >> (par exemple << :gs/ancien/nouveau/ >>) ou << :& >>. Si utilise avec << :s >>, tout delimiteur peut etre utilise a la place de / et le dernier delimiteur est facultatif si c'est le dernier caractere de la ligne d'evenements. Un a peut etre utilise en tant que synonyme de g. G Appliquer une fois le modificateur << s >> ou << & >> suivant a tous les mots de la ligne d'evenement. COMMANDES INTERNES DE L'INTERPRETEUR Sauf indication contraire, chaque commande interne decrite dans ce paragraphe comme acceptant des options precedees par - accepte egalement la notation -- pour signaler la fin des options. Les commandes internes :, true, false et test/[ n'acceptent aucune option et ne traitent pas -- particulierement. Les commandes internes exit, logout, return, break, continue, let et shift acceptent et traitent les arguments commencant par - sans avoir besoin de --. Les autres commandes internes, qui acceptent des arguments mais qui ne sont pas declarees explicitement comme acceptant des options, considerent les arguments commencant par - comme des options non valides, donc -- est obligatoire pour eviter cette interpretation. : [arguments] Sans effet ; cette commande ne fait rien d'autre que developper les arguments et effectuer toute redirection indiquee. L'etat renvoye est 0. . fichier [arguments] source fichier [arguments] Lire et executer les commandes du fichier dans l'environnement de l'interpreteur actuel, puis renvoyer l'etat final de la derniere commande executee depuis fichier. Si le nom du fichier ne contient pas de barre oblique, les chemins d'acces contenus dans PATH sont parcourus pour rechercher le repertoire contenant le fichier, mais le fichier n'a pas besoin d'etre executable. Lorsqu'il est recherche dans PATH le fichier n'a pas besoin d'etre executable. Lorsque bash n'est pas en mode POSIX, il examine le repertoire de travail actuel si aucun fichier n'est trouve dans PATH. Si l'option sourcepath de la commande interne shopt est desactivee, le PATH n'est pas parcouru. Si des arguments sont fournis, ils sont transmis dans les parametres positionnels lorsque le fichier est execute. Sinon les parametres positionnels ne sont pas modifies. Si l'option -T est activee, . herite de toutes les captures de DEBUG ; si elle ne l'est pas, toutes les chaines de capture de DEBUG sont sauvegardees et restaurees autour de l'appel a ., et detruit les captures de DEBUG lors de son execution. Si -T n'existe pas et si le fichier venant de la source modifie la capture de DEBUG, la nouvelle valeur est conservee quand . se termine. L'etat renvoye est l'etat de la derniere commande terminee au sein du script (0 si aucune commande n'a ete executee) et faux si le fichier n'est pas trouve ou ne peut etre 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 definis, sous la forme nom=valeur. Lorsque des arguments sont fournis, un alias est cree pour chaque nom auquel on a donne une valeur. Une espace finale dans une valeur conduira a la recherche d'alias dans le mot suivant lors du developpement de l'alias. Pour tous les noms sans valeur fournie dans la liste d'arguments, le nom et la valeur de l'alias sont affiches. La commande alias renvoie vrai, a moins qu'un nom n'ait ete indique pour lequel aucun alias n'a ete defini. bg [tache ...] Reprendre en arriere-plan chaque tache suspendue, comme si elle avait ete lancee avec &. Si aucune tache n'est precisee, la notion d'interpreteur de tache actuelle est utilisee. bg tache renvoie 0 sauf si le controle des taches est desactive, ou, quand le controle des taches est active, si une tache precisee n'a pas ete trouvee ou a ete lancee sans controle de taches. 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'interpreteur 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 a une fonction ou une macro readline ou creer une variable readline. Chaque argument qui n'est pas une option est une commande comme elle devrait apparaitre dans un fichier d'initialisation de readline tel que .inputrc, mais chaque raccourci ou commande doit etre fourni comme un argument independant ; 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 devant etre concerne par les raccourcis ulterieurs. 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 equivalent a vi-command (vi-move est aussi un synonyme) ; emacs est equivalent a emacs-standard. -l Afficher la liste des noms de toutes les fonctions readline. -p Afficher les noms des fonctions readline et leurs raccourcis de facon a pouvoir les relire. -P Afficher les noms des fonctions readline et leurs raccourcis. -s Afficher les suites de touches readline associees aux macros et les chaines correspondantes, de facon a pouvoir les relire. -S Afficher les suites de touches readline associees aux macros et les chaines correspondantes. -v Afficher les noms des variables readline et leurs valeurs de facon a pouvoir les relire. -V Afficher les noms des variables readline et leurs valeurs. -f fichier Lire les raccourcis clavier dans fichier. -q fonction Rechercher les touches permettant d'appeler la fonction indiquee. -u fonction Dissocier toutes les touches associees a fonction. -r suite_de_touches Supprimer tout raccourci actuel pour la suite_de_touches. -x suite_de_touches:commande_de_l'interpreteur Conduire la commande_de_l'interpreteur a etre executee chaque fois que la suite_de_touches est saisie. Quand la commande_de_l'interpreteur est executee, l'interpreteur configure la variable READLINE_LINE au contenu du tampon de ligne de readline et les variables READLINE_POINT et READLINE_MARK a la position actuelle du curseur d'insertion et du point d'insertion sauvegarde (la marque) respectivement. L'interpreteur affecte tout argument numerique fourni par l'utilisateur a la variable READLINE_ARGUMENT. S'il n'y a pas d'argument, la variable n'existe pas. Si la commande executee modifie les valeurs de READLINE_LINE, READLINE_POINT ou READLINE_MARK, ces nouvelles valeurs seront prises en consideration dans l'etat d'edition. -X Afficher toutes les suites de touches associees aux commandes de l'interpreteur et aux commandes associees pour pouvoir etre reutilisees en entree. La valeur renvoyee est 0, a moins qu'une option inconnue ne soit indiquee ou qu'une erreur ne se soit produite. break [n] Sortir d'une boucle for, while, until ou select. Si n est indique, sortir de n niveaux de boucles. n doit etre >= 1. Si n est superieur au nombre de boucles imbriquees, sortir de toutes les boucles. La valeur renvoyee est 0, a moins que n ne soit pas superieur ou egal a 1. builtin commande_interne [arguments] Executer la commande interne de l'interpreteur indiquee, en lui passant les arguments, puis renvoyer son etat final. C'est utile lorsqu'une fonction est definie avec le meme nom qu'une commande interne, et que cette commande est appelee depuis l'interieur de la fonction. La commande interne cd est souvent redefinie de cette facon. L'etat renvoye est faux si la commande_interne n'est pas une commande interne de l'interpreteur. caller [expr] Renvoyer le contexte de tout appel de sous-programme actif (une fonction de l'interpreteur ou un script lance avec les commandes internes . ou source). Sans expr, caller affiche le numero de ligne et le nom de fichier du sous-programme actuel. Si un entier positif est fourni comme expr, caller affiche le numero de ligne, le nom du sous-programme et le nom de fichier source correspondant a la position dans la pile d'appels d'execution actuelle. Cette information supplementaire peut etre utilisee, par exemple, pour afficher une trace de la pile. La trame actuelle est la trame 0. La valeur renvoyee est 0, a moins que l'interpreteur ne soit pas en train d'executer un sous-programme ou que expr ne corresponde pas a une position correcte dans la pile d'appels. cd [-L|[-P [-e]] [-@]] [rep] Remplacer le repertoire de travail actuel par rep. Si rep n'est pas fourni, la valeur de la variable d'interpreteur HOME est la valeur par defaut. La variable CDPATH definit des chemins de recherche pour trouver le repertoire contenant rep : tous les noms de repertoire contenus dans CDPATH sont parcourus a la recherche de rep. Les repertoires possibles y sont fournis dans une liste separes par des deux-points << : >>. Un nom de repertoire NULL dans CDPATH est equivalent au repertoire actuel, c'est-a-dire << . >>. Si rep commence par une barre oblique (/), alors CDPATH n'est pas utilise. L'option -P force cd a n'employer que la structure de repertoires physiques en resolvant les liens symboliques en traversant rep et avant de traiter les instances de .. dans rep (consultez aussi l'option -P de la commande interne set) ; l'option -L force a suivre les liens symboliques en resolvant les liens symboliques apres le traitement des instances de .. dans rep. Si .. apparait dans rep, il est traite en supprimant le composant de chemin precedant directement rep, jusqu'a une barre oblique ou le debut de rep. Si l'option -e est fournie avec -P, et que le repertoire de travail actuel ne peut pas etre determine avec succes apres un changement de repertoire avec succes, cd renverra un etat d'echec. Sur les systemes qui le permettent, l'option -@ presente les attributs etendus associes a un fichier comme a un repertoire. Un argument - est converti en $OLDPWD avant d'essayer un changement de repertoire. Si un nom de repertoire non vide de CDPATH est utilise ou si - est le premier argument et si le changement de repertoire reussit, le chemin absolu du nouveau repertoire de travail est ecrit sur la sortie standard. Si le changement de repertoire reussit, cd definit la valeur de la variable d'environnement PWD au nom du nouveau repertoire et regle la variable d'environnement OLDPWD a celle du repertoire de travail en cours avant le changement. La valeur renvoyee est vrai si le changement de repertoire a reussi, faux sinon. command [-pVv] commande [arguments ...] Executer la commande avec les arguments indiques, mais en supprimant le processus habituel de recherche des commandes. Seules les commandes internes ou les commandes trouvees dans PATH seront executees. Si l'option -p est indiquee, la recherche de la commande est effectuee en utilisant une valeur par defaut pour PATH garantissant de trouver tous les utilitaires standards. Si l'option -V ou -v est fournie, une description de la commande est affichee. L'option -v conduit a n'afficher qu'un seul mot indiquant la commande ou le nom de fichier utilise pour appeler la commande. L'option -V fournit une description plus prolixe. Si l'option -V ou -v est fournie, l'etat final est 0 si la commande a ete trouvee et 1 sinon. Si aucune option n'est fournie et si une erreur s'est produite ou si la commande ne peut etre trouvee, l'etat final est 127. Sinon, l'etat final de la command interne est l'etat final de commande. compgen [option] [mot] Produire les correspondances des completements possibles pour mot selon les options, qui peuvent etre toute option acceptee par la commande interne complete a l'exception de -p et -r et ecrit le resultat sur la sortie standard. Lorsqu'on utilise les options -F ou -C, les diverses variables de l'interpreteur creees par les outils de completement programmables, lorsque disponibles, n'auront pas de valeurs utilisables. Les correspondances seront produites de la meme facon que si le programme de completement programmable les avait produites directement a partir d'une specification de completement avec les memes attributs. Si mot est indique, seuls les completements qui correspondent a mot sont affiches. La valeur renvoyee est vrai, sauf si une option incorrecte a ete fournie ou si aucune correspondance n'a ete produite. complete [-abcdefgjksuv] [-o option-completement] [-DEI] [-A action] [-G globpat] [-W liste_de_mots] [-F fonction] [-C commande] [-X motif_filtre] [-P prefixe] [-S suffixe] nom [nom ...] complete -pr [-DEI] [nom ...] Indiquer la facon de completer les arguments de chaque nom. Si l'option -p est fournie ou si aucune option n'est fournie, les specifications de completement existantes sont affichees de telle facon qu'elles puissent etre reutilisees comme entree. L'option -r retire une specification de completement a chaque nom fourni ou, si aucun nom n'est fourni, toutes les specifications de completement. L'option -D indique que les options restantes et les actions devraient s'appliquer au completement de commande par << defaut >>, c'est-a-dire le completement essaye sur une commande pour laquelle aucun completement n'a ete prealablement defini. L'option -E indique que les options restantes et les actions devraient s'appliquer au completement de commande << vide >>, c'est-a-dire le completement essaye sur une ligne vide. L'option -I indique que les options restantes et les actions devraient s'appliquer au completement du premier mot de non affectation de la ligne ou apres un delimiteur de commande ; ou |, ce qui est habituellement le completement d'un nom de commande. Si plusieurs options sont fournies, l'option -D prend la preseance sur -E et les deux prennent la preseance sur -I. Si une des -options -D, -E ou -I est fournie, tous les autres arguments de nom sont ignores ; ces completements ne s'appliquent qu'au cas precise par l'option. Le processus d'application de ces specifications de completement, lorsqu'un completement de mot est tente, est decrit above under Programmable Completion. Les autres options, si indiquees, ont les significations suivantes. Les arguments des options -G, -W et -X (et, si necessaire, les options -P et -S) devraient etre protegees pour eviter leur developpement avant que la commande interne complete ne soit appelee. -o option-completement L'option-completement commande plusieurs aspects du comportement des specifications de completement au-dela de la simple production de completement. option-completement peut etre l'une des suivantes : bashdefault Effectuer le reste des completements par defaut de bash si la specification de completement ne produit aucune correspondance. default Utiliser le completement de nom de fichier par defaut de readline si la specification de completement ne produit aucune correspondance. dirnames Effectuer le completement de nom de repertoire si la specification de completement ne produit aucune correspondance. filenames Indiquer a readline que la specification de completement produit des noms de fichiers, ainsi il peut effectuer tout traitement specifique aux noms de fichiers (comme ajouter une barre oblique aux noms de repertoires, proteger les caracteres speciaux ou supprimer les espaces de fin de ligne). Destinee a etre utilisee avec les fonctions de l'interpreteur. noquote Indiquer a readline de proteger les mots completes s'il s'agit de noms de fichier (la protection des noms de fichier est par defaut). nosort Indiquer a readline de ne pas trier par ordre alphabetique la liste des completements possibles. nospace Indiquer a readline de ne pas ajouter une espace (comportement par defaut) aux mots completes en fin de ligne. plusdirs Apres creation de toutes les correspondances definies par la specification de completement, une tentative de completement de nom de repertoire est effectuee et toutes les correspondances sont ajoutees aux resultats des autres actions. -A action L'action peut etre l'une des suivantes pour produire une liste des completements possibles : alias Noms d'alias. Peut egalement etre indiquee avec -a. arrayvar Noms de variable de type tableau. binding Noms de raccourci clavier readline. builtin Noms de commandes internes de l'interpreteur. Peut egalement etre indiquee avec -b. command Noms de commande. Peut egalement etre indiquee avec -c. directory Noms de repertoire. Peut egalement etre indiquee avec -d. disabled Noms de commandes internes de l'interpreteur desactivees. enabled Noms de commandes internes de l'interpreteur activees. export Noms de variables de l'interpreteur exportees. Peut egalement etre indiquee avec -e. file Noms de fichier. Peut egalement etre indiquee avec -f. function Noms de fonctions de l'interpreteur. group Noms de groupe. Peut egalement etre indiquee avec -g. helptopic Sujets de l'aide acceptes par la commande interne help. hostname Noms de machine tels qu'ils sont extraits du fichier indique par la variable de l'interpreteur HOSTFILE. job Noms de tache si le controle des taches est actif. Peut egalement etre indiquee avec -j. keyword Mots reserves de l'interpreteur. Peut egalement etre indiquee avec -k. running Noms de taches en cours d'execution si le controle des taches est actif. service Noms de service. Peut egalement etre indiquee avec -s. setopt Arguments corrects de l'option -o de la commande interne set. shopt Noms des options d'interpreteur acceptees par la commande interne shopt. signal Noms de signaux. stopped Noms de taches suspendues si le controle des taches est actif. user Noms d'utilisateur. Peut egalement etre indiquee avec -u. variable Noms de toutes les variables de l'interpreteur. Peut egalement etre indiquee avec -v. -C commande La commande est executee dans un environnement de sous-interpreteur et sa sortie est utilisee comme completements possibles. Les arguments sont fournis comme avec la fonction -F. -F fonction La fonction de l'interpreteur est executee dans l'interpreteur actuel. Lorsqu'une fonction est executee, le premier argument ($1) est le nom de la commande dont les arguments doivent etre completes, le deuxieme argument ($2) est le mot a completer et le troisieme argument ($3) est le mot precedant celui devant etre complete sur la ligne de commande actuelle. Lorsqu'elle finit, les completements possibles sont recuperes a partir de la valeur de la variable de type tableau COMPREPLY. -G globpat Le motif de developpement des chemins globpat est developpe pour produire les completements possibles. -P prefixe prefixe est ajoute au debut de chaque completement possible apres application de toutes les autres options. -S suffixe suffixe est ajoute a chaque completement possible apres application de toutes les autres options. -W liste_de_mots La liste_de_mots est decoupee en utilisant les caracteres de la variable speciale IFS comme delimiteurs et chaque mot resultant est developpe. Les protections de l'interpreteur sont prises en compte a l'interieur de la liste_de_mots, afin de fournir un mecanisme pour que les mots puissent contenir des metacaracteres ou des caracteres de l'interpreteur dans la valeur de IFS. Les completements possibles sont les elements de la liste resultante qui correspondent au mot en cours de completement. -X motif_filtre motif_filtre est un motif utilise pour le developpement des chemins. Il est applique a la liste des completements possibles produite par les options et arguments precedents et chaque completement correspondant a motif_filtre est supprime de la liste. Un ! au debut du motif_filtre inverse le motif ; dans ce cas, tout completement qui ne correspond pas a motif_filtre est supprime. La valeur renvoyee est vrai, sauf si une option incorrecte a ete fournie, si une option comme -p ou -r a ete fournie sans un nom d'argument, si une tentative a ete faite pour supprimer une specification de completement pour un nom pour lequel il n'existe pas de specification, ou si une erreur est survenue lors de l'ajout d'une specification de completement. compopt [-o option] [-DEI] [+o option] [nom] Modifier les options de completement pour chaque nom en fonction des options, ou pour le completement en cours d'execution si aucun nom n'est fourni. Si aucune option n'est donnee, afficher les options de completement pour chaque nom ou pour le completement actuel. Les valeurs d'options possibles sont celles decrites ci-dessus pour la commande interne complete. L'option -D indique que les options restantes devraient s'appliquer a la commande de completement par << defaut >> ; c'est-a-dire le completement essaye sur une commande pour laquelle aucun completement n'a ete prealablement defini. L'option -E indique que les options fournies devraient s'appliquer au completement de commande << vide >> ; c'est-a-dire le completement essaye sur une ligne vide. L'option I indique que les options fournies restantes devraient s'appliquer au completement du premier mot de non affectation de la ligne ou apres un delimiteur de commande ; ou |, ce qui est habituellement le completement d'un nom de commande. La valeur renvoyee est vrai, a moins qu'une option incorrecte ait ete fournie, qu'une tentative ait ete faite pour modifier les options pour un nom pour lequel il n'existe pas de specification de completement, ou bien qu'une erreur de sortie soit survenue. continue [n] Reprendre l'execution a l'iteration suivante d'une boucle for, while, until ou encore select. Si n est indique, reprendre l'execution a la n-ieme boucle imbriquee. n doit etre >= 1. Si n est superieur au nombre de boucles imbriquees, l'execution reprend a la boucle la plus externe (la boucle << au sommet >>). La valeur renvoyee est 0, a moins que n ne soit superieur ou egal a 1. declare [-aAfFgiIlnrtux] [-p] [nom[=valeur] ...] typeset [-aAfFgiIlnrtux] [-p] [nom[=valeur] ...] Declarer des variables ou leur fournir des attributs. Si aucun nom n'est indique, afficher les valeurs des variables. L'option -p affichera les attributs et les valeurs de chaque nom. Quand -p est utilisee avec des arguments nom, les options supplementaires, a part -f et -F, sont ignorees. Quand -p est fourni sans argument nom, les attributs et valeurs de toutes les variables ayant des attributs indiques par les options additionnelles seront affiches. Si aucune autre option n'est fournie avec -p, declare affichera les attributs et valeurs de toutes les variables de l'interpreteur. L'option -f limite l'affichage aux fonctions de l'interpreteur. L'option -F empeche l'affichage des definitions de fonctions : seuls le nom de la fonction et ses attributs sont affiches. Si l'option d'interpreteur extdebug est activee en utilisant shopt, le nom du fichier source et le numero de ligne ou chaque nom est defini sont aussi affiches. L'option -F implique -f. L'option -g force la creation ou la modification de variables avec une portee globale, meme si declare est executee dans une fonction de l'interpreteur. Elle est ignoree dans tous les autres cas. L'option -I fait que les variables locales heritent des attributs (sauf de l'attribut nameref) et prennent la valeur de n'importe quelle variable existante du meme nom dans son environnement. S'il n'y a pas de variable existante, la variable locale est detruite dans un premier temps. Les options suivantes permettent de restreindre l'affichage aux variables dotees de certains attributs ou de configurer les attributs des variables : -a Chaque nom est une variable de type tableau indice (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 traitee comme un entier ; l'evaluation arithmetique (consultez EVALUATION ARITHMETIQUE above) est effectuee lorsqu'une valeur est affectee a la variable. -l Quand cette variable contient une valeur, toutes les majuscules seront converties en minuscules. L'attribut majuscule est desactive. -n Donner a chaque nom l'attribut nameref, le rendant une reference de nom vers une autre variable. Cette autre variable est definie par la valeur de nom. Toutes les references, les affectations et les modifications d'attribut de nom, a part celles qui utilisent ou modifient l'attribut -n lui-meme, sont realisees sur la variable referencee par la valeur de nom. L'attribut -nameref ne peut pas etre applique aux variables de type tableau. -r Rendre les noms accessibles en lecture seule. Plus aucune valeur ne pourra leur etre affectee et ils ne pourront plus etre detruits. -t Donner a chaque nom l'attribut trace. Les fonctions tracees heritent des captures de DEBUG et RETURN de l'interpreteur appelant. L'attribut trace n'a pas de signification speciale pour les variables. -u Quand cette variable contient une valeur, toutes les minuscules seront converties en majuscules. L'attribut minuscule est desactive. -x Marquer les noms pour qu'ils soit exportes dans l'environnement des commandes ulterieures. En utilisant << + >> a la place de << - >>, l'attribut correspondant est desactive, excepte que +a et +A ne peuvent pas etre utilises pour detruire une variable tableau et que +r n'enlevera pas l'attribut lecture seule. Quand ils sont utilises dans une fonction, declare et typeset rendent local chaque nom, comme avec la commande local sauf si l'option -g est fournie. Si un nom de variable est suivi par =valeur, la valeur de cette variable est configuree a valeur. Lors de l'utilisation de -a ou -A et de la syntaxe d'affectation composee pour creer des variables de type tableau, les attributs supplementaires sont sans effet jusqu'aux affectations suivantes. La valeur renvoyee est 0, sauf si une option incorrecte est rencontree, une tentative est faite de definir une fonction en utilisant ``-f foo=bar'', une tentative est faite pour affecter la valeur a une variable en lecture seule, une tentative est faite d'affecter une valeur a une variable tableau sans employer la syntaxe d'affectation composee (consultez Tableaux above), un des noms n'est pas un nom correct pour une variable de l'interpreteur, 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'afficher une fonction inexistante. dirs [-clpv] [+n] [-n] Sans option, afficher la liste des repertoires actuellement memorises. L'affichage par defaut est realise sur une seule ligne, les noms de repertoires etant separes par des espaces. Les repertoires sont ajoutes a la liste avec la commande pushd et supprimes avec la commande popd. Le repertoire courant est toujours le premier repertoire de la pile. -c Effacer la liste des repertoires en les supprimant tous. -l Produire une liste en utilisant les chemins complets ; le format d'affichage par defaut utilise le tilde pour representer le repertoire d'accueil. -p Afficher la pile des repertoires avec un element par ligne. -v Afficher la pile des repertoires avec un element par ligne, en prefixant chaque entree avec son numero d'indice dans la pile. +n Afficher le n-ieme element de la liste fournie par dirs, lorsqu'appele sans options, en comptant a partir de la gauche en commencant a zero. -n Afficher le n-ieme element de la liste fournie par dirs, lorsqu'appele sans options, en comptant a partir de la droite en commencant a zero. La valeur renvoyee est 0, sauf si une option incorrecte a ete fournie ou si l'indice n depasse la longueur de la pile des repertoires. disown [-ar] [-h] [tache ... | pid ... ] Sans options, supprimer chaque tache de la table des taches actives. Si aucune tache n'est precisee et qu'aucune des options -a ou -r n'est fournie, la tache actuelle est utilisee. Si l'option -h est indiquee, aucune tache n'est supprimee de la table, mais chaque tache est marquee pour que le signal SIGHUP ne lui soit pas envoye si l'interpreteur recoit un signal SIGHUP. Si aucune tache n'est fournie, l'option -a signifie la suppression ou le marquage de toutes les taches ; l'option -r sans l'argument tache restreint les operations aux taches en cours d'execution. La valeur renvoyee est 0, sauf si tache n'indique pas une tache correcte. echo [-neE] [arguments ...] Afficher les arguments, separes par des espaces, suivis par un saut de ligne. La valeur renvoyee est 0 sauf en cas d'erreur. Si -n est indique, le changement de ligne final est supprime. Si l'option -e est indiquee, l'interpretation des caracteres de protection suivants par une contre-oblique est activee. L'option -E desactive l'interpretation de ces caracteres de protection, meme sur les systemes ou ils sont interpretes par defaut. L'option d'interpreteur xpg_echo peut etre utilisee dynamiquement pour determiner si echo developpe ou non par defaut ces caracteres de protection. echo n'interprete pas -- comme signifiant la fin des options. echo reconnait les suites de caracteres de protection suivants : \a alerte (alarme) ; \b effacement arriere (<< backspace >>) ; \c supprime tout affichage suivant ; \e \E caractere 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 caractere 8 bits dont la valeur en octal est nnn (zero a trois chiffres octaux) ; \xHH le caractere 8 bits dont la valeur hexadecimale est HH (un ou deux chiffres hexadecimaux) ; \uHHHH le caractere Unicode (ISO/IEC 10646) dont la valeur hexadecimale est HHHH (un a quatre chiffres hexadecimaux) ; \UHHHHHHHH le caractere Unicode (ISO/IEC 10646) dont la valeur hexadecimale est HHHHHHHH (un a huit chiffres hexadecimaux) ; enable [-a] [-dnps] [-f fichier] [nom ...] Activer ou desactiver les commandes internes de l'interpreteur. Desactiver une commande interne permet d'executer une commande disque ayant le meme nom qu'une commande interne de l'interpreteur, sans avoir a indiquer un chemin d'acces complet, meme quand l'interpreteur recherche normalement les commandes internes avant les commandes du disque. Si -n est utilise, chaque nom indique est desactive, sinon ils sont actives. Par exemple, pour utiliser le programme binaire test qui se trouve dans PATH plutot que la commande interne, utilisez ``enable -n test''. L'option -f demande de charger la nouvelle commande interne avec le nom indique depuis le fichier objet partage sur les systemes qui le permettent. bash utilisera la valeur de la variable BASH_LOADABLES_PATH comme une liste separee par des deux-points dans laquelle rechercher le fichier. La valeur par defaut depend du systeme. L'option -d permet de supprimer une commande interne chargee precedemment avec -f. Si aucun argument nom n'est indique ou si l'option -p est fournie, une liste des commandes internes de l'interpreteur est affichee. Sans autre option, la liste est celle des commandes internes actives de l'interpreteur. Si -n est fournie, seules les commandes desactivees sont affichees. Si -a est fournie, la liste de toutes les commandes est affichee, avec une indication des activations et desactivations. Si -s est fournie, la sortie est limitee aux commandes internes speciales POSIX. Si aucune option n'est fournie et si nom n'est pas une commande interne de l'interpreteur, enable tentera de charger nom a partir d'un objet partage nomme nom comme si la commande etait ``enable -f name name . La valeur renvoyee est 0 a moins que nom ne soit pas une commande interne de l'interpreteur ou qu'il y ait une erreur au chargement d'une nouvelle commande interne d'un objet partage. eval [arguments ...] Les arguments sont lus et regroupes en une seule commande simple. Cette commande est alors lue et executee par l'interpreteur et son etat final est renvoye 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 indiquee, elle remplace l'interpreteur. Aucun nouveau processus n'est cree. Les arguments deviennent ceux de la commande. Si l'option -l est fournie, l'interpreteur place un tiret en guise de zeroieme argument fourni a la commande. C'est ce que fait login(1). L'option -c conduit a l'execution de la commande avec un environnement vide. Si l'option -a est fournie, l'interpreteur transmet le nom comme zeroieme argument. Si la commande ne peut etre executee pour une raison quelconque, un interpreteur non interactif termine, sauf si l'option de l'interpreteur execfail est activee. Dans ce cas, une erreur est renvoyee. Un interpreteur interactif renvoie une erreur si le fichier ne peut pas etre execute. Un sous-interpreteur termine sans conditions si exec echoue. Si aucune commande n'est indiquee, les eventuelles redirections sont mises en place dans l'interpreteur actuel et l'etat renvoye est 0. S'il y a une erreur de redirection, l'etat renvoye est 1. exit [n] Termine l'interpreteur avec un etat de n. Si n est omis, l'etat final est celui de la derniere commande executee. Une capture sur EXIT est executee avant que l'interpreteur ne se termine. export [-fn] [nom[=mot]] ... export -p Les noms fournis sont marques pour etre exportes automatiquement dans l'environnement des commandes executees par la suite. Si l'option -f est indiquee, les noms se rapportent a des fonctions. Si aucun nom n'est donne ou si l'option -p est fournie, une liste de noms de toutes les variables exportees est affichee. L'option -n conduit a supprimer l'attribut d'exportation de toutes les variables nommees. Si un nom de variable est suivi par =mot, la valeur de la variable est configuree a mot. export renvoie un etat final de 0, sauf si une option incorrecte est rencontree, si un des noms n'est pas un nom correct de variable de l'interpreteur, ou si l'option -f est fournie avec un nom qui n'est pas une fonction. fc [-e editeur] [-lnr] [premiere] [derniere] fc -s [motif=nouveau] [commande] La premiere forme selectionne un intervalle de commandes de la premiere a la derniere dans la file d'historique et l'affiche ou l'edite pour les reexecuter. La premiere et la derniere peuvent etre indiquees sous forme de chaines (pour trouver la derniere commande commencant par cette chaine) ou sous forme numerique (un indice dans la file d'historique ou un nombre negatif est utilise comme decalage par rapport au numero de la commande actuelle). Sur la liste, une premiere ou une derniere de valeur 0 est equivalente a -1, et -0 est equivalent a la commande actuelle (habituellement la commande fc) ; autrement, 0 est equivalent a -1 et -0 n'est pas valable. Si la derniere n'est pas indiquee, elle est configuree a la commande actuelle si l'on veut afficher la liste (ainsi ``fc -l -10'' affiche les 10 dernieres commandes) et a l'identique de la premiere sinon. Si la premiere n'est pas indiquee, elle est configuree a la commande precedente pour une edition et a -16 pour l'affichage de liste. L'option -n supprime l'affichage des numeros dans la liste. L'option -r inverse l'ordre des commandes. Si l'option -l est indiquee, les commandes sont affichees sur la sortie standard. Sinon, l'editeur indique est appele avec un fichier contenant les commandes selectionnees. Si aucun editeur n'est indique, 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 utilise. Lorsque l'edition se termine, les commandes sont affichees puis executees. Dans la seconde forme, la commande est reexecutee apres avoir remplace chaque instance du motif par nouveau. commande est interpretee de la meme facon que premiere ci-dessus. Un alias utile pour cela est ``r="fc -s"'', ainsi en tapant ``r cc'' on relance la derniere commande commencant par ``cc'' et en tapant ``r'' on reexecute la commande precedente. Lorsque la premiere forme est utilisee, la valeur renvoyee est 0, sauf si une option incorrecte est trouvee ou si premiere ou derniere indiquent des lignes d'historique hors d'atteinte. Si l'option -e est fournie, la valeur renvoyee est celle de la derniere commande executee ou un echec si une erreur s'est produite avec le fichier temporaire des commandes. Avec la seconde forme, l'etat renvoye est celui de la commande reexecutee, sauf si commande n'indique pas une ligne correcte de l'historique, auquel cas fc renvoie un echec. fg [tache] Reprendre la tache au premier plan qui devient la tache actuelle. Si aucune tache n'est precisee, l'interpreteur utilise la notion de tache actuelle. La valeur renvoyee est celle de la commande placee au premier plan ou un echec si le controle des taches est desactive ou, lorsque le controle des taches est active, si la tache n'indique pas une tache correcte ou si la tache indique une tache lancee sans controle des taches. getopts chaine_d_options nom [arguments ...] getopts est utilise par les scripts d'interpreteur pour analyser les parametres positionnels. La chaine_d_options contient l'ensemble des caracteres d'options a reconnaitre ; si un caractere est suivi par un deux-points, l'option est censee avoir un argument, qui devrait en etre separe par une espace. Les caracteres deux-points et le point d'interrogation ne peuvent pas etre utilises comme caracteres d'option. A chaque appel, getopts place l'option suivante dans la variable de l'interpreteur dont le nom est fourni, en la creant si elle n'existe pas et l'indice de l'argument suivant a traiter dans la variable OPTIND. OPTIND est initialisee a 1 a chaque appel d'un interpreteur ou d'un script. Quand une option necessite un argument, getopts place cet argument dans la variable OPTARG. L'interpreteur ne reinitialise pas OPTIND automatiquement, il faut le faire manuellement entre des appels multiples a getopts au sein du meme appel d'interpreteur si un nouveau jeu de parametres doit etre utilise. Lorsque la fin des options est atteinte, getopts termine avec une valeur renvoyee strictement superieure a zero. OPTIND est positionne a l'indice du premier argument obligatoire et un point d'interrogation (?) est place dans la variable nom. getopts analyse en principe les parametres positionnels, mais si plus d'arguments sont indiques comme valeur d'arguments, getopts analysera ces derniers a la place. getopts peut signaler des erreurs de deux facons. Si le premier caractere de la chaine_d_options est un deux-points, les erreurs sont signalees de facon silencieuse. Lors d'un fonctionnement normal, des messages de diagnostic sont affiches si une option est incorrecte ou s'il manque un argument d'option. Si la variable OPTERR est configuree a 0, aucun message d'erreur ne sera affiche, meme si le premier caractere de la chaine_d_options n'est pas un deux-points. Si une option incorrecte est rencontree, getopts place un point d'interrogation (?) dans la variable nom, affiche un message d'erreur (s'il n'est pas en mode silencieux) et detruit la variable OPTARG. Si getopts fonctionne en mode silencieux, le caractere d'option est place dans OPTARG et aucun message de diagnostic n'est affiche. Lorsqu'un argument d'option necessaire est absent et si getopts n'est pas silencieux, un point d'interrogation (?) est place dans la variable nom, OPTARG est detruite et un message de diagnostic est affiche. Si getopts est silencieux, un deux-points (:) est place dans la variable nom et OPTARG est positionne a l'option monocaractere trouvee. getopts renvoie vrai si une option, indiquee ou non, est trouvee. 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 invoquee, le chemin d'acces complet de la commande nom est determine en examinant les repertoires de $PATH, et memorise. Tous les chemins precedemment memorises sont supprimes. Si l'option -p est fournie, aucune recherche de chemin d'acces n'est effectuee et le fichier est utilise comme chemin d'acces complet pour la commande. L'option -r conduit l'interpreteur a oublier tous les emplacements memorises. L'option -d conduit l'interpreteur a oublier tous les emplacements memorises de chaque nom. Si l'option -t est fournie, le chemin d'acces complet de chaque nom correspondant est affiche. Si plusieurs arguments nom sont fournis avec -t, le nom est affiche avant chaque chemin d'acces complet associe. L'option -l conduit a afficher la sortie dans un format reutilisable en entree. Si aucun argument n'est indique ou si seulement -l est fournie, des informations sur les commandes memorisees sont affichees. La valeur renvoyee est vrai, sauf si nom n'est pas trouve ou si une option incorrecte est fournie. help [-dms] [motif] Afficher des informations d'aide au sujet des commandes internes. Si un motif est indique, help fournit de l'aide sur toutes les commandes internes correspondant a ce motif, sinon, une liste des commandes internes et des structures de controle de l'interpreteur est affichee. -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'etat renvoye est 0, sauf si aucune commande ne correspond au motif. history [n] history -c history -d nombre history -d debut-fin history -anrw [fichier] history -p argument [argument ...] history -s argument [argument ...] Sans options, afficher la liste des commandes de la file d'historique, avec les numeros de ligne. Les lignes marquees avec un * ont ete modifiees. Un argument n permet de n'afficher que les n dernieres lignes. Si la variable de l'interpreteur HISTTIMEFORMAT existe et n'est pas NULL, elle est utilisee comme chaine de format pour strftime(3) afin d'afficher l'horodatage associe a chaque element de l'historique. Aucun blanc ne separe l'horodatage ainsi mis en forme de la ligne d'historique. Si un argument fichier est fourni, il est utilise comme nom de fichier d'historique ; sinon la valeur de HISTFILE est utilisee. Les options, si fournies, ont les significations suivantes : -c Effacer la file de l'historique en supprimant tous les elements. -d nombre Supprimer l'entree d'historique a la position nombre. Si nombre estnegatif, il est interprete comme relatif a un nombre plus grand que celui de la derniere position de l'historique, ainsi les indices negatifs comptent a rebours depuis la fin de l'historique et un indice -1 fait reference a la commande history -d actuelle. -d debut-fin Supprimer la plage d'entrees d'historique entre les positions debut et fin incluses. Les valeurs positives et negatives pour debut et fin sont interpretees comme decrites ci-dessus. -a Ajouter les << nouvelles >> lignes d'historique. Ce sont celles creees depuis le debut de la session actuelle de bash, mais pas deja ajoutees dans le fichier d'historique. -n Lire dans le fichier d'historique les lignes non encore lues et les ajouter a la file d'historique actuelle. Il s'agit des lignes qui ont ete ajoutees dans le fichier d'historique depuis le debut de la session bash. -r Lire le contenu du fichier et l'ajouter a l'historique actuel. -w Ecrire la liste actuelle d'historique dans le fichier d'historique, en ecrasant le contenu precedent. -p Effectuer la substitution d'historique sur les arguments suivants et afficher le resultat sur la sortie standard. Ne pas memoriser les resultats dans la file d'historique. Chaque argument doit etre protege pour desactiver le developpement normal de l'historique. -s Conserver les arguments dans la file d'historique comme un unique element. La derniere commande de la file d'historique est supprimee avant que les arguments ne soient ajoutes. Si la variable HISTTIMEFORMAT existe, les informations d'horodatage associees a chaque element de l'historique sont ecrites dans le fichier d'historique, reperees par le caractere de commentaire d'historique. Quand le fichier d'historique est lu, les lignes commencant par le caractere de commentaire d'historique suivi immediatement par un chiffre sont consideres comme des horodatages de la ligne d'historique precedente. La valeur renvoyee est 0, sauf si une option incorrecte est fournie, si une erreur se produit durant la lecture ou l'ecriture du fichier, si une plageou un nombre incorrects sont fournis comme argument a -d ou si le developpement de l'historique fourni en argument a -p echoue. jobs [-lnprs] [ tache ... ] jobs -x commande [ arguments ... ] La premiere forme affiche la liste des taches actives. Les options ont les significations suivantes : -l Afficher les PID, en plus des informations normales. -n Afficher uniquement des informations sur les taches dont l'etat a change depuis la derniere notification de leur etat a l'utilisateur. -p Afficher uniquement le PID du meneur du groupe de processus de la tache. -r N'afficher que les taches en cours d'execution. -s N'afficher que les taches suspendues. Si une tache est indiquee, l'affichage est restreint aux informations relatives a cette tache. L'etat renvoye est 0, sauf si une option incorrecte est rencontree ou si une tache incorrecte est fournie. Si l'option -x est fournie, jobs remplace toute tache trouvee dans la commande ou dans ses arguments avec les Process Group ID correspondant, puis il execute la commande en lui transmettant les arguments et en renvoyant son etat final. kill [-s signal | -n num-signal | -signal] [pid | tache] ... kill -l|-L [signal | etat_final] Envoyer le signal indique par signal ou num-signal aux processus indiques par pid ou par tache. signal est soit sous la forme de nom de signal (indifferent a la casse), comme SIGKILL (avec ou sans le prefixe SIG), soit sous forme numerique ; num-signal est un numero de signal. Si signal est absent, SIGTERM est suppose par defaut. Un argument -l provoque l'affichage de la liste des noms de signaux. Si des arguments sont fournis quand -l est indique, les noms des signaux correspondant aux arguments sont affiches et l'etat renvoye est 0. L'argument etat_final de l'option -l est un nombre indiquant soit un numero de signal, soit l'etat final d'un processus termine par un signal. L'option -L est equivalente de -l. kill renvoie vrai si au moins un signal a ete envoye avec succes ou faux si une erreur s'est produite ou si une option incorrecte a ete rencontree. let argument [argument ...] Chaque argument est une expression arithmetique a evaluer (consultez EVALUATION ARITHMETIQUE ci-dessus). above). Si l'evaluation du dernier argument donne 0, let renvoie 1 ; sinon 0 est renvoye. local [option] [nom[=valeur] ...] - ] Pour chaque argument, une variable locale nom est creee et la valeur lui est affectee. L'option peut etre n'importe quelle option acceptee par declare. Quand local est utilise dans une fonction, la variable nom possede une portee visible restreinte a cette fonction et ses enfants. Si nom est -, les options de l'interpreteur sont reglees a locales pour la fonction dans laquelle local est invoquee : les options de l'interpreteur, modifiees en utilisant la commande interne set dans la fonction, sont restaurees a leur valeur originale quand la fonction redonne la main. La restauration est effectuee comme si une serie de commandes set avaient ete executees pour restaurer les valeurs qui etaient en place avant la fonction. Sans operandes, local affiche la liste des variables locales sur la sortie standard. Une utilisation de local hors des fonctions est erronee. La valeur renvoyee est 0, sauf si local est utilise hors d'une fonction, si un nom incorrect est fourni ou si nom est une variable en lecture seule. logout Terminer un interpreteur de connexion. mapfile [-d delimiteur] [-n nombre] [-O origine] [-s nombre] [-t] [-u df] [-C rappel] [-c quantum] [tableau] readarray [-d delimiteur] [-n nombre] [-O origine] [-s nombre] [-t] [-u df] [-C rappel] [-c quantum] [tableau] Lire les lignes depuis l'entree standard dans la variable de type tableau indice tableau, ou depuis le descripteur de fichier df si l'option -u est fournie. La variable MAPFILE est le tableau par defaut. Les options, si fournies, ont les significations suivantes : -d Le premier caractere de delimiteur est utilise pour terminer la ligne de saisie, plutot qu'un changement de ligne. Si delimiteur est une chaine vide, mapfile termine une ligne quand il lit un caractere NUL. -n Copier au plus nombre lignes. Si nombre est 0, toutes les lignes sont copiees. -O Commencer l'affectation de tableau a l'indice origine. L'indice par defaut est 0. -s Supprimer les nombre premieres lignes lues. -t Eliminer un delimiteur final (par defaut changement de ligne ) de chaque ligne lue. -u Lire les lignes a partir du descripteur de fichier df plutot que depuis l'entree standard. -C Evaluer rappel a chaque fois que quantum lignes sont lues. L'option -c precise le quantum. -c Preciser le nombre de lignes entre chaque appel a rappel. Si -C est precise sans -c, le quantum par defaut est 5000. Quand rappel est evalue, l'indice du prochain element de tableau a affecter et la ligne a affecter a cet element sont fournis en arguments supplementaires. rappel est evalue apres la lecture de la ligne, mais avant l'affectation de l'element de tableau. Si aucune origine explicite n'est fournie, mapfile effacera tableau avant de lui affecter des valeurs. mapfile termine avec succes sauf si une option ou un de ses arguments n'est pas valable, ou si tableau n'est pas valable, n'est pas un tableau indice ou si son affectation est impossible. popd [-n] [+n] [-n] Enlever des elements de la pile des repertoires. Les elements sont numerotes a partir de 0 avec le premier repertoire liste par dirs. Sans argument popd supprime le repertoire du sommet de la pile et un cd est effectue en direction du nouveau repertoire au sommet. Les arguments, si fournis, ont les significations suivantes : -n Empecher le changement normal de repertoire lors de la suppression d'un repertoire de la pile. Seule la pile est manipulee. +n Supprimer de la pile le n-ieme element de la liste affichee par dirs, en comptant depuis la gauche a partir de zero. Par exemple : ``popd +0'' enleve le premier repertoire, ``popd +1'' le second. -n Supprimer le n-ieme element de la liste affichee par dirs, en comptant depuis la droite a partir de zero. Par exemple : ``popd -0'' supprime le dernier repertoire et ``popd -1'' l'avant-dernier. Si l'element au sommet de la pile de repertoires est modifie et si l'option n n'est pas fournie, popd utilise la commande interne cd pour changer vers le repertoire au sommet de la pile. Si cd echoue, popd renvoie une valeur differente de zero. Autrement, popd renvoie faux si une option incorrecte est trouvee, si la pile de repertoires est vide ou si une pile de repertoires absente est indiquee. Si la commande popd reussit, bash effectue un dirs pour afficher le contenu final de la pile de repertoires et l'etat renvoye est 0. printf [-v var] format [arguments] Ecrire les arguments mis en forme sur la sortie standard sous le controle du format. L'option -v conduit a affecter la sortie a la variable var plutot que de l'afficher sur la sortie standard. Ce format est une chaine de caracteres contenant trois types d'objets : les caracteres normaux, qui sont simplement copies sur la sortie standard, les caracteres de protection qui sont convertis puis copies sur la sortie standard et les specifications de format, qui conduisent chacun a l'affichage des arguments successifs. En plus des specifications de format standard de printf(1), printf interprete les extensions suivantes : %b conduit printf a developper les suites de caracteres de protection dans l'argument correspondant de la meme maniere que echo -e. %q conduit printf a afficher l'argument correspondant dans un format reutilisable en entree de l'interpreteur ; %Q comme %q, mais applique toute precision fournie a l'argument avant de le proteger. %(formatdate)T conduit printf a afficher la chaine date-heure resultant de l'utilisation de formatdate en tant que chaine de format pour strftime(3). L'argument correspondant est un entier representant le temps en seconde ecoule depuis epoch. Deux valeurs particulieres d'argument peuvent etre utilisees : -1 represente l'heure actuelle et -2 l'heure a laquelle l'interpreteur a ete invoque. Si aucun argument n'est indique, la conversion se comporte comme si -1 avait ete fourni. C'est une exception au comportement habituel de printf. Les directives %b, %q et %T utilisent toutes les arguments de largeur et de precision de champ a partir de la specification de format et ecrivent autant d'octets que l'argument developpe (ou utilisent autant d'espace qu'un champ pour cet argument) qui contient habituellement plus de caracteres que l'original. Les arguments des specificateurs de format qui ne sont pas des chaines sont traites comme des constantes C, sauf qu'un signe plus ou moins est permis au debut, et que, si le premier caractere est un guillemet simple ou double, la valeur est la valeur ASCII du caractere suivant. Le format est reutilise si necessaire pour englober tous les arguments. Si le format demande plus d'arguments que fournis, les specifications supplementaires se comportent comme si une valeur zero ou une chaine NULL, suivant le besoin, avaient ete fournies. La valeur renvoyee est zero en cas de succes, differente de zero en cas d'echec. pushd [-n] [+n] [-n] pushd [-n] [rep] Ajouter un repertoire au sommet de la pile des repertoires ou effectuer une rotation dans la pile, en ramenant le repertoire actuel au sommet. Sans argument, la commande pushd echange les deux elements au sommet de la pile des repertoires. Les arguments, si fournis, ont les significations suivantes : -n Empecher le changement normal de repertoire lors d'une rotation ou d'un ajout de repertoires dans la pile. Ainsi, seule la pile est manipulee. +n Effectuer une rotation dans la pile, de facon a amener au sommet le n-ieme repertoire (de la liste affichee par dirs, en comptant depuis la gauche a partir de zero). -n Effectuer une rotation dans la pile, de facon a amener au sommet le n-ieme repertoire (de la liste affichee par dirs, en comptant depuis la gauche a partir de zero). rep Ajouter repertoire au sommet de la pile des repertoires Apres que la pile a ete modifiee, si l'option -n n'a pas ete fournie, pushd utilise la commande interne cd pour changer vers le repertoire au sommet de la pile. Si cd echoue, pushd renvoie une valeur differente de zero. Autrement, si aucun argument n'est fourni, pushd renvoie 0 sauf si la pile des repertoires est vide. Lors d'une rotation de la pile des repertoires, pushd renvoie 0 sauf si la pile est vide ou si un element inexistant dans la pile est indique. Si la commande pushd reussit, bash effectue un dirs pour montrer le contenu final de la pile du repertoire. pwd [-LP] Afficher le chemin d'acces absolu au repertoire de travail actuel. Le chemin ne contiendra pas de liens symboliques si l'option -P est fournie, ou si l'option -o physical de la commande interne set est activee. Si l'option -L est utilisee, le chemin affiche peut contenir des liens symboliques. L'etat renvoye est 0, sauf si une erreur s'est produite lors de la lecture du nom du repertoire actuel ou si une option incorrecte est fournie. read [-ers] [-a tableau] [-d delimiteur] [-i texte] [-n nb_car] [-N nb_car] [-p invite] [-t delai] [-u df] [nom ...] Une ligne est lue depuis l'entree standard ou a partir du descripteur de fichier df fourni en argument a l'option -u, decoupee en mots comme decrit above dans Decoupage en mots, puis le premier mot de cette ligne est affecte 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 separateurs intercalaires sont affectes au dernier nom. S'il y a moins de mots lus dans le flux d'entree que de variables, des valeurs vides sont affectees a celles restantes. Les caracteres contenus dans la variable IFS sont utilises pour decouper la ligne en mots en utilisant les memes regles que celles utilisees par l'interpreteur pour le developpement (decrites above dans Decoupage en mots). Le caractere contre-oblique (\) permet de supprimer toute signification speciale pour le caractere suivant et autorise la continuation de ligne. Les options, si fournies, ont les significations suivantes : -a tableau Les mots sont affectes aux indices successifs d'une variable tableau de nom tableau, en commencant a 0. tableau est detruit avant que de nouvelles valeurs ne soient affectees. Les autres arguments nom sont ignores. -d delimiteur Le premier caractere de delimiteur est utilise pour terminer la ligne de saisie, plutot qu'un changement de ligne. Si delimiteur est une chaine vide, mapfile termine une ligne quand il lit un caractere NUL. -e Si l'entree standard provient d'un terminal, la bibliotheque readline (consultez READLINE above) est utilisee pour obtenir la ligne. Readline utilise les configurations d'edition en cours (ou par defaut, si l'edition de ligne n'etait pas prealablement active), mais utilise le completement de nom de fichier par defaut de readline. -i texte Si readline est utilisee pour lire la ligne, texte est place dans le tampon d'edition avant le debut de l'edition. -n nb_car read s'arrete apres avoir lu nb_car caracteres plutot que d'attendre une ligne complete en entree, mais un delimiteur est respecte si moins de nb_car caracteres ont ete lus avant le delimiteur. -N nb_car read s'arrete apres avoir lu exactement nb_car caracteres plutot que d'attendre une ligne complete en entree, sauf si une fin de fichier (EOF) est rencontree ou si read depasse son delai de reponse. Les delimiteurs rencontres en entree ne sont pas traites specialement et n'entrainent pas la fin de read avant que nb_car caracteres n'aient ete lus. Le resultat pas decoupe selon les caracteres dans IFS ; le but est que la variable soit exactement des caracteres lus (a l'exception du caractere contre-oblique ; consultez ci-dessous l'option -r). -p invite Afficher invite sur la sortie d'erreur standard, sans caractere final de changement de ligne, avant d'essayer de lire toute nouvelle saisie. L'invite est affichee seulement si l'entree vient d'un terminal. -r La contre-oblique n'agit pas comme un caractere de protection. La contre-oblique est consideree comme faisant partie de la ligne. En particulier, une contre-oblique suivie d'un changement de ligne ne peut pas etre consideree comme une continuation de ligne. -s Mode silencieux. Si une entree arrive a partir d'un terminal, les caracteres ne sont pas affiches. -t attente Conduire read a expirer et renvoyer un echec si une ligne complete en entree (ou un nombre indique de caracteres) n'a pas ete lue dans le delai en seconde. delai est un nombre decimal avec eventuellement des chiffres apres la virgule (NdT : point en l'occurrence). Cette option n'est effective que si read lit l'entree a partir d'un terminal, d'un tube, ou depuis un autre fichier special ; elle n'a aucun effet lors de la lecture d'un fichier normal. Si read expire, read sauvegarde toute entree partielle lue dans la variable nom indiquee. Si delai est nul, read se termine immediatement, sans essayer de lire des donnees. L'etat de sortie est 0 si une entree est disponible pour le descripteur de fichier indique, ou la lecture renverra EOF, non nulle sinon. L'etat final est superieur a 128 si le delai est depasse. -u df Lire l'entree a partir du descripteur de fichier df. Si aucun nom n'est fourni, la ligne lue, sans autre modification que le retrait du delimiteur de fin, est affectee a la variable REPLY. Le code renvoye est zero, sauf si une fin de fichier (EOF) est rencontree, si read depasse son delai de reponse (auquel cas le code renvoye est plus grand que 128), en cas d'erreur d'affectation (comme une affectation de variable a une variable en lecture seule) ou si un descripteur de fichier incorrect est fourni en argument de -u. readonly [-aAf] [-p] [nom[=mot] ...] Les noms indiques recoivent un attribut lecture seule ; les valeurs de ces noms ne pourront plus etre modifiees par des affectations ulterieures. Si l'option -f est fournie, les fonctions correspondant a ces noms sont marquees en consequence. L'option -a restreint l'action aux variables tableaux indices ; l'option -A restreint l'action aux variables tableaux associatifs. Si les deux options sont fournies, -A est prioritaire. Si aucun argument nom n'est indique ou si l'option -p est fournie, une liste de tous les noms en lecture seule est affichee. Les autres options peuvent etre utilisees pour restreindre l'affichage a un sous-ensemble de l'ensemble des noms en lecture seule. L'option -p conduit a afficher la sortie dans un format susceptible d'etre reutilise en entree. Si le nom d'une variable est suivi par =mot, la variable est configuree a mot. L'etat renvoye est 0, sauf si une option incorrecte a ete rencontree, si l'un des noms n'est pas un nom correct de variable de l'interpreteur ou si l'option -f est fournie avec un nom qui n'est pas une fonction. return [n] Forcer une fonction a arreter son execution et a renvoyer la valeur indiquee par n dans son contexte d'appel. Si n est omis, la valeur de retour renvoyee est celle de la derniere commande executee dans le corps de la fonction. Si return est execute par un gestionnaire de capture, la derniere commande utilisee pour determiner l'etat est la derniere commande executee avant le gestionnaire de capture. Si return est executee durant une capture de DEBUG, la derniere commande utilisee pour determiner l'etat est la derniere commande executee par le gestionnaire de capture avant que return soit invoquee. Si return est utilisee hors d'une fonction, mais pendant l'execution d'un script par la commande . (source), elle conduit a l'arret de l'execution du script par l'interpreteur et renvoie comme etat final du script soit n, soit l'etat final de la derniere commande executee 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 argument non numerique est fourni a return, ou si elle est utilisee hors d'une fonction ou pas lors de l'execution d'un script par . ou source. Toute commande associee a la capture de RETURN est executee avant la reprise de l'execution apres 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 variables de l'interpreteur dans un format susceptible d'etre reutilise en entree pour creer ou reinitialiser les variables actuelles. Les variables en lecture seule ne peuvent pas etre reinitialisees. En mode POSIX, seules les variables de l'interpreteur sont affichees. La sortie est triee en fonction des parametres linguistiques regionaux actuels. Lorsque des options sont indiquees, elles creent ou detruisent des attributs de l'interpreteur. Tous les arguments restant apres traitement des options sont consideres comme des valeurs pour les parametres positionnels et sont affectes, dans l'ordre, a : $1, $2, ... $n. Les options, si indiquees, ont les significations suivantes : -a Donner l'attribut export aux variables et fonctions creees ou modifiees et les marquer pour qu'elles soient exportees dans l'environnement des commandes executees ulterieurement. -b Signaler l'etat des taches terminees en arriere-plan immediatement, plutot que d'attendre l'affichage de la prochaine invite de base. N'est effectif que si le controle des taches est active. -e Se terminer immediatement si un pipeline (qui peut etre reduit a une unique commande simple), une liste ou une commande composee (consultez GRAMMAIRE DE L'INTERPRETEUR above), se termine avec un etat different de zero. L'interpreteur ne se termine pas si la commande qui echoue fait partie d'une liste de commandes suivant immediatement un mot clef while ou until, d'un test suivant les mots reserves if ou elif, d'une commande executee dans une liste && ou || sauf si la commande est situee apres le dernier && ou ||, d'une commande de pipeline a l'exception de la derniere, ou si la valeur renvoyee par la commande est inversee par !. Si une commande composee autre qu'un sous-interpreteur renvoie un etat non nul parce qu'une commande echoue alors que -e etait ignore, l'interpreteur ne se termine pas. Une capture sur ERR, si existante, est executee avant que l'interpreteur ne se termine. Cette option s'applique a l'environnement de l'interpreteur ainsi qu'a l'environnement de chaque sous-interpreteur individuellement (consultez ENVIRONNEMENT D'EXECUTION DES COMMANDES above), et peut conduire des sous-interpreteurs a se terminer avant d'y avoir execute toutes les commandes. Si une commande composee ou une fonction de l'interpreteur s'executent dans un contexte ou -e est ignore, aucune des commandes executees dans une commande composee ou dans un corps de fonction ne sera affectee par le reglage -e, meme si -e est defini et qu'une commande renvoie un etat d'echec. Si une commande composee ou une fonction de l'interpreteur definissent -e pendant son execution dans un contexte ou -e est ignore, ce reglage n'aura aucun effet avant la fin de la commande composee ou de la commande contenant l'appel de fonction. -f Desactiver le developpement des chemins. -h Memoriser l'emplacement des commandes lors de leur execution. Activee par defaut. -k Tous les arguments sous la forme d'affectations sont places dans l'environnement d'une commande, et non pas seulement ceux qui precedent le nom de la commande. -m Mode supervision. Le controle des taches est active. Cette option est activee par defaut pour les interpreteurs interactifs sur les systemes qui le permettent (consultez CONTROLE DES TACHES above). Tous les processus sont executes dans un groupe de processus separe. Quand une tache en arriere-plan se termine, l'interpreteur affiche une ligne contenant son etat final. -n Lecture de commandes sans execution. Cela peut etre utilise pour rechercher les erreurs de syntaxe dans un script. Cette option est ignoree par les interpreteurs interactifs. -o nom_d_option Le nom_d_option est l'un des suivants : allexport Identique a -a. braceexpand Identique a -B. emacs Utiliser une interface d'edition des lignes de commande << a la Emacs >>. C'est le comportement active par defaut quand l'interpreteur est interactif, sauf si l'interpreteur est demarre avec l'option --noediting. L'interface d'edition utilisee par read -e est modifiee egalement. errexit Identique a -e. errtrace Identique a -E. functrace Identique a -T. hashall Identique a -h. histexpand Identique a -H. history Activer l'historique des commandes, comme decrit above dans HISTORY. Cette option est activee par defaut dans les interpreteurs interactifs. ignoreeof Identique a l'execution de la commande d'interpreteur ``IGNOREEOF=10'' a ete executee (consultez Variables de l'interpreteur above). keyword Identique a -k. monitor Identique a -m. noclobber Identique a -C. noexec Identique a -n. noglob Identique a -f. nolog Actuellement ignoree. notify Identique a -b. nounset Identique a -u. onecmd Identique a -t. physical Identique a -P. pipefail Si existante, la valeur renvoyee par un pipeline est la valeur de la derniere commande (la plus a droite) a terminer avec un etat final different de zero ou zero si toutes les commandes du pipeline terminent avec succes. Desactivee par defaut. posix Aligner le comportement de bash sur la norme (mode POSIX), en ce qui concerne les options dont l'action par defaut differe de la norme POSIX. La section VOIR AUSSI below ci-dessous reference un document precisant la facon dont le mode POSIX affecte le comportement de bash. privileged Identique a -p. verbose Identique a -v. vi Utiliser une interface d'edition des lignes de commande << a la vi >>. L'interface d'edition utilisee par read -e est modifiee egalement. xtrace Identique a -x. Si -o est fournie sans nom_d_option, les valeurs actuelles des options sont affichees. Si +o est fournie sans nom_d_option, la serie de commandes set permettant de recreer la configuration actuelle d'options est affichee sur la sortie standard. -p Basculer en mode privilegie. Dans ce mode, les fichiers $ENV et $BASH_ENV ne sont pas traites, les fonctions de l'interpreteur ne sont pas heritees de l'environnement, et les variables SHELLOPTS, BASHOPTS, CDPATH, et GLOBIGNORE, si presentes dans l'environnement, sont ignorees. Si l'interpreteur demarre avec un UID (ou respectivement un GID) effectif different de son UID (GID) reel et si l'option -p n'est pas fournie, ce comportement est applique et l'UID (GID) effectif est positionne a l'UID (GID) reel. Si l'option -p est fournie au demarrage, l'UID (GID) effectif n'est pas modifie. Desactiver cette option conduit a la configuration des UID et GID effectifs a la valeur des UID et GID reels. -r Activer le mode interpreteur restreint. Cette option ne peut etre annulee une fois qu'elle a ete definie.' -t Terminer apres lecture et execution d'une commande. -u Considerer les variables inexistantes et les parametres differents des parametres speciaux << @ >> et << * >>, ou les variables tableau indicees par @ ou *, comme des erreurs lors du developpement des parametres. Si un developpement de variable inexistante ou de parametre est tente, l'interpreteur affiche un message d'erreur et, s'il n'est pas interactif, termine avec un etat different de zero. -v Afficher les lignes en entree de l'interpreteur lorsqu'elles sont lues. -x Apres le developpement de chaque commande simple, commande for, commande case, commande select ou commande for arithmetique, afficher la valeur developpee de PS4, suivie de la commande et ses arguments developpes ou la liste de mots associes. -B L'interpreteur effectue le developpement des accolades (consultez Developpement des accolades above). Activee par defaut. -C Si configuree, bash n'ecrasera pas un fichier existant avec les operateurs >, >& et <>. Ce comportement peut etre surpasse lors de la creation d'un fichier de sortie en utilisant l'operateur de redirection >| a la place de >. -E Si configuree, toute capture sur ERR est heritee par les fonctions d'interpreteur, les substitutions de commandes et les commandes executees dans un sous-interpreteur. La capture de ERR n'est normalement pas heritee dans de tels cas. -H Activer le style ! de substitution d'historique. C'est le comportement par defaut lorsque l'interpreteur est interactif. -P Si configuree, l'interpreteur ne resout pas les liens symboliques en executant des commandes comme cd qui modifient le repertoire de travail. Il utilise a la place le repertoire physique. Par defaut bash suit la chaine logique des repertoires lors des commandes qui modifient le repertoire actuel. -T Si configuree, toutes les captures de DEBUG et RETURN sont heritees par les fonctions de l'interpreteur, les substitutions de commande et les commandes executees dans un sous-interpreteur. Les captures de DEBUG et RETURN ne sont normalement pas heritees dans de tels cas. -- Si aucun argument ne suit cette option, alors les parametres positionnels sont detruits. Sinon, les parametres positionnels sont configures aux arguments, meme si certains d'entre eux commencent par un -. - Marquer la fin des options, tous les arguments restants sont alors affectes aux parametres positionnels. Les options -x et -v sont desactivees. S'il n'y a pas d'arguments, les parametres positionnels ne sont pas modifies. Par defaut les attributs sont desactives, sauf indication contraire. En utilisant << + >> a la place de << - >>, les options sont desactivees. Les options peuvent egalement etre fournies en argument lors de l'appel de l'interpreteur. Le jeu actuel des options peut etre trouve dans $-. La valeur renvoyee est toujours vrai, sauf si une option incorrecte est rencontree. shift [n] Les parametres positionnels a partir de n+1 ... sont renommes en $1 .... Les parametres representes par les nombres $# jusqu'a $#-n+1 sont detruits. n doit etre un entier positif inferieur ou egal a $#. Si n vaut 0, aucun parametre n'est modifie. Si n est omis, on suppose qu'il vaut 1. Si n est superieur a $#, les parametres positionnels ne sont pas modifies. L'etat renvoye est strictement positif si n est superieur a $# ou strictement negatif, sinon 0 est renvoye. shopt [-pqsu] [-o] [nom_opt ...] Basculer la valeur des reglages controlant le comportement de gestion des options de l'interpreteur. Les reglages peuvent soit etre ceux ci-dessous, soit, si l'option -o est utilisee, 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 affichee, avec l'indication de l'etat de chacune d'entre elles ; si des nom_opt sont fournis, la sortie est limitee a ces options. L'option -p conduit a un affichage de la sortie sous une forme susceptible d'etre reutilisee en entree. Les autres options ont les significations suivantes : -s Activer (creer) chaque nom_opt. -u Desactiver (detruire) chaque nom_opt. -q Supprimer la sortie normale (mode silencieux) ; l'etat renvoye indique si nom_opt est existante ou non. Si plusieurs arguments nom_opt sont indiques avec -q, l'etat renvoye est zero si tous les nom_opt sont actives ; different de zero sinon. -o Restreindre les valeurs de nom_opt a celles definies pour l'option -o de la commande interne set. Si l'option -s ou -u est utilisee sans argument nom_opt, shopt affiche respectivement les options existantes ou non existantes. Sauf indication contraire, les options shopt sont desactivees (detruites) par defaut. L'etat renvoye lors d'un affichage des options est zero si tous les nom_opt sont actives, different de zero sinon. Lors de la creation ou de la destruction d'options, l'etat renvoye est zero, a moins que nom_opt ne soit pas une option correcte d'interpreteur. La liste des options shopt est : assoc_expand_once Si existante, l'interpreteur supprime les evaluation multiples des indices de tableaux associatifs pendant l'evaluation d'expressions arithmetiques, lors de l'execution de commandes internes qui peuvent affecter des variables et lors de l'execution de commandes internes qui realisent un dereferencement de tableau. autocd Si existante, un nom de commande qui est le nom d'un repertoire est execute comme s'il etait l'argument de la commande interne cd. Cette option n'est utilisee que par les interpreteurs interactifs. cdable_vars Si existante, un argument de la commande interne cd qui n'est pas un repertoire est suppose etre un nom de variable dont la valeur est le repertoire vise. cdspell Si existante, les erreurs minimes de frappe dans un composant du repertoire en argument de la commande cd seront corrigees. Les erreurs corrigees sont les inversions d'un caractere, un caractere manquant et un caractere en trop. Si une correction est possible, le nom de repertoire corrige est affiche et la commande est execute. Cette option n'est utilisee que par les interpreteurs interactifs. checkhash Si existante, bash verifie si une commande trouvee dans la table de hachage existe avant d'essayer de l'executer. Si une commande hachee n'existe plus, une recherche normale de chemin est effectuee. checkjobs Si existante, bash affiche la liste des etats de toutes les taches en cours et arretees avant de terminer un interpreteur interactif. Si des taches sont en cours, la sortie est differee jusqu'a ce qu'une nouvelle sortie soit tentee sans commande intermediaire (consultez CONTROLE DES TACHES above). L'interpreteur repousse toujours la sortie si des taches sont arretees. checkwinsize Si existante, bash verifie la taille de la fenetre apres chaque commande externe et, au besoin, met a jour les valeurs des variables LINES et COLUMNS. cmdhist Si existante, bash essaie de sauvegarder les commandes s'etendant sur plusieurs lignes en un seul element d'historique. Cela facilite l'edition ulterieure de commandes multilignes. Cette option est activee par defaut, mais n'a un effet que si l'historique des commandes est active, comme decrit above dans HISTORY. compat31 compat32 compat40 compat41 compat42 compat43 compat44 compat50 Ces directives controlent les aspects du mode de compatibilite de l'interpreteur (consultez MODE DE COMPATIBILITE DE L'INTERPRETEUR below). complete_fullquote Si existante, bash protege tous les metacaracteres de l'interpreteur dans les noms de fichier et de repertoire lors du completement. Si non existante, bash supprime les metacaracteres comme les signes dollar du jeu de caracteres qui sera protege dans les noms de fichiers completes quand ces metacaracteres apparaissent dans des references de variable d'interpreteur dans des mots a completer. Cela signifie que les signes dollar dans les noms de variables qui se developpent en repertoires ne seront pas proteges ; cependant, tous les signes dollar apparaissant dans les noms de fichier ne seront pas proteges non plus. Ce n'est actif que si bash utilise des contre-obliques pour proteger des noms de fichier completes. Cette variable est definie par defaut, ce qui est le comportement de bash par defaut jusqu'a la version 4.2. direxpand Si existante, bash remplace les noms de repertoire par les resultats de developpement de mots lors du completement des noms de fichier. Cela modifie le contenu du tampon d'edition de readline. Sinon, bash essaye de conserver ce que l'utilisateur a tape. dirspell Si existante, bash essaie de corriger les erreurs de frappe sur les noms de repertoire lors du completement de mot si le nom de repertoire initialement fourni n'existe pas. dotglob Si existante, bash inclut les noms de fichiers commencant par un << . >> dans les resultats des developpements de chemins. Les noms de fichier << . >> et << .. >> doivent toujours etre toujours etre mis en correspondance explicitement, meme si dotglob existe. execfail Si existante, un interpreteur non interactif ne terminera pas s'il ne peut executer un fichier indique en argument de la commande interne exec. Un interpreteur interactif ne termine pas si exec echoue. expand_aliases Si existante, les alias sont developpes comme decrit above dans ALIAS. Cette option est activee par defaut pour les interpreteurs interactifs. extdebug Si elle existe a l'appel de l'interpreteur ou dans un fichier de lancement de l'interpreteur, prend les dispositions pour que le parametrage du tracage soit execute avant que l'interpreteur demarre, identique a l'option --debugger. Si elle est posee apres l'appel, le comportement prevu pour l'utilisation du tracage est active : 1. L'option -F de la commande interne declare affiche le nom du fichier source et le numero de ligne correspondant a chaque nom de fonction fourni comme argument. 2. Si la commande lancee par la capture de DEBUG renvoie une valeur differente de zero, la commande suivante est sautee et n'est pas executee. 3. Si la commande lancee par la capture de DEBUG renvoie la valeur 2 et si l'interpreteur s'execute dans un sous-programme (une fonction de l'interpreteur ou un script execute par les commandes internes . ou source), l'interpreteur simule un appel a return. 4. BASH_ARGC et BASH_ARGV sont mises a jour comme explique dans leurs descriptions. above). 5. Le tracage des fonctions est active : la substitution de commande, les fonctions de l'interpreteur et les sous-interpreteurs appeles avec ( command ) heritent des captures de DEBUG et RETURN. 6. Le tracage d'erreur est active : la substitution de commande, les fonctions de l'interpreteur et les sous-interpreteurs appeles avec ( command ) heritent de la capture de ERR. extglob Si existante, les fonctionnalites etendues de mise en correspondance decrites above dans Developpement des chemins sont activees. extquote Si existante, la protection par $'chaine' et $"chaine" est effectuee a l'interieur des developpements de ${parametres} entre guillemets doubles. Cette option est activee par defaut. failglob Si existante, les motifs qui echouent a faire correspondre les noms de fichiers pendant le developpement des chemins font qu'ils provoqueront une erreur de developpement. force_fignore Si existante, les suffixes indiques par la variable de l'interpreteur FIGNORE conduiront des mots a etre ignores lors du completement de mot, meme si les mots ignores sont les seuls completements possibles. Consultez VARIABLES DE L'INTERPRETEUR above pour une description de FIGNORE. Cette option est activee par defaut. globasciiranges Si existante, les expressions d'intervalle utilisees dans les motifs de correspondance des expressions entre crochets (consultez Motifs generiques above) se comportent comme avec les parametres regionaux traditionnels de C lors des comparaisons. Cela signifie que l'ordre de collation des parametres regionaux actuels n'est pas pris en compte, donc b ne sera pas ordonne entre A et B, et les caracteres ASCII en majuscule et minuscule seront fusionnes. globskipdots Si existante, le developpement des chemins ne sera jamais mis en correspondance avec les noms de fichier << . >> et << .. >>, meme si le motif debute par un << . >>. Cette option est activee par defaut. globstar Si existante, le motif ** utilise dans un contexte de developpement des chemins correspondra a tous les fichiers et zero ou plusieurs repertoires et sous-repertoires. Si le motif est suivi de /, seuls les repertoires et sous-repertoires correspondent. gnu_errfmt Si existante, les messages d'erreur de l'interpreteur seront ecrits dans le format standard GNU des messages d'erreurs. histappend Si existante, la file d'historique est ajoutee au fichier designe par la valeur de la variable HISTFILE lorsque l'interpreteur termine, plutot que d'ecraser ce fichier. histreedit Si existante et si readline est utilisee, un utilisateur peut reediter une substitution d'historique qui a echoue. histverify Si existante et si readline est utilisee, le resultat de la substitution d'historique n'est pas transmise immediatement a l'analyseur de l'interpreteur. A la place, la ligne resultante est chargee dans le tampon d'edition de readline, permettant des modifications ulterieures. hostcomplete Si existante et si readline est utilisee, bash essayera d'effectuer le completement des noms de machines lorsqu'un mot contient un @ (consultez Completement dans READLINE above). Cette option est activee par defaut. huponexit Si existante, bash enverra un signal SIGHUP a toutes les taches lorsqu'un interpreteur de connexion interactif termine. inherit_errexit Si existante, la substitution de commande herite de la valeur de l'option errexit, plutot que de la detruire dans l'environnement du sous-interpreteur. Cette option est activee quand le mode POSIX est active. interactive_comments Si existante, un mot commencant par un # conduira ce mot et tous les autres caracteres restants de la ligne a etre ignores dans un interpreteur interactif (consultez COMMENTAIRES above). Cette option est activee par defaut. lastpipe Si existante, et que le controle des taches n'est pas active, l'interpreteur execute la derniere commande d'un pipeline non executee en arriere-plan dans l'environnement d'interpreteur actuel. lithist Si existante et si l'option cmdhist est activee, les commandes multilignes sont sauvegardees dans l'historique avec des changements de ligne incorpores comme separateurs plutot que des points-virgules la ou c'est possible. localvar_inherit Si existante, les variables locales heritent de la valeur et des attributs d'une variable du meme nom qui existe avec une portee anterieure avant qu'une nouvelle valeur soit assignee. L'attribut -nameref n'est pas herite. localvar_unset Si existante, appeler unset sur des variables locales dans des portees de fonction anterieures les marque de telle maniere que des recherches ulterieures les trouve desactivees jusqu'a ce la fonction renvoie. Ce comportement est le meme que de detruire les variables locales avec la portee de la fonction actuelle. login_shell L'interpreteur cree cette option s'il est demarre en tant qu'interpreteur de connexion (consultez APPEL above). La valeur ne peut etre modifiee. mailwarn Si existante et s'il a ete accede a un fichier que bash surveille pour les courriers depuis sa derniere verification, le message << Le courrier dans fichier_de_courrier a ete lu. >> est affiche. no_empty_cmd_completion Si existante et si readline est utilisee, bash n'essaiera pas d'utiliser le PATH pour de possibles completements quand le completement est tente sur une ligne vide. nocaseglob Si existante, bash fait correspondre les noms de fichiers d'une facon insensible a la casse lors du developpement des chemins (consultez Developpement des chemins above). nocasematch Si existante, bash fait correspondre les motifs d'une facon insensible a la casse lors de la mise en correspondance pendant l'execution des commandes conditionnelles case ou [[, lorsqu'il procede a des developpements de motif de substitution de mot ou qu'il filtre des completement possibles dans le cadre d'un completement programmable. noexpand_translation Si existante, bash entoure les resultats de la traduction de la protection de $"..." par des guillemets simples au lieu de guillemets doubles. Si la chaine n'est pas traduite, cela n'a aucun effet. nullglob Si existante, bash autorise les motifs ne correspondant a aucun fichier (consultez Developpement des chemins above) a se developper en une chaine NULL plutot qu'en une valeur litterale. patsub_replacement Si existante, bash developpe les occurrences de & dans la chaine de remplacement de la substitution de motif vers le texte mis en correspondance par le motif, comme decrit dans Developpement des parametres above. Cette option est activee par defaut. progcomp Si existante, les outils de completement programmables (consultez Completement programmable above) sont actives. Cette option est activee par defaut. progcomp_alias Si existante et si le completement programmable est active, bash traite un nom de commande qui n'a pas de completement comme un possible alias et tente un developpement d'alias. S'il possede un alias, bash tente un completement programmable en utilisant le nom de commande resultant du developpement d'alias. promptvars Si existante, les chaines d'invite sont sujettes au developpement des parametres, a la substitution de commande, au developpement arithmetique et a la suppression des protections apres avoir ete developpees comme decrit dans INVITES. above. Cette option est activee par defaut. restricted_shell L'interpreteur definit cet option s'il demarre en mode restreint (consultez INTERPRETEUR RESTREINT below). Cette valeur ne peut pas etre changee. Elle n'est pas reinitialisee lorsque les fichiers d'initialisation sont executes, ce qui permet a ces fichiers de decouvrir si un interpreteur est restreint ou non. shift_verbose Si existante, la commande interne shift affiche un message d'erreur lorsque le nombre de decalages depasse le nombre de parametres positionnels. sourcepath Si existante, la commande interne source (.) utilise la valeur de la variable PATH pour trouver le repertoire contenant le fichier fourni en argument. Cette option est activee par defaut. varredir_close Si existante, l'interpreteur ferme automatiquement les descripteurs de fichier affectes 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 developpe par defaut les suites de caracteres de protection par contre-oblique. suspend [-f] Suspendre l'execution de l'interpreteur jusqu'a la reception d'un signal SIGCONT. Un interpreteur de connexion, ou un interpreteur dont le controle des taches n'est pas active, ne peut pas etre suspendu ; l'option -f permet de surpasser ce comportement et force sa suspension. L'etat renvoye est 0, sauf si l'interpreteur est un interpreteur de connexion, ou si le controle des taches n'est pas active et que l'option -f est absente. test expr [ expr ] Renvoyer un etat 0 (vrai) ou 1 (faux) suivant l'evaluation de la condition expr. Chaque operateur et operande doit etre represente par un argument distinct. Les expressions sont composees des primitives decrites 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 etre combinees avec les operateurs suivant, decrits par ordre de priorite decroissante. L'evaluation depend du nombre d'arguments, voir ci-dessous. La priorite des operateurs est utilisee quand il y a au moins cinq arguments. ! expr Vrai si expr est fausse. ( expr ) Renvoie la valeur de expr. Peut servir a surpasser la priorite normale des operateurs. expr1 -a expr2 Vrai si expr1 et expr2 sont toutes deux vraies. expr1 -o expr2 Vrai si expr1 ou expr2 est vraie. test et [ evaluent les conditions en fonction d'un jeu de regles dependant 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 premier argument est l'un des operateurs conditionnels unaires decrits above dans CONDITIONS la condition est vraie si le test unaire est vrai. Si le premier argument n'est pas un operateur conditionnel unaire correct, la condition est fausse. 3 arguments Les conditions suivantes sont appliquees dans l'ordre de la liste. Si le second argument est l'un des operateurs conditionnels binaires decrits above dans CONDITIONS, le resultat de la condition est le resultat du test binaire utilisant le premier et le troisieme argument en tant qu'operandes. Les operateurs -a et -o sont consideres comme des operateurs binaires quand il y a trois arguments. Si le premier argument est !, la valeur est la negation du test binaire utilisant les deuxieme et troisieme arguments. Si le premier argument est exactement ( et le troisieme argument est exactement ), le resultat est le test unaire du second argument. Sinon la condition est fausse. 4 arguments Les conditions suivantes sont appliquees dans l'ordre de la liste. Si le premier argument est !, le resultat est la negation de l'expression ternaire composee des arguments restants, le test binaire utilisant les deuxieme et troisieme arguments. Si le premier argument est exactement ( et le quatrieme argument est exactement ), le resultat est le test binaire des deuxieme et troisieme arguments. Sinon la condition est analysee et evaluee suivant la priorite utilisant les regles listees ci-dessus. 5 arguments ou plus La condition est analysee et evaluee selon les regles de priorite decrites ci-dessus. Lorsqu'ils sont utilises avec test ou [, les operateurs < et > ordonnent d'un point de vue lexicographique en utilisant l'ordre ASCII. times Afficher les durees cumulees utilisateur et systeme pour l'interpreteur et les processus lances par cet interpreteur. L'etat renvoye est 0. trap [-lp] [[argument] signal ...] La commande argument doit etre lue et executee quand l'interpreteur recoit au moins un signal. Si argument est absent (et qu'un seul signal est fourni) ou -, chaque signal indique est reinitialise a sa position d'origine (la valeur qu'il avait lors de l'entree dans l'interpreteur). Si argument est la chaine NULL, chaque signal indique est ignore par l'interpreteur et par les commandes qu'il appelle. Si argument n'est pas present et que -p est fourni, les commandes capturees associees a chaque signal sont affichees. Si aucun argument n'est fourni, ou si seul -p est donne, trap affiche la liste des commandes associees a chaque signal. L'option -l conduit l'interpreteur a afficher une liste des noms de signal et leur numero correspondant. Chaque signal est soit un nom de signal defini dans , soit un numero de signal. Les noms de signal sont insensibles a la casse et le prefixe SIG est optionnel. Si un signal est EXIT (0), la commande argument est executee lors de la sortie de l'interpreteur. Si un signal est DEBUG, la commande argument est executee avant toute commande simple, commande for, commande case, commande select, toute commande for arithmetique, et avant que la premiere commande n'execute une fonction de l'interpreteur (consultez GRAMMAIRE DE L'INTERPRETEUR. above). Reportez-vous a la description de l'option extdebug 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 executee a chaque fois qu'une fonction de l'interpreteur, ou un script execute avec les commandes internes . ou source, termine son execution. Si un signal est ERR, la commande argument est executee chaque fois qu'un pipeline (qui peut etre reduit a une unique commande simple), une liste ou une commande composee, renvoie un etat final different de zero, soumis aux conditions suivantes. La capture ERR n'est pas executee si la commande echouant fait partie d'une liste de commandes suivant immediatement un mot clef while ou until, d'un test dans une construction if, d'une commande executee au sein d'une liste de && ou de || exceptee la commande suivant le dernier && ou ||, n'importe quelle commande d'un pipeline sauf la derniere, ou si la valeur renvoyee par la commande est inversee par !. Ce sont les memes conditions que celles observees par l'option errexit (-e). Les signaux ignores en entrant dans l'interpreteur ne peuvent etre captures ou reinitialises. Les signaux captures qui ne sont pas ignores sont reinitialises a leur valeur d'origine dans un sous-interpreteur ou un environnement de sous-interpreteur quand il est cree. L'etat renvoye est faux si un signal n'est pas valable, sinon trap renvoie vrai. type [-aftpP] nom [nom ...] Sans option, indiquer la facon d'interpreter chaque nom s'il est utilise en nom de commande. Si l'attribut -t est utilise, type affiche une des chaines alias, keyword, function, builtin ou file selon que le nom est un alias, un mot clef reserve de l'interpreteur, une fonction, une commande interne ou un fichier sur le disque. Si le nom n'est pas trouve, rien n'est affiche et un etat final a faux est renvoye. Si l'option -p est utilisee, type renvoie le nom du fichier qui sera execute 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, meme si ``type -t name'' ne renvoyait pas file. Si une commande est disponible dans la table de hachage, -p et -P affichent la valeur de cette table, qui n'est pas necessairement le fichier apparaissant en premier dans PATH. Si l'option -a est appelee, type affiche tous les emplacements contenant un executable du nom indique. Cela inclut les alias et les fonctions, sauf si l'option -p est egalement presente. La table de hachage des commandes n'est pas consultee avec l'option -a. L'option -f supprime la fonction de l'interpreteur de consultation de table, comme avec la commande interne command. type renvoie vrai si tous les arguments sont trouves et faux si aucun n'a ete trouve. ulimit [-HS] -a ulimit -HS] [-bcdefiklmnpqrstuvxPRT [limitation]] Fournir, sur les systemes qui le permettent, un mecanisme de controle des ressources disponibles pour l'interpreteur 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 indiquee. Une limitation stricte ne peut pas etre augmentee par un utilisateur non privilegie une fois qu'elle a ete configuree ; une limitation flexible peut etre augmentee jusqu'a la valeur de la limitation stricte correspondante. Si ni -H ni -S n'est indique, les limitations stricte et flexible sont toutes deux configurees. La valeur de la limitation peut etre un nombre (utilisant les unites particulieres de la ressource) ou l'une des valeurs speciales hard, soft ou unlimited, qui signifient, respectivement, la limitation stricte actuelle, la limitation flexible actuelle et l'absence de limitation. Si la limitation est omise, la valeur actuelle de la limitation flexible pour la ressource est affichee, a moins que l'option -H soit indiquee. Quand plusieurs ressources sont indiquees, les noms des limitations et leurs unites, le cas echeant, sont affiches avant les valeurs. Les autres options sont interpretees comme suit : -a Toutes les limitations actuelles sont signalees ; aucune limitation n'est fixee -b La taille maximale du tampon de socket -c La taille maximale des fichiers core crees -d La taille maximale du segment de donnees d'un processus -e La priorite maximale d'ordonnancement (<< nice >>) -f La taille maximale d'un fichier ecrit par l'interpreteur et ses enfants -i Le nombre maximal de signaux en attente -k Le nombre maximal de kqueue qui peuvent etre alloues -l La taille maximale qui peut etre verrouillee en memoire -m La taille maximale de la partie residente d'un processus (<< resident set size >> ou RSS, la plupart des systemes ne respectent pas cette limite) -n Le nombre maximal de descripteurs de fichiers ouverts (la plupart des systemes ne permettent pas de modifier cette valeur) -p La taille d'un tube en blocs de 512 octets (parfois inexistante) -q Le nombre maximal d'octets dans les files de messages POSIX -r La priorite maximale d'ordonnancement temps-reel -s La taille maximale de la pile -t La duree maximale, en seconde, de temps processeur accorde a un processus -u Le nombre maximal de processus autorises pour un seul utilisateur -v La quantite maximale de memoire virtuelle disponible pour l'interpreteur et, sur certains systemes, pour ses enfants -x Le nombre maximal de verrous de fichiers -P Le nombre maximal de pseudo-terminaux -R La duree maximale pendant laquelle un processus en temps reel peut s'executer avant de bloquer, en microsecondes. -T Le nombre maximal de processus legers (<< threads >>) Si une limitation est indiquee, et que l'option -a n'est pas donnee, limitation sera la nouvelle valeur pour la ressource indiquee. Si aucune option n'est indiquee alors -f est supposee. 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 unite le bloc de 512 octets ; pour -P, -T, -b, -k, -n et -u qui n'ont pas d'unite ; 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 ete fournis ou si une erreur se produit en configurant une nouvelle limitation. umask [-p] [-S] [mode] Le masque de creation de fichier de l'utilisateur est configure a mode. Si mode commence par un chiffre, il est interprete comme un nombre octal, sinon il est considere comme un masque symbolique, semblable a ceux acceptes par chmod(1). Si mode est omis ou si l'option -S est fournie, la valeur actuelle du masque est affichee. L'option -S conduit a l'affichage du masque sous forme symbolique, l'affichage par defaut etant en octal. Si l'option -p est fournie et si le mode est omis, la sortie a lieu dans un format reutilisable en entree. L'etat renvoye est 0 si le mode a pu etre change correctement ou si aucun argument mode n'a ete fourni, et faux sinon. unalias [-a] [nom ...] Supprimer le nom de la liste des alias definis. Si l'option -a est fournie, toutes les definitions d'alias sont supprimees. La valeur renvoyee est vrai, sauf si un nom fourni n'est pas un alias defini. unset [-fv] [-n] [nom ...] Pour chaque nom indique, supprimer la variable ou la fonction correspondante. Si l'option -v est indiquee, chaque nom se rapporte a une variable de l'interpreteur, et cette variable est supprimee. Les variables en lecture seule ne peuvent pas etre detruites. Si l'option -f est indiquee, chaque nom se rapporte a une fonction de l'interpreteur et la definition de la fonction est supprimee. Si l'option -n est fournie, et que nom est une variable avec l'attribut nameref, nom sera detruite plutot que la variable qu'elle reference. -n n'a pas d'effet si l'option -f est fournie. Si aucune option n'est fournie, chaque nom fait reference a une variable ; si aucune variable de ce nom n'existe, toutes les fonctions de ce nom sont detruites. Toutes les variables et fonctions detruites sont supprimees de l'environnement transmis aux commandes ulterieures. Si l'une des variables BASH_ALIASES, BASH_ARGV0, BASH_CMDS, BASH_COMMAND, BASH_SUBSHELL, BASHPID, COMP_WORDBREAKS, DIRSTACK, EPOCHREALTIME, EPOCHSECONDS, FUNCNAME, GROUPS, HISTCMD, LINENO, RANDOM, SECONDS, ou SRANDOM est detruite, elle perd ses proprietes particulieres, meme si elle est recreee ulterieurement. L'etat final est vrai sauf si un des noms est en lecture seule ou ne peut pas etre detruit. wait [-fn] [-p nom_de_variable] [id ...] Attendre que tous les processus enfants indiques s'executent et renvoient leur etat final. Chaque id peut etre un PID ou une specification de tache ; si une specification de tache est indiquee, la fin de tous les processus du pipeline de cette tache sera attendue. Si id est omis, wait attend la fin de toutes les taches executees en arriere-plan et la substitution du dernier processus execute, si l'id du processus est le meme que $!, et le code de retour est zero. Si l'option -n est fournie, wait attend qu'une seule tache de la liste d'id ou, si aucun id n'est fourni, que toutes les taches se terminent et renvoient leur etat final. Si aucun des arguments fournis n'est un enfant de l'interpreteur, l'etat renvoye est 127. Si l'option -p est fournie, l'identificateur de processus ou de tache de la tache pour laquelle l'etat final est renvoye est affecte a la variable nom_de_variable nommee par l'argument de l'option. La variable sera detruite initialement, avant toute affectation. C'est utile seulement lorsque l'option -n est fournie. Fournir l'option -f, quand le controle des taches est active, force wait a attendre que id se termine avant de renvoyer son etat, plutot que de renvoyer son etat quand il change. Si id indique un processus ou une tache inexistants, l'etat renvoye est 127. Si wait est interrompu par un signal, l'etat renvoye sera superieur a 128 comme decrit dans SIGNAUX. above. Sinon, l'etat renvoye est l'etat final du dernier processus, ou tache, attendu. MODE DE COMPATIBILITE DE L'INTERPRETEUR Bash-4.0 a introduit le concept de niveau de compatibilite de l'interpreteur specifie 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 compatibilite en cours - les options s'excluent mutuellement. Le niveau de compatibilite est destine a permettre aux utilisateurs de choisir un comportement d'une version anterieure qui est incompatible avec les versions plus recentes lors des migrations de scripts pour utiliser les fonctionnalites et les comportements actuels. C'est cense etre une solution temporaire. Cette section ne mentionne pas les comportements standards d'une version particuliere (par exemple, la configuration a compat32 signifie que la protection de la partie droite de l'operateur de correspondance d'une expression rationnelle protege les caracteres speciaux d'expression rationnelle dans le mot, ce qui est le comportement par defaut dans bash-3.2 et les versions suivantes). Si l'utilisateur active, par exemple, compat32, cela peut affecter le comportement des autres niveaux de compatibilite jusqu'a, et y compris, le niveau de compatibilite en cours. L'idee est que chaque niveau de compatibilite controle les comportements qui ont change dans cette version de bash, mais ces comportements peuvent avoir ete presents dans des versions precedentes. Par exemple, la modification pour utiliser les comparaisons basees sur les parametres linguistiques regionaux avec la commande [[ a ete introduite dans bash-4.1 et les versions precedentes utilisaient des comparaisons basees sur ASCII, aussi, activer compat32 activera egalement les comparaisons basees sur ASCII. Cette granularite peut ne pas etre suffisante pour tous les usages, et, de ce fait, les utilisateurs devraient employer prudemment les niveaux de compatibilite. Lisez la documentation d'une fonctionnalite particuliere pour decouvrir le comportement actuel. Bash-4.3 a introduit une nouvelle variable de l'interpreteur : BASH_COMPAT. La valeur affectee a cette variable (un numero de version decimal, comme 4.2, ou un nombre entier correspondant a l'option compatNN, comme 42) determine le niveau de compatibilite. A partir de bash-4.4, bash a commence a rendre obsoletes les niveaux de compatibilite plus anciens. Les options finiront par etre retirees au profit de BASH_COMPAT. Bash-5.0 est la derniere version pour laquelle il y aura une option de shopt particuliere pour la version precedente. Les utilisateurs devraient utiliser BASH_COMPAT avec bash-5.0 et les versions ulterieures. Le tableau suivant decrit les changements de comportement controles par chaque configuration de niveau de compatibilite. L'etiquette compatNN est un raccourci utilise pour configurer le niveau de compatibilite a NN en utilisant un des mecanismes suivants. Pour les versions anterieures a bash-5.0, le niveau de compatibilite peut etre fixe avec l'option de compatNN de shopt correspondante. Pour bash-4.3 et les versions ulterieures, la variable BASH_COMPAT est privilegiee et devient obligatoire pour bash-5.1 et les versions ulterieures. compat31 - La protection de la partie droite de l'operateur de correspondance (=~) d'une expression rationnelle de la commande [[ n'a aucun effet particulier. compat32 - L'interruption d'une liste de commandes comme << a ; b ; c >> provoque l'execution de la commande suivante dans la liste (avec bash-4.0 et les versions ulterieures, l'interpreteur se comporte comme s'il recevait l'interruption, aussi l'interruption d'une commande dans une liste termine l'execution de toute la liste). compat40 - Les operateurs < et > de la commande [[ ne tiennent pas compte des parametres linguistiques regionaux actuels lors des comparaisons de chaines. Ils utilisent l'ordre ASCII. Les versions de bash anterieures a 4.1 utilisent la collation ASCII et strcmp(3). bash a partir de la version 4.1 utilise la suite de collation des parametres linguistiques regionaux et strcoll(3). compat41 - En mode POSIX, time peut etre suivi par des options tout en continuant a etre reconnu comme un mot reserve (c'est l'interpretation POSIX 267). - En mode POSIX, l'analyseur exige qu'il existe un nombre pair de guillemets simples dans la partie mot d'un developpement de parametres protege par des guillemets doubles et les traite de facon particuliere, ainsi les caracteres entre les guillemets simples sont consideres comme proteges (c'est l'interpretation POSIX 221). compat42 - La chaine de remplacement dans le motif de substitution entre guillemets doubles n'est pas sujette a la suppression des guillemets, comme dans les versions posterieures a bash-4.2. - En mode POSIX, les guillemets simples sont consideres particuliers lors du developpement de la partie mot d'un developpement de parametres protegee par des guillemets doubles et peuvent etre utilises pour proteger une accolade fermante ou un autre caractere special (cela fait partie de l'interpretation POSIX 221) ; dans les versions ulterieures, les guillemets simples ne sont pas traites particulierement dans les developpements de mots entre guillemets doubles. compat43 - L'interpreteur n'affiche pas de message d'avertissement si une tentative est faite d'utiliser une affectation composee protegee comme un argument a declarer (par exemple, declarer -a toto='(1 2)'). Les versions ulterieures avertissent que cette utilisation est obsolete. - Les erreurs de developpement de mots ne sont pas considerees comme des erreurs fatales qui provoquent l'echec de la commande en cours, meme en mode POSIX (le comportement par defaut est de les traiter comme des erreurs fatales, ce qui fait que l'interpreteur termine). - Lors de l'execution d'une fonction de l'interpreteur, l'etat de la boucle (while/until/ etc.) n'est pas reinitialise, aussi break ou continue dans cette fonction interrompt ou poursuit la boucle dans le contexte de l'appel. Bash-4.4 et les versions ulterieures reinitialisent l'etat de la boucle pour eviter cela. compat44 - L'interpreteur configure les valeurs utilisees par BASH_ARGV et BASH_ARGC de telle maniere qu'elles peuvent se developper en parametres positionnels de l'interpreteur meme si le mode de tracage etendu n'est pas active. - Un sous-interpreteur herite des boucles du contexte de son parent, aussi break ou continue provoqueront la terminaison du sous-interpreteur. Bash-5.0 et les versions ulterieures reinitialisent l'etat de la boucle pour eviter la terminaison. - Les affectations de variables precedant des commandes internes comme export et readonly qui configurent des attributs, continuent a affecter des variables ayant le meme nom dans l'environnement d'appel meme si l'interpreteur n'est pas en mode POSIX. compat50 - Bash-5.1 a modifie la maniere dont $RANDOM est genere pour introduire un peu plus d'alea. Si le niveau de compatibilite de l'interpreteur est fixe a 50 ou moins, bash retourne a la methode de bash-5.0 et des versions anterieures, aussi l'ensemencement du generateur de nombres aleatoires en affectant une valeur a RANDOM produira la meme sequence qu'avec bash-5.0. - Si la table de hachage des commandes est vide, les versions de bash anterieures a bash-5.1 affichaient un message d'information a cet effet meme quand elles produisaient une sortie qui pouvait etre reutilisee en entree. Bash-5.1 supprime ce message quand l'option -l est fournie. compat51 - La commande interne unset traite les tentatives pour detruire les tableaux indices par @ et * differemment selon que le tableau est un tableau indice ou associatif, et autrement que dans les versions precedentes. INTERPRETEUR RESTREINT Si bash demarre sous le nom rbash ou si l'option -r est fournie lors de son appel, l'interpreteur devient restreint. Un interpreteur restreint permet de creer un environnement plus controle qu'un interpreteur standard. Il se comporte de meme facon que bash a la difference des actions suivantes qui sont interdites ou non effectuees : - changer de repertoire avec cd ; - creer ou detruire 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 argument de l'option -p de la commande interne hash ; - importer une definition de fonction dans l'environnement au demarrage ; - analyser les valeurs de SHELLOPTS de l'environnement d'interpreteur au demarrage ; - rediriger la sortie en utilisant les operateurs de redirection >, >|, <>, >&, &> et >> ; - utiliser la commande interne exec pour remplacer l'interpreteur 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'interpreteur desactivees ; - indiquer l'option -p a la commande interne commande ; - supprimer le mode restreint avec set +r ou shopt -u restricted_shell. Ces restrictions sont mises en place apres la lecture de tous les fichiers d'initialisation. When a command that is found to be a shell script is executed (see COMMAND EXECUTION above), rbash supprime toute restriction dans l'interpreteur cree pour executer le script. VOIR AUSSI Manuel de reference 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 Utilities, 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'executable bash /etc/profile Le fichier d'initialisation commun a tout le systeme, execute pour les interpreteurs de commandes de connexion ~/.bash_profile Le fichier d'initialisation personnel execute pour les interpreteurs de commandes de connexion ~/.bashrc Le fichier d'initialisation personnel pour les interpreteurs interactifs ~/.bash_logout Le fichier de nettoyage personnel des interpreteurs de commandes de connexion, execute lorsqu'un interpreteur de commandes de connexion termine ~/.bash_history La valeur par defaut 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 reellement d'une anomalie et qu'elle apparait bien dans la derniere version disponible de bash. La derniere version est toujours disponible a partir de ftp://ftp.gnu.org/pub/gnu/bash/. Une fois que vous avez determine qu'une anomalie existe effectivement, utilisez la commande bashbug pour envoyer un signalement d'anomalie. Si vous avez un correctif, vous etes encourage a l'envoyer en meme temps ! Les suggestions ou les signalements d'anomalies de nature << philosophique >> peuvent etre envoyes (en anglais) a bug-bash@gnu.org ou postes dans le groupe Usenet gnu.bash.bug. TOUS les signalements d'anomalie doivent contenir : Le numero de version de bash Le materiel et le systeme d'exploitation utilises Le compilateur utilise pour compiler Une description (en anglais) de l'anomalie Un petit script ou une << recette >> qui demontre l'anomalie bashbug insere automatiquement les trois premiers elements de cette liste dans le formulaire qu'il fournit pour remplir un signalement d'anomalie. Les commentaires et signalement d'anomalies concernant la version originale de cette page de manuel (en anglais) doivent etre transmis a chet.ramey@case.edu. Ceux concernant cette version francaise peuvent etre envoyes a debian-l10n-french@lists.debian.org. BOGUES Cet interpreteur de commandes est trop gros et trop lent. Il y a quelques differences subtiles de comportement entre bash et les versions traditionnelles de sh, principalement a cause des specifications POSIX. L'utilisation des alias peut avoir des consequences inattendues. Les commandes internes et les fonctions de l'interpreteur ne peuvent pas etre suspendues/relancees. Les commandes composees et les suites de commandes de la forme << a ; b ; c >> ne sont pas gerees elegamment lors d'une interruption de processus. En cas de suspension d'un processus, l'interpreteur execute immediatement la commande suivante. Il suffit de placer cette suite de commandes entre parentheses pour la forcer a creer un sous-interpreteur, qui, lui, pourra etre suspendu en bloc. Les variables de type tableau ne peuvent pas (encore) etre exportees. Il ne peut exister qu'un seul coprocessus actif a la fois. TRADUCTION La traduction francaise de cette page de manuel a ete creee par Christophe Blaess , Thierry Vignaud , Amand Tihon , Alain Portal , Frederic Daniel Luc Lehobey , David Prevot et Jean-Pierre Giraud Cette traduction est une documentation libre ; veuillez vous reporter a la GNU General Public License version 3 concernant les conditions de copie et de distribution. Il n'y a aucune RESPONSABILITE LEGALE. Si vous decouvrez un bogue dans la traduction de cette page de manuel, veuillez envoyer un message a . GNU Bash 5.2 19 septembre 2022 BASH(1)