bash - manuel de référence, options, exemples de commandes


NOM

bash - GNU Bourne-Again SHell

SYNOPSIS

bash [options] [command_string | file]

DROITS D'AUTEUR

Bash est protégé par Copyright (C) 1989-2020 par la Free Software Foundation, Inc.

DESCRIPTION

Bash est un interpréteur de langage de commande compatible avec sh qui exécute des commandes lues à partir de l'entrée standard ou d'un fichier. Bash intègre également des fonctionnalités utiles des shells Korn et C (ksh et csh ).

Bash est destiné à être une implémentation conforme de la partie Shell et Utilitaires de la spécification IEEE POSIX (norme IEEE 1003.1). Bash peut être configuré pour être conforme à POSIX par défaut.

OPTIONS

Toutes les options de shell à un seul caractère documentées dans la description de la commande intégrée set, y compris -o, peuvent être utilisées comme options lorsque le shell est appelé. De plus, bash interprète les options suivantes lorsqu'il est appelé :

-c

Si l'option -c est présente, les commandes sont lues à partir du premier argument non optionnel command_string. S'il y a des arguments après command_string, le premier argument est affecté à $0 et tous les arguments restants sont affectés aux paramètres de position. L'affectation à $0 définit le nom du shell, qui est utilisé dans les messages d'avertissement et d'erreur.

-i

Si l'option -i est présente, le shell est interactif.

-l

Faites en sorte que bash agisse comme s'il avait été appelé en tant que shell de connexion (voir INVOCATION ci-dessous).

-r

Si l'option -r est présente, le shell devient restricted (voir RESTRICTED SHELL ci-dessous).

-s

Si l'option -s est présente, ou s'il ne reste aucun argument après le traitement de l'option, alors les commandes sont lues à partir de l'entrée standard. Cette option permet de définir les paramètres de position lors de l'appel d'un shell interactif ou lors de la lecture d'une entrée via un tube.

-D

Une liste de toutes les chaînes entre guillemets doubles précédées de $ est imprimée sur la sortie standard. Il s'agit des chaînes soumises à la traduction lorsque les paramètres régionaux actuels ne sont pas C ou POSIX. Cela implique l'option -n ; aucune commande ne sera exécutée.

[-+]O [shopt_option]

shopt_option est l'une des options du shell acceptées par la commande intégrée shopt (voir COMMANDES INTERNES DU SHELL ci-dessous). Si shopt_option est présent, -O définit la valeur de cette option ; +O l'annule. Si shopt_option n'est pas fourni, les noms et les valeurs des options du shell acceptées par shopt sont imprimés sur la sortie standard. Si l'option d'invocation est +O, la sortie est affichée dans un format qui peut être réutilisé comme entrée.

--

Un -- signale la fin des options et désactive le traitement ultérieur des options. Tous les arguments après -- sont traités comme des noms de fichiers et des arguments. Un argument de - est équivalent à --.

Bash interprète également un certain nombre d'options multi-caractères. Ces options doivent apparaître sur la ligne de commande avant les options à caractère unique pour être reconnues.

--debugger

Faites en sorte que le profil du débogueur soit exécuté avant le démarrage du shell. Active le mode de débogage étendu (voir la description de l'option extdebug de la commande intégrée shopt ci-dessous).

--dump-po-strings

Équivalent à -D, mais la sortie est au format de fichier GNU gettext po (objet portable).

--dump-strings

Équivalent à -D.

--help

Affichez un message d'utilisation sur la sortie standard et quittez avec succès.

--init-file file
--rcfile file

Exécutez les commandes depuis fichier au lieu du fichier d'initialisation personnel standard ~/.bashrc si le shell est interactif (voir INVOCATION ci-dessous).

--login

Équivalent à -l.

--noediting

N'utilisez pas la bibliothèque GNU readline pour lire les lignes de commande lorsque le shell est interactif.

--noprofile

Ne lisez ni le fichier de démarrage à l'échelle du système  /etc/profile  ni aucun des fichiers d'initialisation personnels ~/.bash_profile, ~/.bash_login , ou ~/.profile. Par défaut, bash lit ces fichiers lorsqu'il est appelé en tant que shell de connexion (voir INVOCATION ci-dessous).

--norc

Ne lisez pas et n'exécutez pas le fichier d'initialisation personnel ~/.bashrc si le shell est interactif. Cette option est activée par défaut si le shell est appelé en tant que sh.

--posix

Modifiez le comportement de bash où l'opération par défaut diffère de la norme POSIX pour correspondre à la norme (mode posix). Voir VOIR AUSSI ci-dessous pour une référence à un document qui détaille comment le mode posix affecte le comportement de bash.

--restricted

Le shell devient restreint (voir SHELL RESTREINT ci-dessous).

--verbose

Équivalent à -v.

--version

Afficher les informations de version pour cette instance de bash sur la sortie standard et quitter avec succès.

ARGUMENTS

S'il reste des arguments après le traitement des options et que ni l'option -c ni l'option -s n'ont été fournies, le premier argument est supposé être le nom d'un fichier contenant des commandes shell . Si bash est invoqué de cette manière, $0 est défini sur le nom du fichier et les paramètres de position sont définis sur les arguments restants. Bash lit et exécute les commandes de ce fichier, puis quitte. L'état de sortie de Bash est l'état de sortie de la dernière commande exécutée dans le script. Si aucune commande n'est exécutée, l'état de sortie est 0. Une tentative est d'abord faite pour ouvrir le fichier dans le répertoire courant, et, si aucun fichier n'est trouvé, alors le shell recherche les répertoires dans PATH pour le script.

INVOCATION

Un shell de connexion est un dont le premier caractère de l'argument zéro est un -, ou un qui commence avec l'option --login.

Un shell interactif est un shell démarré sans arguments non optionnels (sauf si -s est spécifié) et sans l'option -c dont l'entrée standard et l'erreur sont tous les deux connectés à des terminaux (comme déterminé par isatty(3)), ou un a démarré avec l'option -i.

PS1 est défini et $- inclut i si bash est interactif, permettant à un script shell ou à un fichier de démarrage de tester cet état.

Les paragraphes suivants décrivent comment bash exécute ses fichiers de démarrage. Si l'un des fichiers existe mais ne peut pas être lu, bash signale une erreur. Les tildes sont développés dans les noms de fichiers comme décrit ci-dessous sous Tilde Expansion dans la section EXPANSION.

Lorsque bash est appelé en tant que shell de connexion interactif ou en tant que shell non interactif avec l'option --login, il lit et exécute d'abord les commandes du fichier /etc/profile, si ce fichier existe. Après avoir lu ce fichier, il recherche ~/.bash_profile, ~/.bash_login et ~/.profile, dans cet ordre, et lit et exécute les commandes à partir de la première qui existe et est lisible. L'option --noprofile peut être utilisée au démarrage du shell pour empêcher ce comportement.

Lorsqu'un shell de connexion interactif se ferme ou qu'un shell de connexion non interactif exécute la commande intégrée exit, bash lit et exécute les commandes à partir du fichier ~/.bash_logout, s'il existe.

Lorsqu'un shell interactif qui n'est pas un shell de connexion est démarré, bash lit et exécute les commandes de ~/.bashrc, si ce fichier existe. Cela peut être inhibé en utilisant l'option --norc. L'option --rcfile file forcera bash à lire et exécuter des commandes depuis file au lieu de ~ /.bashrc.

Lorsque bash est démarré de manière non interactive, pour exécuter un script shell, par exemple, il recherche la variable BASH_ENV dans l'environnement, développe sa valeur si elle y apparaît, et utilise la valeur développée comme nom d'un fichier à lire et à exécuter. Bash se comporte comme si la commande suivante était exécutée :

if [ -n "$BASH_ENV" ]; then . "$BASH_ENV"; fi

mais la valeur de la variable PATH n'est pas utilisée pour rechercher le nom de fichier.

Si bash est invoqué avec le nom sh, il essaie d'imiter le comportement de démarrage des versions historiques de sh aussi fidèlement que possible, tout en se conformant à également la norme POSIX. Lorsqu'il est appelé en tant que shell de connexion interactif ou non interactif avec l'option --login, il tente d'abord de lire et d'exécuter des commandes depuis /etc/profile et <~/.profile, dans cet ordre. L'option --noprofile peut être utilisée pour inhiber ce comportement. Lorsqu'il est appelé en tant que shell interactif avec le nom sh, bash recherche la variable ENV, développe sa valeur si elle est définie et utilise le valeur développée comme nom d'un fichier à lire et à exécuter. Puisqu'un shell invoqué en tant que sh n'essaie pas de lire et d'exécuter des commandes à partir d'autres fichiers de démarrage, l'option --rcfile n'a aucun effet. Un shell non interactif appelé avec le nom sh n'essaie pas de lire les autres fichiers de démarrage. Lorsqu'il est appelé en tant que sh, bash passe en mode posix après la lecture des fichiers de démarrage.

Lorsque bash est démarré en mode posix, comme avec l'option de ligne de commande --posix, il suit la norme POSIX pour les fichiers de démarrage. Dans ce mode, les shells interactifs développent la variable ENV et les commandes sont lues et exécutées à partir du fichier dont le nom est la valeur développée. Aucun autre fichier de démarrage n'est lu.

Bash tente de déterminer quand il est exécuté avec son entrée standard connectée à une connexion réseau, comme lorsqu'il est exécuté par le démon shell distant, généralement rshd, ou le démon shell sécurisé sshd. Si bash détermine qu'il est exécuté de cette manière, il lit et exécute les commandes de ~/.bashrc, si ce fichier existe et est lisible. Il ne le fera pas s'il est appelé en tant que sh. L'option --norc peut être utilisée pour inhiber ce comportement, et l'option --rcfile peut être utilisée pour forcer la lecture d'un autre fichier, mais ni rshd ni sshd invoquent généralement le shell avec ces options ou permettent de les spécifier.

Si le shell est démarré avec l'ID d'utilisateur (groupe) effectif différent de l'ID d'utilisateur (groupe) réel et que l'option -p n'est pas fournie, aucun fichier de démarrage n'est lu, les fonctions du shell ne le sont pas. héritées de l'environnement, les variables SHELLOPTS, BASHOPTS, CDPATH et GLOBIGNORE, si elles apparaissent dans l'environnement , sont ignorés et l'ID utilisateur effectif est défini sur l'ID utilisateur réel. Si l'option -p est fournie à l'invocation, le comportement de démarrage est le même, mais l'ID utilisateur effectif n'est pas réinitialisé.

DÉFINITIONS

Les définitions suivantes sont utilisées dans le reste de ce document.

blank

Un espace ou une tabulation.

word

Suite de caractères considérée comme une seule unité par le shell. Également appelé jeton.

name

Un mot composé uniquement de caractères alphanumériques et de traits de soulignement, et commençant par un caractère alphabétique ou un trait de soulignement. Également appelé identifiant.

metacharacter

Un caractère qui, lorsqu'il n'est pas entre guillemets, sépare les mots. L'un des éléments suivants :

| & ; ( ) < > space tab newline
control operator

Un jeton qui exécute une fonction de contrôle. C'est l'un des symboles suivants :

|| & && ; ;; ;& ;;& ( ) | |& <newline>

MOTS RÉSERVÉS

Les mots réservés sont des mots qui ont une signification particulière pour le shell. Les mots suivants sont reconnus comme réservés lorsqu'ils ne sont pas entre guillemets et sont soit le premier mot d'une commande (voir SHELL GRAMMAR ci-dessous), le troisième mot d'un case ou select< (seul in est valide), ou le troisième mot d'une commande for (seulement in et do sont valides) :

! case coproc do done elif else esac fi for function if in select then until while { } time [[ ]]

GRAMMAIRE DU COQUE

Commandes simples

Une commande simple est une séquence d'affectations de variables facultatives suivies de mots et de redirections séparés par des espaces, et terminée par un opérateur de contrôle. Le premier mot spécifie la commande à exécuter et est passé en argument zéro. Les mots restants sont passés en arguments à la commande invoquée.

La valeur de retour d'une commande simple est son état de sortie, ou 128+n  si la commande se termine par le signal n.

Pipelines

Un pipeline est une séquence d'une ou plusieurs commandes séparées par l'un des opérateurs de contrôle | ou |&. Le format d'un pipeline est :

[time [-p]] [ ! ] command [ [|⎪|&] command2 ... ]

La sortie standard de command est connectée via un tube à l'entrée standard de command2. Cette connexion est effectuée avant toute redirection spécifiée par la commande (voir REDIRECTION ci-dessous). Si |& est utilisé, l'erreur standard de commande, en plus de sa sortie standard, est connectée à l'entrée standard de command2 via le tuyau; c'est un raccourci pour 2>&1 |. Cette redirection implicite de l'erreur standard vers la sortie standard est effectuée après toute redirection spécifiée par la commande.

L'état de retour d'un pipeline est l'état de sortie de la dernière commande, sauf si l'option pipefail est activée. Si pipefail est activé, le statut de retour du pipeline est la valeur de la dernière commande (la plus à droite) à quitter avec un statut différent de zéro, ou zéro si toutes les commandes se terminent avec succès. Si le mot réservé ! précède un pipeline, le statut de sortie de ce pipeline est la négation logique du statut de sortie comme décrit ci-dessus. Le shell attend que toutes les commandes du pipeline se terminent avant de renvoyer une valeur.

Si le mot réservé time précède un pipeline, le temps écoulé ainsi que le temps utilisateur et système consommé par son exécution sont signalés lorsque le pipeline se termine. L'option -p remplace le format de sortie par celui spécifié par POSIX. Lorsque le shell est en mode posix, il ne reconnaît pas time comme un mot réservé si le jeton suivant commence par un `-'. La variable TIMEFORMAT peut être définie sur une chaîne de format qui spécifie comment les informations de synchronisation doivent être affichées ; voir la description de TIMEFORMAT sous Variables Shell ci-dessous.

Lorsque le shell est en mode posix, time peut être suivi d'une nouvelle ligne. Dans ce cas, le shell affiche le temps utilisateur et système total consommé par le shell et ses enfants. La variable TIMEFORMAT peut être utilisée pour spécifier le format des informations temporelles.

Chaque commande dans un pipeline est exécutée comme un processus séparé (c'est-à-dire dans un sous-shell). Voir ENVIRONNEMENT D'EXÉCUTION DE COMMANDES pour une description d'un environnement de sous-shell. Si l'option lastpipe est activée à l'aide de la fonction intégrée shopt (voir la description de shopt ci-dessous), le dernier élément d'un pipeline peut être exécuté par le processus shell.

Listes

Une liste est une séquence d'un ou plusieurs pipelines séparés par l'un des opérateurs ;, &, &&, ou ||, et éventuellement terminé par l'un des éléments suivants : ;, & ou <newline>.

Parmi ces opérateurs de liste, && et || ont la même priorité, suivis de ; et &, qui ont la même priorité priorité.

Une séquence d'une ou plusieurs nouvelles lignes peut apparaître dans une liste au lieu d'un point-virgule pour délimiter les commandes.

Si une commande est terminée par l'opérateur de contrôle &, le shell exécute la commande en arrière-plan dans un sous-shell. Le shell n'attend pas que la commande se termine et l'état de retour est 0. Celles-ci sont appelées commandes asynchrones. Les commandes séparées par un ; sont exécutées séquentiellement ; le shell attend que chaque commande se termine tour à tour. L'état de retour est l'état de sortie de la dernière commande exécutée.

Les listes AND et OR sont des séquences d'un ou plusieurs pipelines séparés par les opérateurs de contrôle && et ||, respectivement. Les listes AND et OR sont exécutées avec une associativité à gauche. Une liste ET a la forme

command1 && command2

command2 est exécuté si, et seulement si, command1 renvoie un état de sortie de zéro (succès).

Une liste OU a la forme

command1 || command2

command2 est exécuté si, et seulement si, command1 renvoie un état de sortie différent de zéro. L'état de retour des listes AND et OR est l'état de sortie de la dernière commande exécutée dans la liste.

Commandes composées

Une commande composée est l'une des suivantes. Dans la plupart des cas, une liste dans la description d'une commande peut être séparée du reste de la commande par une ou plusieurs nouvelles lignes et peut être suivie d'une nouvelle ligne à la place d'un point-virgule.

(list)

list est exécuté dans un environnement de sous-shell (voir ENVIRONNEMENT D'EXÉCUTION DE COMMANDES ci-dessous). Les affectations de variables et les commandes intégrées qui affectent l'environnement du shell ne restent pas effectives une fois la commande terminée. Le statut de retour est le statut de sortie de list

{ list; }

list est simplement exécuté dans l'environnement shell actuel. list doit se terminer par une nouvelle ligne ou un point-virgule. C'est ce qu'on appelle une commande de groupe. Le statut de retour est le statut de sortie de list. Notez que contrairement aux métacaractères ( et ), { et } sont des mots réservés et doit se produire lorsqu'un mot réservé est autorisé à être reconnu. Puisqu'ils ne provoquent pas de coupure de mot, ils doivent être séparés de list par un espace ou un autre métacaractère du shell.

((expression))

L'expression est évaluée selon les règles décrites ci-dessous sous ÉVALUATION ARITHMÉTIQUE. Si la valeur de l'expression est différente de zéro, le statut de retour est 0 ; sinon, le statut de retour est 1. Ceci est exactement équivalent à let "expression".

[[ expression ]]

Renvoie un statut de 0 ou 1 selon l'évaluation de l'expression conditionnelle expression. Les expressions sont composées des primaires décrites ci-dessous sous EXPRESSIONS CONDITIONNELLES. La séparation des mots et l'expansion des noms de chemin ne sont pas effectuées sur les mots entre [[ et ]] ; l'expansion du tilde, l'expansion des paramètres et des variables, l'expansion arithmétique, la substitution de commande, la substitution de processus et la suppression des guillemets sont effectuées. Les opérateurs conditionnels tels que -f doivent être sans guillemets pour être reconnus comme primaires.

Lorsqu'ils sont utilisés avec [[, les opérateurs < et > effectuent un tri lexicographique en utilisant les paramètres régionaux actuels.

Lorsque les opérateurs == et != sont utilisés, la chaîne à droite de l'opérateur est considérée comme un modèle et correspond selon les règles décrites ci-dessous sous Modèle Correspondance, comme si l'option shell extglob était activée. L'opérateur = est équivalent à ==. Si l'option de shell nocasematch est activée, la correspondance est effectuée sans tenir compte de la casse des caractères alphabétiques. La valeur de retour est 0 si la chaîne correspond (==) ou ne correspond pas (!=) au modèle, et 1 sinon. N'importe quelle partie du modèle peut être entre guillemets pour forcer la partie entre guillemets à correspondre à une chaîne.

Un opérateur binaire supplémentaire, =~, est disponible, avec la même priorité que == et !=. Lorsqu'elle est utilisée, la chaîne à droite de l'opérateur est considérée comme une expression régulière étendue POSIX et correspond en conséquence (à l'aide des interfaces POSIX regcomp et regexec généralement décrites dans regex(3)). La valeur de retour est 0 si la chaîne correspond au modèle, et 1 sinon. Si l'expression régulière est syntaxiquement incorrecte, la valeur de retour de l'expression conditionnelle est 2. Si l'option shell nocasematch est activée, la correspondance est effectuée sans tenir compte de la casse des caractères alphabétiques. N'importe quelle partie du modèle peut être entre guillemets pour forcer la partie entre guillemets à correspondre à une chaîne. Les expressions entre crochets dans les expressions régulières doivent être traitées avec précaution, car les guillemets normaux perdent leur signification entre crochets. Si le modèle est stocké dans une variable shell, la mise entre guillemets de l'expansion de la variable force la correspondance du modèle entier en tant que chaîne.

Le modèle correspondra s'il correspond à une partie de la chaîne. Ancrez le modèle à l'aide des opérateurs d'expression régulière ^ et $ pour le forcer à correspondre à la chaîne entière. La variable de tableau BASH_REMATCH enregistre les parties de la chaîne correspondant au modèle. L'élément de BASH_REMATCH avec l'index 0 contient la partie de la chaîne correspondant à l'expression régulière entière. Les sous-chaînes correspondant à des sous-expressions entre parenthèses dans l'expression régulière sont enregistrées dans les indices BASH_REMATCH restants. L'élément de BASH_REMATCH avec l'index n est la partie de la chaîne correspondant à la nième sous-expression entre parenthèses.

Les expressions peuvent être combinées à l'aide des opérateurs suivants, classés par ordre décroissant de priorité :

( expression )

Renvoie la valeur de expression. Cela peut être utilisé pour remplacer la priorité normale des opérateurs.

! expression

Vrai si expression est faux.

expression1 && expression2

Vrai si expression1 et expression2 sont vrais.

expression1 || expression2

Vrai si expression1 ou expression2 est vrai.

Les opérateurs && et || n'évaluent pas expression2 si la valeur de expression1 est suffisante pour déterminer la valeur de retour de toute l'expression conditionnelle.

for name [ [ in [ word ... ] ] ; ] do list ; done

La liste des mots suivant dans est développée, générant une liste d'éléments. La variable name est définie sur chaque élément de cette liste tour à tour, et list est exécutée à chaque fois. Si le in mot est omis, la commande for exécute list une fois pour chaque paramètre positionnel défini (voir PARAMETRES ci-dessous). L'état de retour est l'état de sortie de la dernière commande qui s'exécute. Si le développement des éléments suivant in aboutit à une liste vide, aucune commande n'est exécutée et le statut de retour est 0.

for (( expr1 ; expr2 ; expr3 )) ; do list ; done

Tout d'abord, l'expression arithmétique expr1 est évaluée selon les règles décrites ci-dessous sous ÉVALUATION ARITHMÉTIQUE. L'expression arithmétique expr2 est ensuite évaluée à plusieurs reprises jusqu'à ce qu'elle soit évaluée à zéro. Chaque fois que expr2 prend une valeur différente de zéro, list est exécuté et l'expression arithmétique expr3 est évaluée. Si une expression est omise, elle se comporte comme si elle était évaluée à 1. La valeur de retour est l'état de sortie de la dernière commande de list qui est exécutée, ou false si l'une des expressions est invalide.

select name [ in word ] ; do list ; done

La liste des mots suivant dans est développée, générant une liste d'éléments. L'ensemble des mots développés est imprimé sur l'erreur standard, chacun précédé d'un nombre. Si le in mot est omis, les paramètres de position sont imprimés (voir PARAMETRES ci-dessous). L'invite PS3 s'affiche alors et une ligne est lue à partir de l'entrée standard. Si la ligne est constituée d'un nombre correspondant à l'un des mots affichés, alors la valeur de nom est définie sur ce mot. Si la ligne est vide, les mots et l'invite s'affichent à nouveau. Si EOF est lu, la commande se termine. Toute autre valeur lue entraîne la définition de name sur null. La ligne lue est enregistrée dans la variable REPLY. La liste est exécutée après chaque sélection jusqu'à ce qu'une commande break soit exécutée. L'état de sortie de select est l'état de sortie de la dernière commande exécutée dans list, ou zéro si aucune commande n'a été exécutée.

case word in [ [(] pattern [ | pattern ] ... ) list ;; ] ... esac

Une commande case développe d'abord mot et essaie de le faire correspondre à chaque motif à son tour, en utilisant les règles de correspondance décrites sous Match de modèle ci-dessous. Le mot est développé à l'aide du développement de tilde, du développement de paramètres et de variables, du développement arithmétique, de la substitution de commande, de la substitution de processus et de la suppression des guillemets. Chaque modèle examiné est développé à l'aide d'un développement de tilde, d'un développement de paramètres et de variables, d'un développement arithmétique, d'une substitution de commande et d'une substitution de processus. Si l'option de shell nocasematch est activée, la correspondance est effectuée sans tenir compte de la casse des caractères alphabétiques. Lorsqu'une correspondance est trouvée, la liste correspondante est exécutée. Si l'opérateur ;; est utilisé, aucune correspondance ultérieure n'est tentée après la première correspondance de modèle. L'utilisation de ;& à la place de ;; entraîne la poursuite de l'exécution avec la liste associée au prochain ensemble de modèles. L'utilisation de ;;& à la place de ;; oblige le shell à tester la liste de modèles suivante dans l'instruction, le cas échéant, et à exécuter toute liste associée en cas de correspondance réussie, poursuite de l'exécution de l'instruction case comme si la liste de modèles n'avait pas correspondu. L'état de sortie est zéro si aucun modèle ne correspond. Sinon, c'est l'état de sortie de la dernière commande exécutée dans list.

if list; then list; [ elif list; then list; ] ... [ else list; ] fi

La if liste est exécutée. Si son état de sortie est zéro, la alors liste est exécutée. Sinon, chaque elif liste est exécutée à son tour, et si son état de sortie est zéro, la then liste correspondante est exécuté et la commande se termine. Sinon, la else liste est exécutée, si elle est présente. L'état de sortie est l'état de sortie de la dernière commande exécutée, ou zéro si aucune condition n'a été vérifiée.

while list-1; do list-2; done
until list-1; do list-2; done

La commande while exécute en continu la liste list-2 tant que la dernière commande de la liste list-1 renvoie un état de sortie égal à zéro. La commande jusqu'à est identique à la commande while, sauf que le test est annulé : list-2 est exécuté tant que la dernière commande dans list-1 renvoie un état de sortie différent de zéro. L'état de sortie des commandes while et jusqu'à est l'état de sortie de la dernière commande exécutée dans list-2, ou zéro si aucune n'a été exécutée .

Coprocessus

Un coprocess est une commande shell précédée du mot réservé coproc. Un coprocess est exécuté de manière asynchrone dans un sous-shell, comme si la commande s'était terminée avec l'opérateur de contrôle &, avec un tuyau bidirectionnel établi entre le shell d'exécution et le coprocess.

Le format d'un coprocessus est le suivant :

coproc [NAME] command [redirections]

Cela crée un coprocess nommé NAME. Si NAME n'est pas fourni, le nom par défaut est COPROC. NAME ne doit pas être fourni si la commande est une commande simple (voir ci-dessus) ; sinon, il est interprété comme le premier mot de la commande simple. Lorsque le coprocessus est exécuté, le shell crée une variable tableau (voir Tableaux ci-dessous) nommée NAME dans le contexte du shell en cours d'exécution. La sortie standard de command est connectée via un tube à un descripteur de fichier dans le shell d'exécution, et ce descripteur de fichier est assigné à NAME[0]. L'entrée standard de command est connectée via un tube à un descripteur de fichier dans le shell d'exécution, et ce descripteur de fichier est assigné à NAME[1]. Ce canal est établi avant toute redirection spécifiée par la commande (voir REDIRECTION ci-dessous). Les descripteurs de fichiers peuvent être utilisés comme arguments pour les commandes shell et les redirections à l'aide d'extensions de mots standard. Hormis ceux créés pour exécuter des substitutions de commandes et de processus, les descripteurs de fichiers ne sont pas disponibles dans les sous-shells. L'ID de processus du shell généré pour exécuter le coprocessus est disponible en tant que valeur de la variable NAME_PID. La commande intégrée wait peut être utilisée pour attendre que le coprocessus se termine.

Étant donné que le coprocess est créé en tant que commande asynchrone, la commande coproc renvoie toujours un succès. L'état de retour d'un coprocessus est l'état de sortie de la commande.

Définitions des fonctions du shell

Une fonction shell est un objet qui est appelé comme une simple commande et exécute une commande composée avec un nouvel ensemble de paramètres positionnels. Les fonctions shell sont déclarées comme suit :

fname () compound-command [redirection]
function fname [()] compound-command [redirection]

Cela définit une fonction nommée fname. Le mot réservé fonction est facultatif. Si le mot réservé fonction est fourni, les parenthèses sont facultatives. Le corps de la fonction est la commande composée compound-command (voir Compound Commands ci-dessus). Cette commande est généralement une liste de commandes entre { et }, mais peut être n'importe quelle commande répertoriée sous Commandes composées ci-dessus, à une exception près : si la fonction mot réservé est utilisé, mais les parenthèses ne sont pas fournies, les accolades sont obligatoires. compound-command est exécuté chaque fois que fname est spécifié comme nom d'une commande simple. En mode posix, fname doit être un nom shell valide et ne peut pas être le nom de l'un des intégrés spéciaux POSIX . En mode par défaut, un nom de fonction peut être n'importe quel mot shell sans guillemets qui ne contient pas $. Toutes les redirections (voir REDIRECTION ci-dessous) spécifiées lors de la définition d'une fonction sont effectuées lorsque la fonction est exécutée. L'état de sortie d'une définition de fonction est zéro, sauf si une erreur de syntaxe se produit ou si une fonction en lecture seule portant le même nom existe déjà. Lorsqu'elle est exécutée, l'état de sortie d'une fonction est l'état de sortie de la dernière commande exécutée dans le corps. (Voir FONCTIONS ci-dessous.)

COMMENTAIRES

Dans un shell non interactif, ou un shell interactif dans lequel l'option interactive_comments de la commande intégrée shopt est activée (voir COMMANDES INTÉGRÉES DU SHELL ci-dessous) , un mot commençant par # entraîne l'ignorance de ce mot et de tous les caractères restants sur cette ligne. Un shell interactif sans l'option interactive_comments activée n'autorise pas les commentaires. L'option interactive_comments est activée par défaut dans les shells interactifs.

CITATION

Les guillemets sont utilisés pour supprimer la signification particulière de certains caractères ou mots dans le shell. Les guillemets peuvent être utilisés pour désactiver le traitement spécial des caractères spéciaux, pour empêcher la reconnaissance des mots réservés en tant que tels et pour empêcher l'expansion des paramètres.

Chacun des métacaractères répertoriés ci-dessus sous DEFINITIONS a une signification particulière pour le shell et doit être entre guillemets s'il doit se représenter lui-même.

Lorsque les fonctionnalités d'expansion de l'historique des commandes sont utilisées (voir EXPANSION DE L'HISTORIQUE ci-dessous), le caractère expansion de l'historique, généralement !, doit être placé entre guillemets pour empêcher expansion de l'histoire.

Il existe trois mécanismes de guillemets : le caractère d'échappement, les guillemets simples et les guillemets doubles.

Une barre oblique inverse sans guillemets (\) est le caractère d'échappement. Il préserve la valeur littérale du prochain caractère qui suit, à l'exception de <newline>. Si une paire \<newline> apparaît et que la barre oblique inverse n'est pas elle-même entre guillemets, la \<newline> est traitée comme une continuation de ligne (c'est-à-dire qu'elle est supprimée de le flux d'entrée et effectivement ignoré).

L'inclusion de caractères entre guillemets simples préserve la valeur littérale de chaque caractère entre guillemets. Un guillemet simple ne peut pas apparaître entre des guillemets simples, même s'ils sont précédés d'une barre oblique inverse.

Le fait de placer des caractères entre guillemets doubles préserve la valeur littérale de tous les caractères entre guillemets, à l'exception de $, `, \, et, lorsque l'extension de l'historique est activée,  !. Lorsque le shell est en mode posix, le ! n'a pas de signification particulière entre guillemets doubles, même lorsque l'expansion de l'historique est activée. Les caractères $ et ` conservent leur signification particulière entre guillemets doubles. La barre oblique inverse conserve sa signification particulière uniquement lorsqu'elle est suivie de l'un des caractères suivants : $, `,  " , \ ou <newline>. Un guillemet double peut être placé entre guillemets doubles en le faisant précéder d'une barre oblique inverse. Si cette option est activée, l'expansion de l'historique sera effectuée à moins qu'un ! n'apparaisse dans les guillemets doubles sont échappés à l'aide d'une barre oblique inverse. La barre oblique inverse précédant le ! n'est pas supprimée.

Les paramètres spéciaux * et @ ont une signification particulière lorsqu'ils sont entre guillemets doubles (voir PARAMETRES ci-dessous).

Les mots de la forme $'string' sont traités spécialement. Le mot se développe en chaîne, avec les caractères d'échappement avec barre oblique inversée remplacés comme spécifié par la norme ANSI C. Les séquences d'échappement antislash, si elles sont présentes, sont décodées comme suit :

\a

alerte (cloche)

\b

retour arrière

\e
\E

un caractère d'échappement

\f

saut de formulaire

\n

nouvelle ligne

\r

retour chariot

\t

tabulation horizontale

\v

onglet vertical

\\

barre oblique inverse

\'

simple citation

\"

double citation

\?

point d'interrogation

\nnn

le caractère huit bits dont la valeur est la valeur octale nnn (un à trois chiffres octaux)

\xHH

le caractère huit bits dont la valeur est la valeur hexadécimale HH (un ou deux chiffres hexadécimaux)

\uHHHH

le caractère Unicode (ISO/IEC 10646) dont la valeur est la valeur hexadécimale HHHH (un à quatre chiffres hexadécimaux)

\UHHHHHHHH

le caractère Unicode (ISO/IEC 10646) dont la valeur est la valeur hexadécimale HHHHHHHH (un à huit chiffres hexadécimaux)

\cx

un caractère control-x

Le résultat développé est entre guillemets simples, comme si le signe dollar n'avait pas été présent.

Une chaîne entre guillemets doubles précédée d'un signe dollar ("$"chaîne") entraînera la traduction de la chaîne en fonction des paramètres régionaux actuels. L'infrastructure gettext effectue la recherche et la traduction du catalogue de messages, à l'aide des variables shell LC_MESSAGES et TEXTDOMAIN. Si les paramètres régionaux actuels sont C ou POSIX, ou s'il n'y a pas de traductions disponibles, le signe dollar est ignoré. Si la chaîne est traduite et remplacée, le remplacement est entre guillemets.

PARAMÈTRES

Un paramètre est une entité qui stocke des valeurs. Il peut s'agir d'un nom, d'un nombre ou de l'un des caractères spéciaux répertoriés ci-dessous sous Paramètres spéciaux. Une variable est un paramètre désigné par un nom. Une variable a une valeur et zéro ou plusieurs attributs. Les attributs sont attribués à l'aide de la commande intégrée declare (voir declare ci-dessous dans COMMANDES INTÉGRÉES DU SHELL).

Un paramètre est défini si une valeur lui a été affectée. La chaîne nulle est une valeur valide. Une fois qu'une variable est définie, elle ne peut être désactivée qu'en utilisant la commande intégrée unset (voir COMMANDES INTÉGRÉES DU SHELL ci-dessous).

Une variable peut être affectée par une instruction de la forme

name=[value]

Si value n'est pas donné, la variable reçoit la chaîne nulle. Toutes les valeurs subissent un développement de tilde, un développement de paramètre et de variable, une substitution de commande, un développement arithmétique et une suppression des guillemets (voir EXPANSION ci-dessous). Si la variable a son attribut entier défini, alors valeur est évaluée comme une expression arithmétique même si le développement $ ((...)) n'est pas utilisé (voir Développement arithmétique ci-dessous). La séparation des mots n'est pas effectuée, à l'exception de "$@" comme expliqué ci-dessous sous Paramètres spéciaux. L'extension du chemin d'accès n'est pas effectuée. Les instructions d'affectation peuvent également apparaître comme arguments pour alias, declare, typeset, export, readonly< et les commandes intégrées local (commandes declaration). En mode posix, ces commandes internes peuvent apparaître dans une commande après une ou plusieurs instances de la commande interne command et conserver ces propriétés d'instruction d'affectation.

Dans le contexte où une instruction d'affectation affecte une valeur à une variable shell ou à un index de tableau, l'opérateur += peut être utilisé pour ajouter ou ajouter à la valeur précédente de la variable. Cela inclut les arguments des commandes intégrées telles que declare qui acceptent les instructions d'affectation (commandes declaration). Lorsque += est appliqué à une variable pour laquelle l'attribut entier a été défini, valeur est évaluée comme une expression arithmétique et ajoutée à la valeur actuelle de la variable, qui est également évaluée . Lorsque += est appliqué à une variable de tableau à l'aide d'une affectation composée (voir Tableaux ci-dessous), la valeur de la variable n'est pas désactivée (comme c'est le cas lors de l'utilisation de =) et de nouvelles valeurs sont ajoutées au tableau à partir de supérieur à l'index maximal du tableau (pour les tableaux indexés) ou ajouté en tant que paires clé-valeur supplémentaires dans un tableau associatif. Lorsqu'elle est appliquée à une variable de type chaîne, value est développée et ajoutée à la valeur de la variable.

Une variable peut se voir attribuer l'attribut nameref à l'aide de l'option -n des commandes intégrées declare ou local (voir les descriptions de declare et local ci-dessous) pour créer un nameref, ou une référence à une autre variable. Cela permet de manipuler indirectement les variables. Chaque fois que la variable nameref est référencée, affectée, supprimée ou que ses attributs sont modifiés (autrement que l'utilisation ou la modification de l'attribut nameref lui-même), l'opération est en fait effectuée sur la variable spécifiée par la valeur de la variable nameref . Un nameref est couramment utilisé dans les fonctions shell pour faire référence à une variable dont le nom est passé en argument à la fonction. Par exemple, si un nom de variable est passé à une fonction shell comme premier argument, l'exécution

declare -n ref=$1

à l'intérieur de la fonction crée une variable nameref ref dont la valeur est le nom de la variable passé en premier argument. Les références et les affectations à ref, ainsi que les modifications apportées à ses attributs, sont traitées comme des références, des affectations et des modifications d'attributs à la variable dont le nom a été transmis en tant que $1. Si la variable de contrôle dans une boucle for a l'attribut nameref, la liste de mots peut être une liste de variables shell, et une référence de nom sera établie pour chaque mot de la liste, à son tour, lorsque la boucle est exécutée. Les variables de tableau ne peuvent pas recevoir l'attribut nameref. Cependant, les variables nameref peuvent référencer des variables de tableau et des variables de tableau indicées. Les références de nom peuvent être supprimées à l'aide de l'option -n de la fonction intégrée unset. Sinon, si unset est exécuté avec le nom d'une variable nameref comme argument, la variable référencée par la variable nameref sera non définie.

Paramètres de position

Un paramètre positionnel est un paramètre désigné par un ou plusieurs chiffres, autre que le seul chiffre 0. Les paramètres positionnels sont affectés à partir des arguments du shell lorsqu'il est invoqué, et peuvent être réaffectés à l'aide de l'ensemble commande intégrée. Les paramètres positionnels ne peuvent pas être affectés à des instructions d'affectation. Les paramètres positionnels sont temporairement remplacés lorsqu'une fonction shell est exécutée (voir FONCTIONS ci-dessous).

Lorsqu'un paramètre de position composé de plusieurs chiffres est développé, il doit être placé entre accolades (voir EXPANSION ci-dessous).

Paramètres spéciaux

Le shell traite plusieurs paramètres spécialement. Ces paramètres ne peuvent être que référencés ; leur affectation n'est pas autorisée.

*

Développe les paramètres de position, à partir de un. Lorsque le développement n'est pas entre guillemets doubles, chaque paramètre positionnel se développe en un mot séparé. Dans les contextes où il est exécuté, ces mots sont sujets à une division supplémentaire des mots et à l'expansion des noms de chemin. Lorsque le développement se produit entre guillemets doubles, il se développe en un seul mot avec la valeur de chaque paramètre séparée par le premier caractère de la variable spéciale IFS. Autrement dit, "$*" équivaut à "$1c$2c ...", où c est le premier caractère de la valeur de la variable IFS. Si IFS n'est pas défini, les paramètres sont séparés par des espaces. Si IFS est nul, les paramètres sont joints sans séparateurs intermédiaires.

@

Développe les paramètres de position, à partir de un. Dans les contextes où le fractionnement de mots est effectué, cela étend chaque paramètre de position à un mot séparé ; s'ils ne sont pas entre guillemets doubles, ces mots sont soumis à un fractionnement de mots. Dans les contextes où le fractionnement de mots n'est pas effectué, cela se développe en un seul mot avec chaque paramètre positionnel séparé par un espace. Lorsque le développement se produit entre guillemets doubles, chaque paramètre se développe en un mot séparé. Autrement dit, "$@" est équivalent à "$1" "$2" ... Si l'expansion entre guillemets doubles se produit dans un mot , le développement du premier paramètre est joint à la partie de début du mot d'origine, et le développement du dernier paramètre est joint à la dernière partie du mot d'origine. Lorsqu'il n'y a pas de paramètres de position, "$@" et $@ se transforment en rien (c'est-à-dire qu'ils sont supprimés).

#

Développe le nombre de paramètres positionnels en décimal.

?

Développe l'état de sortie du pipeline de premier plan le plus récemment exécuté.

-

Développe les indicateurs d'option actuels tels que spécifiés lors de l'invocation, par la commande intégrée set, ou ceux définis par le shell lui-même (comme l'option -i).

$

Développe l'ID de processus du shell. Dans un sous-shell(), il s'étend à l'ID de processus du shell actuel, pas au sous-shell.

!

Développe l'ID de processus de la tâche la plus récemment placée en arrière-plan, qu'elle soit exécutée en tant que commande asynchrone ou à l'aide de la fonction intégrée bg (voir CONTRÔLE DES TÂCHES ci-dessous).

0

Développe le nom du shell ou du script shell. Ceci est défini à l'initialisation du shell. Si bash est invoqué avec un fichier de commandes, $0 est défini sur le nom de ce fichier. Si bash est démarré avec l'option -c, alors $0 est défini sur le premier argument après la chaîne à exécuter, s'il en existe un . Sinon, il est défini sur le nom de fichier utilisé pour invoquer bash, comme indiqué par l'argument zéro.

Variables d'interpréteur de commandes

Les variables suivantes sont définies par le shell :

_

Au démarrage du shell, définissez le chemin d'accès utilisé pour invoquer le shell ou le script shell en cours d'exécution tel qu'il est transmis dans l'environnement ou la liste d'arguments. Par la suite, développe jusqu'au dernier argument de la commande simple précédente exécutée au premier plan, après l'expansion. Également défini sur le chemin d'accès complet utilisé pour appeler chaque commande exécutée et placée dans l'environnement exporté vers cette commande. Lors de la vérification du courrier, ce paramètre contient le nom du fichier de courrier en cours de vérification.

BASH

Développe le nom de fichier complet utilisé pour appeler cette instance de bash.

BASHOPTS

Une liste séparée par deux-points des options de shell activées. Chaque mot de la liste est un argument valide pour l'option -s de la commande intégrée shopt (voir COMMANDES INTÉGRÉES DU SHELL ci-dessous). Les options apparaissant dans BASHOPTS sont celles signalées comme on par shopt. Si cette variable se trouve dans l'environnement au démarrage de bash, chaque option du shell de la liste sera activée avant de lire les fichiers de démarrage. Cette variable est en lecture seule.

BASHPID

Développe l'ID de processus du processus bash actuel. Cela diffère de $$ dans certaines circonstances, telles que les sous-shells qui ne nécessitent pas la réinitialisation de bash. Les affectations à BASHPID n'ont aucun effet. Si BASHPID n'est pas défini, il perd ses propriétés spéciales, même s'il est ensuite réinitialisé.

BASH_ALIASES

Une variable de tableau associatif dont les membres correspondent à la liste interne des alias telle que maintenue par la fonction intégrée alias. Les éléments ajoutés à ce tableau apparaissent dans la liste des alias ; cependant, la désactivation des éléments de tableau n'entraîne pas actuellement la suppression des alias de la liste des alias. Si BASH_ALIASES n'est pas défini, il perd ses propriétés spéciales, même s'il est ensuite réinitialisé.

BASH_ARGC

Une variable de tableau dont les valeurs sont le nombre de paramètres dans chaque cadre de la pile d'appels d'exécution bash actuelle. Le nombre de paramètres de la sous-routine actuelle (fonction shell ou script exécuté avec . ou source) est en haut de la pile. Lorsqu'un sous-programme est exécuté, le nombre de paramètres passés est poussé sur BASH_ARGC. Le shell définit BASH_ARGC uniquement lorsqu'il est en mode de débogage étendu (voir la description de l'option extdebug de la commande intégrée shopt ci-dessous). Définir extdebug après que le shell a commencé à exécuter un script, ou référencer cette variable lorsque extdebug n'est pas défini, peut entraîner des valeurs incohérentes.

BASH_ARGV

Une variable de tableau contenant tous les paramètres de la pile d'appels d'exécution bash actuelle. Le paramètre final du dernier appel de sous-programme est en haut de la pile ; le premier paramètre de l'appel initial est en bas. Lorsqu'un sous-programme est exécuté, les paramètres fournis sont poussés sur BASH_ARGV. Le shell définit BASH_ARGV uniquement lorsqu'il est en mode de débogage étendu (voir la description de l'option extdebug de la commande intégrée shopt ci-dessous). Définir extdebug après que le shell a commencé à exécuter un script, ou référencer cette variable lorsque extdebug n'est pas défini, peut entraîner des valeurs incohérentes.

BASH_ARGV0

Lorsqu'elle est référencée, cette variable se développe au nom du shell ou du script shell (identique à $0 ; voir la description du paramètre spécial 0 ci-dessus). L'affectation à BASH_ARGV0 entraîne l'affectation de la valeur affectée à $0. Si BASH_ARGV0 n'est pas défini, il perd ses propriétés spéciales, même s'il est ensuite réinitialisé.

BASH_CMDS

Une variable de tableau associatif dont les membres correspondent à la table de hachage interne des commandes maintenue par la commande intégrée hash. Les éléments ajoutés à ce tableau apparaissent dans la table de hachage ; cependant, la désactivation des éléments de tableau n'entraîne pas actuellement la suppression des noms de commande de la table de hachage. Si BASH_CMDS n'est pas défini, il perd ses propriétés spéciales, même s'il est ensuite réinitialisé.

BASH_COMMAND

La commande en cours d'exécution ou sur le point d'être exécutée, sauf si le shell exécute une commande à la suite d'un déroutement, auquel cas il s'agit de la commande en cours d'exécution au moment du déroutement. Si BASH_COMMAND n'est pas défini, il perd ses propriétés spéciales, même s'il est ensuite réinitialisé.

BASH_EXECUTION_STRING

L'argument de commande de l'option d'appel -c.

BASH_LINENO

Une variable de tableau dont les membres sont les numéros de ligne dans les fichiers source où chaque membre correspondant de FUNCNAME a été appelé. $ {BASH_LINENO[$i]} est le numéro de ligne dans le fichier source ($ {BASH_SOURCE[<$i+1]}) où $ {FUNCNAME[$i ]} a été appelé (ou $ {BASH_LINENO[$i-1]} s'il est référencé dans une autre fonction shell) . Utilisez LINENO pour obtenir le numéro de ligne actuel.

BASH_LOADABLES_PATH

Une liste de répertoires séparés par deux-points dans lesquels le shell recherche les commandes intégrées chargeables dynamiquement spécifiées par la commande enable.

BASH_REMATCH

Une variable de tableau dont les membres sont affectés par l'opérateur binaire =~ à la commande conditionnelle [[. L'élément avec l'index 0 est la partie de la chaîne correspondant à l'expression régulière entière. L'élément avec l'index n est la partie de la chaîne correspondant à la nième sous-expression entre parenthèses.

BASH_SOURCE

Une variable de tableau dont les membres sont les noms de fichiers source où les noms de fonction shell correspondants dans la variable de tableau FUNCNAME sont définis. La fonction shell $ {FUNCNAME[$i]} est définie dans le fichier $ {BASH_SOURCE[$i]} et appelé depuis $ {BASH_SOURCE[$i+1 ]}.

BASH_SUBSHELL

Incrémenté de un dans chaque sous-shell ou environnement de sous-shell lorsque le shell commence à s'exécuter dans cet environnement. La valeur initiale est 0. Si BASH_SUBSHELL n'est pas défini, il perd ses propriétés spéciales, même s'il est ensuite réinitialisé.

BASH_VERSINFO

Une variable de tableau en lecture seule dont les membres contiennent des informations de version pour cette instance de bash. Les valeurs affectées aux membres du tableau sont les suivantes :

BASH_VERSINFO[0]

Le numéro de version majeure (la version).

BASH_VERSINFO[1]

Le numéro de version mineure (la version).

BASH_VERSINFO[2]

Le niveau de patch.

BASH_VERSINFO[3]

La version de construction.

BASH_VERSINFO[4]

L'état de la version (par exemple, beta1).

BASH_VERSINFO[5]

La valeur de MACHTYPE.

BASH_VERSION

Se développe en une chaîne décrivant la version de cette instance de bash.

COMP_CWORD

Un index dans $ {COMP_WORDS} du mot contenant la position actuelle du curseur. Cette variable n'est disponible que dans les fonctions shell invoquées par les fonctions de complétion programmable (voir Complétion programmable ci-dessous).

COMP_KEY

La touche (ou la touche finale d'une séquence de touches) utilisée pour invoquer la fonction de complétion actuelle.

COMP_LINE

La ligne de commande actuelle. Cette variable n'est disponible que dans les fonctions shell et les commandes externes appelées par les fonctions de complétion programmable (voir Complétion programmable ci-dessous).

COMP_POINT

L'index de la position actuelle du curseur par rapport au début de la commande actuelle. Si la position actuelle du curseur est à la fin de la commande en cours, la valeur de cette variable est égale à $ {#COMP_LINE}. Cette variable n'est disponible que dans les fonctions shell et les commandes externes appelées par les fonctions de complétion programmable (voir Complétion programmable ci-dessous).

COMP_TYPE

Affecté à une valeur entière correspondant au type de complétion tentée ayant provoqué l'appel d'une fonction de complétion : TAB, pour une complétion normale, ?, pour lister les complétions après des tabulations successives, !, pour lister les alternatives de complétion partielle de mots, @, pour lister les complétions si le mot n'est pas modifié, ou %, pour la complétion de menu. Cette variable n'est disponible que dans les fonctions shell et les commandes externes appelées par les fonctions de complétion programmable (voir Complétion programmable ci-dessous).

COMP_WORDBREAKS

L'ensemble de caractères que la bibliothèque readline traite comme des séparateurs de mots lors de la complétion de mots. Si COMP_WORDBREAKS n'est pas défini, il perd ses propriétés spéciales, même s'il est ensuite réinitialisé.

COMP_WORDS

Une variable de tableau (voir Tableaux ci-dessous) composée des mots individuels dans la ligne de commande actuelle. La ligne est divisée en mots comme readline la diviserait, en utilisant COMP_WORDBREAKS comme décrit ci-dessus. Cette variable n'est disponible que dans les fonctions shell invoquées par les fonctions de complétion programmable (voir Complétion programmable ci-dessous).

COPROC

Une variable de tableau (voir Tableaux ci-dessous) créée pour contenir les descripteurs de fichier pour la sortie et l'entrée d'un coprocessus sans nom (voir Coprocesses ci-dessus).

DIRSTACK

Une variable de tableau (voir Tableaux ci-dessous) contenant le contenu actuel de la pile de répertoires. Les répertoires apparaissent dans la pile dans l'ordre dans lequel ils sont affichés par la fonction intégrée dirs. L'affectation aux membres de cette variable de tableau peut être utilisée pour modifier des répertoires déjà dans la pile, mais les commandes intégrées pushd et popd doivent être utilisées pour ajouter et supprimer des répertoires. L'affectation à cette variable ne changera pas le répertoire courant. Si DIRSTACK n'est pas défini, il perd ses propriétés spéciales, même s'il est ensuite réinitialisé.

EPOCHREALTIME

Chaque fois que ce paramètre est référencé, il s'étend au nombre de secondes depuis l'époque Unix (voir time(3)) sous la forme d'une valeur à virgule flottante avec une granularité de l'ordre de la microseconde. Les attributions à EPOCHREALTIME sont ignorées. Si EPOCHREALTIME n'est pas défini, il perd ses propriétés spéciales, même s'il est ensuite réinitialisé.

EPOCHSECONDS

Chaque fois que ce paramètre est référencé, il s'étend au nombre de secondes depuis l'époque Unix (voir time(3)). Les affectations à EPOCHSECONDS sont ignorées. Si EPOCHSECONDS n'est pas défini, il perd ses propriétés spéciales, même s'il est ensuite réinitialisé.

EUID

Développe l'ID utilisateur effectif de l'utilisateur actuel, initialisé au démarrage du shell. Cette variable est en lecture seule.

FUNCNAME

Une variable tableau contenant les noms de toutes les fonctions shell actuellement dans la pile des appels d'exécution. L'élément avec l'index 0 est le nom de toute fonction shell en cours d'exécution. L'élément le plus bas (celui avec l'indice le plus élevé) est "main". Cette variable n'existe que lorsqu'une fonction shell est en cours d'exécution. Les affectations à FUNCNAME n'ont aucun effet. Si FUNCNAME n'est pas défini, il perd ses propriétés spéciales, même s'il est ensuite réinitialisé.

Cette variable peut être utilisée avec BASH_LINENO et BASH_SOURCE. Chaque élément de FUNCNAME a des éléments correspondants dans BASH_LINENO et BASH_SOURCE pour décrire la pile d'appels. Par exemple, $ {FUNCNAME[$i]} a été appelé à partir du fichier $ {BASH_SOURCE[$i+1]} au numéro de ligne $ {BASH_LINENO[$i ]}. La fonction intégrée appelant affiche la pile d'appels actuelle à l'aide de ces informations.

GROUPS

Une variable tableau contenant la liste des groupes dont l'utilisateur actuel est membre. Les affectations aux GROUPES n'ont aucun effet. Si GROUPS n'est pas défini, il perd ses propriétés spéciales, même s'il est ensuite réinitialisé.

HISTCMD

Le numéro d'historique, ou index dans la liste d'historique, de la commande en cours. Les affectations à HISTCMD sont ignorées. Si HISTCMD n'est pas défini, il perd ses propriétés spéciales, même s'il est ensuite réinitialisé.

HOSTNAME

Défini automatiquement sur le nom de l'hôte actuel.

HOSTTYPE

Défini automatiquement sur une chaîne qui décrit de manière unique le type de machine sur laquelle bash s'exécute. La valeur par défaut dépend du système.

LINENO

Chaque fois que ce paramètre est référencé, le shell substitue un nombre décimal représentant le numéro de ligne séquentielle actuel (commençant par 1) dans un script ou une fonction. Lorsqu'elle n'est pas dans un script ou une fonction, la valeur substituée n'est pas garantie d'être significative. Si LINENO n'est pas défini, il perd ses propriétés spéciales, même s'il est ensuite réinitialisé.

MACHTYPE

Défini automatiquement sur une chaîne qui décrit entièrement le type de système sur lequel bash s'exécute, au format standard GNU cpu-company-system. La valeur par défaut dépend du système.

MAPFILE

Une variable tableau (voir Tableaux ci-dessous) créée pour contenir le texte lu par le mapfile intégré lorsqu'aucun nom de variable n'est fourni.

OLDPWD

Le répertoire de travail précédent tel que défini par la commande cd.

OPTARG

La valeur du dernier argument d'option traité par la commande intégrée getops (voir COMMANDES INTÉGRÉES DU SHELL ci-dessous).

OPTIND

L'index du prochain argument à traiter par la commande intégrée getops (voir COMMANDES INTÉGRÉES DU SHELL ci-dessous).

OSTYPE

Défini automatiquement sur une chaîne qui décrit le système d'exploitation sur lequel bash s'exécute. La valeur par défaut dépend du système.

PIPESTATUS

Une variable de tableau (voir Tableaux ci-dessous) contenant une liste de valeurs d'état de sortie des processus dans le pipeline de premier plan le plus récemment exécuté (qui ne peut contenir qu'une seule commande).

PPID

ID de processus du parent du shell. Cette variable est en lecture seule.

PWD

Le répertoire de travail actuel tel que défini par la commande cd.

RANDOM

Chaque fois que ce paramètre est référencé, il se développe en un entier aléatoire compris entre 0 et 32767. L'attribution d'une valeur à RANDOM initialise (amorce) la séquence de nombres aléatoires. Si RANDOM n'est pas défini, il perd ses propriétés spéciales, même s'il est ensuite réinitialisé.

READLINE_LINE

Le contenu du tampon de ligne readline, à utiliser avec "bind -x" (voir COMMANDES INTÉGRÉES DU SHELL ci-dessous).

READLINE_MARK

La position de la marque (point d'insertion enregistré) dans le tampon de ligne readline, à utiliser avec "bind -x" (voir COMMANDES INTERNES DU SHELL ci-dessous). Les caractères entre le point d'insertion et la marque sont souvent appelés la région.

READLINE_POINT

La position du point d'insertion dans le tampon de ligne readline, à utiliser avec "bind -x" (voir COMMANDES INTERNES DU SHELL ci-dessous).

REPLY

Défini sur la ligne d'entrée lue par la commande intégrée read lorsqu'aucun argument n'est fourni.

SECONDS

Chaque fois que ce paramètre est référencé, le nombre de secondes depuis l'invocation du shell est renvoyé. Si une valeur est attribuée à SECONDS, la valeur renvoyée lors des références suivantes est le nombre de secondes depuis l'attribution plus la valeur attribuée. Le nombre de secondes à l'invocation du shell et l'heure actuelle sont toujours déterminés en interrogeant l'horloge système. Si SECONDS n'est pas défini, il perd ses propriétés spéciales, même s'il est ensuite réinitialisé.

SHELLOPTS

Une liste séparée par deux-points des options de shell activées. Chaque mot de la liste est un argument valide pour l'option -o de la commande intégrée set (voir COMMANDES INTÉGRÉES DU SHELL ci-dessous). Les options apparaissant dans SHELLOPTS sont celles signalées comme on par set -o. Si cette variable se trouve dans l'environnement au démarrage de bash, chaque option du shell de la liste sera activée avant de lire les fichiers de démarrage. Cette variable est en lecture seule.

SHLVL

Incrémenté de un à chaque démarrage d'une instance de bash.

SRANDOM

Cette variable se développe en un nombre pseudo-aléatoire de 32 bits chaque fois qu'elle est référencée. Le générateur de nombres aléatoires n'est pas linéaire sur les systèmes qui prennent en charge /dev/urandom ou arc4random, donc chaque nombre renvoyé n'a aucune relation avec les nombres qui le précèdent. Le générateur de nombres aléatoires ne peut pas être amorcé, donc les affectations à cette variable n'ont aucun effet. Si SRANDOM n'est pas défini, il perd ses propriétés spéciales, même s'il est ensuite réinitialisé.

UID

Développe l'ID utilisateur de l'utilisateur actuel, initialisé au démarrage du shell. Cette variable est en lecture seule.

Les variables suivantes sont utilisées par le shell. Dans certains cas, bash attribue une valeur par défaut à une variable ; ces cas sont notés ci-dessous.

BASH_COMPAT

La valeur est utilisée pour définir le niveau de compatibilité du shell. Voir SHELL COMPATIBILITY MODE ci-dessous pour une description des différents niveaux de compatibilité et de leurs effets. La valeur peut être un nombre décimal (par exemple, 4,2) ou un nombre entier (par exemple, 42) correspondant au niveau de compatibilité souhaité. Si BASH_COMPAT n'est pas défini ou défini sur la chaîne vide, le niveau de compatibilité est défini sur la valeur par défaut pour la version actuelle. Si BASH_COMPAT est défini sur une valeur qui n'est pas l'un des niveaux de compatibilité valides, le shell affiche un message d'erreur et définit le niveau de compatibilité sur la valeur par défaut pour la version actuelle. Les valeurs valides correspondent aux niveaux de compatibilité décrits ci-dessous sous

BSHELLCOMPATIBILITÉMODE. Par exemple, 4.2 et 42 sont des valeurs valides qui correspondent à l'option compat42 shopt et définissent le niveau de compatibilité sur 42. La version actuelle est également une valeur valide.

BASH_ENV

Si ce paramètre est défini lorsque bash exécute un script shell, sa valeur est interprétée comme un nom de fichier contenant des commandes pour initialiser le shell, comme dans ~/.bashrc. La valeur de BASH_ENV est soumise à l'expansion des paramètres, à la substitution de commandes et à l'expansion arithmétique avant d'être interprétée comme un nom de fichier.

PATH n'est pas utilisé pour rechercher le nom de fichier résultant.

BASH_XTRACEFD

S'il est défini sur un entier correspondant à un descripteur de fichier valide, bash écrira la sortie de trace générée lorsque set -x est activé sur ce descripteur de fichier. Le descripteur de fichier est fermé lorsque BASH_XTRACEFD est désactivé ou affecté à une nouvelle valeur. La désactivation de BASH_XTRACEFD ou l'attribution de la chaîne vide entraîne l'envoi de la sortie de trace à l'erreur standard. Notez que définir BASH_XTRACEFD sur 2 (le descripteur de fichier d'erreur standard) puis le désactiver entraînera la fermeture de l'erreur standard.

CDPATH

Le chemin de recherche pour la commande cd. Il s'agit d'une liste de répertoires séparés par des virgules dans laquelle le shell recherche les répertoires de destination spécifiés par la commande cd. Un exemple de valeur est ".:~:/usr".

CHILD_MAX

Définissez le nombre de valeurs d'état d'enfant quitté que le shell doit mémoriser. Bash ne permettra pas que cette valeur soit réduite en dessous d'un minimum imposé par POSIX, et il existe une valeur maximale (actuellement 8192) que cela ne peut pas dépasser. La valeur minimale dépend du système.

COLUMNS

Utilisé par la commande composée select pour déterminer la largeur du terminal lors de l'impression des listes de sélection. Défini automatiquement si l'option checkwinsize est activée ou dans un shell interactif à la réception d'un SIGWINCH.

COMPREPLY

Une variable de tableau à partir de laquelle bash lit les complétions possibles générées par une fonction shell invoquée par la fonction de complétion programmable (voir Complétion programmable ci-dessous). Chaque élément du tableau contient une complétion possible.

EMACS

Si bash trouve cette variable dans l'environnement lorsque le shell démarre avec la valeur "t", il suppose que le shell s'exécute dans un tampon de shell Emacs et désactive l'édition de ligne.

ENV

Développé et exécuté de manière similaire à BASH_ENV (voir INVOCATION ci-dessus) lorsqu'un shell interactif est invoqué en mode posix.

EXECIGNORE

Une liste de modèles de shell séparés par des deux-points (voir Pattern Matching) définissant la liste des noms de fichiers à ignorer par la recherche de commande à l'aide de PATH. Les fichiers dont les chemins d'accès complets correspondent à l'un de ces modèles ne sont pas considérés comme des fichiers exécutables aux fins de la complétion et de l'exécution de commandes via la recherche 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 soumis à EXECIGNORE. Utilisez cette variable pour ignorer les fichiers de bibliothèque partagée dont le bit exécutable est défini, mais qui ne sont pas des fichiers exécutables. La correspondance de modèle respecte le paramètre de l'option shell extglob.

FCEDIT

L'éditeur par défaut pour la commande intégrée fc.

FIGNORE

Une liste de suffixes séparés par deux-points à ignorer lors de la complétion de noms de fichiers (voir READLINE ci-dessous). Un nom de fichier dont le suffixe correspond à l'une des entrées de FIGORE est exclu de la liste des noms de fichiers correspondants. Un exemple de valeur est ".o:~".

FUNCNEST

Si défini sur une valeur numérique supérieure à 0, définit un niveau maximal d'imbrication de fonctions. Les appels de fonction qui dépassent ce niveau d'imbrication entraîneront l'abandon de la commande en cours.

GLOBIGNORE

Une liste de modèles séparés par deux-points définissant l'ensemble de noms de fichiers à ignorer par l'expansion des noms de chemin. Si un nom de fichier correspondant à un modèle d'expansion de chemin d'accès correspond également à l'un des modèles dans GLOBIGNORE, il est supprimé de la liste des correspondances.

HISTCONTROL

Une liste de valeurs séparées par deux-points contrôlant la manière dont les commandes sont enregistrées dans la liste d'historique. Si la liste de valeurs inclut ignoreespace, les lignes qui commencent par un caractère espace ne sont pas enregistrées dans la liste d'historique. Une valeur de ignoredups fait que les lignes correspondant à l'entrée d'historique précédente ne sont pas enregistrées. Une valeur de ignoreboth est un raccourci pour ignoreespace et ignoredups. Une valeur de erasedups entraîne la suppression de toutes les lignes précédentes correspondant à la ligne actuelle de la liste d'historique avant que cette ligne ne soit enregistrée. Toute valeur ne figurant pas dans la liste ci-dessus est ignorée. Si HISTCONTROL n'est pas défini ou n'inclut pas de valeur valide, toutes les lignes lues par l'analyseur shell sont enregistrées dans la liste d'historique, sous réserve de la valeur de HISTIGNORE. La deuxième ligne et les suivantes d'une commande composée multiligne ne sont pas testées et sont ajoutées à l'historique quelle que soit la valeur de HISTCONTROL.

HISTFILE

Le nom du fichier dans lequel l'historique des commandes est enregistré (voir HISTORY ci-dessous). La valeur par défaut est ~/.bash_history. S'il n'est pas défini, l'historique des commandes n'est pas enregistré lorsqu'un shell se termine.

HISTFILESIZE

Le nombre maximum de lignes contenues dans le fichier historique. Lorsqu'une valeur est affectée à cette variable, le fichier historique est tronqué, si nécessaire, pour ne pas contenir plus que ce nombre de lignes en supprimant les entrées les plus anciennes. Le fichier d'historique est également tronqué à cette taille après l'avoir écrit à la sortie d'un shell. Si la valeur est 0, le fichier historique est tronqué à une taille nulle. Les valeurs non numériques et les valeurs numériques inférieures à zéro inhibent la troncature. Le shell définit la valeur par défaut sur la valeur de HISTSIZE après avoir lu tous les fichiers de démarrage.

HISTIGNORE

Une liste de modèles séparés par deux-points utilisée pour décider quelles lignes de commande doivent être enregistrées dans la liste d'historique. Chaque motif est ancré au début de la ligne et doit correspondre à la ligne complète (aucun `*' implicite n'est ajouté). Chaque modèle est testé par rapport à la ligne après l'application des vérifications spécifiées par HISTCONTROL. En plus des caractères de correspondance de modèle de shell normaux, `&' correspond à la ligne d'historique précédente. `&' peut être échappé à l'aide d'une barre oblique inverse ; la barre oblique inverse est supprimée avant de tenter une correspondance. La deuxième ligne et les lignes suivantes d'une commande composée multiligne ne sont pas testées et sont ajoutées à l'historique quelle que soit la valeur de HISTIGNORE. La correspondance de modèle respecte le paramètre de l'option shell extglob.

HISTSIZE

Le nombre de commandes à retenir dans l'historique des commandes (voir HISTORIQUE ci-dessous). Si la valeur est 0, les commandes ne sont pas enregistrées dans la liste de l'historique. Les valeurs numériques inférieures à zéro entraînent l'enregistrement de chaque commande dans la liste d'historique (il n'y a pas de limite). Le shell définit la valeur par défaut sur 500 après avoir lu tous les fichiers de démarrage.

HISTTIMEFORMAT

Si cette variable est définie et non nulle, sa valeur est utilisée comme chaîne de format pour strftime(3) pour imprimer l'horodatage associé à chaque entrée d'historique affichée par history intégré. Si cette variable est définie, les horodatages sont écrits dans le fichier d'historique afin qu'ils puissent être conservés dans les sessions shell. Cela utilise le caractère de commentaire d'historique pour distinguer les horodatages des autres lignes d'historique.

HOME

Le répertoire personnel de l'utilisateur actuel ; l'argument par défaut de la commande intégrée cd. La valeur de cette variable est également utilisée lors de l'expansion du tilde.

HOSTFILE

Contient le nom d'un fichier au même format que  /etc/hosts  qui doit être lu lorsque le shell doit compléter un nom d'hôte. La liste des complétions possibles de nom d'hôte peut être modifiée pendant que le shell est en cours d'exécution ; la prochaine fois que la complétion du nom d'hôte est tentée après la modification de la valeur, bash ajoute le contenu du nouveau fichier à la liste existante. Si HOSTFILE est défini, mais n'a pas de valeur ou ne nomme pas de fichier lisible, bash tente de lire  /etc/hosts  pour obtenir le liste des complétions possibles de nom d'hôte. Lorsque HOSTFILE n'est pas défini, la liste des noms d'hôte est effacée.

IFS

Le séparateur de champ interne qui est utilisé pour diviser les mots après l'expansion et pour diviser les lignes en mots avec la commande intégrée read. La valeur par défaut est ``<space><tab><newline>''.

IGNOREEOF

Contrôle l'action d'un shell interactif à la réception d'un caractère EOF comme seule entrée. Si elle est définie, la valeur est le nombre de caractères EOF consécutifs qui doivent être saisis comme premiers caractères sur une ligne d'entrée avant la sortie de bash. Si la variable existe mais n'a pas de valeur numérique, ou n'a pas de valeur, la valeur par défaut est 10. Si elle n'existe pas, EOF signifie la fin de l'entrée dans le shell.

INPUTRC

Le nom de fichier du fichier de démarrage readline, remplaçant la valeur par défaut de  ~/.inputrc  (voir READLINE ci-dessous).

INSIDE_EMACS

Si cette variable apparaît dans l'environnement au démarrage du shell, bash suppose qu'elle s'exécute dans un tampon du shell Emacs et peut désactiver l'édition de ligne, en fonction de la valeur de TERM.

LANG

Utilisé pour déterminer la catégorie locale pour toute catégorie non spécifiquement sélectionnée avec une variable commençant par LC_.

LC_ALL

Cette variable remplace la valeur de LANG et toute autre variable LC_ spécifiant une catégorie locale.

LC_COLLATE

Cette variable détermine l'ordre de classement utilisé lors du tri des résultats de l'expansion des noms de chemin et détermine le comportement des expressions de plage, des classes d'équivalence et des séquences d'assemblage dans l'expansion des noms de chemin et la correspondance des modèles.

LC_CTYPE

Cette variable détermine l'interprétation des caractères et le comportement des classes de caractères dans l'expansion des noms de chemin et la correspondance des modèles.

LC_MESSAGES

Cette variable détermine les paramètres régionaux utilisés pour traduire les chaînes entre guillemets doubles précédées d'un $.

LC_NUMERIC

Cette variable détermine la catégorie locale utilisée pour le formatage des nombres.

LC_TIME

Cette variable détermine la catégorie locale utilisée pour le formatage des données et de l'heure.

LINES

Utilisé par la commande composée select pour déterminer la longueur de colonne pour l'impression des listes de sélection. Défini automatiquement si l'option checkwinsize est activée ou dans un shell interactif à la réception d'un SIGWINCH.

MAIL

Si ce paramètre est défini sur un nom de fichier ou de répertoire et que la variable MAILPATH n'est pas définie, bash informe l'utilisateur de l'arrivée du courrier dans le fichier ou le format Maildir spécifié annuaire.

MAILCHECK

Spécifie la fréquence (en secondes) à laquelle bash vérifie le courrier. La valeur par défaut est de 60 secondes. Lorsqu'il est temps de vérifier le courrier, le shell le fait avant d'afficher l'invite principale. Si cette variable n'est pas définie ou définie sur une valeur qui n'est pas un nombre supérieur ou égal à zéro, le shell désactive la vérification du courrier.

MAILPATH

Une liste de noms de fichiers séparés par deux-points à vérifier pour le courrier. Le message à imprimer lorsque le courrier arrive dans un fichier particulier peut être spécifié en séparant le nom du fichier du message par un '?'. Lorsqu'il est utilisé dans le texte du message, $_ se développe au nom du fichier courrier actuel. Exemple:

MAILPATH='/var/mail/bfox?"You have mail":~/shell-mail?"$_ has mail!"'

Bash peut être configuré pour fournir une valeur par défaut pour cette variable (il n'y a pas de valeur par défaut), mais l'emplacement des fichiers de messagerie utilisateur qu'il utilise dépend du système (par exemple, ).

/var/mail/$USER
OPTERR

S'il est défini sur la valeur 1, bash affiche les messages d'erreur générés par la commande intégrée getops (voir COMMANDES INTÉGRÉES DU SHELL ci-dessous).

OPTERR est initialisé à 1 chaque fois que le shell est appelé ou qu'un script shell est exécuté.

PATH

Le chemin de recherche des commandes. Il s'agit d'une liste de répertoires séparés par deux-points dans lesquels le shell recherche des commandes (voir EXÉCUTION DE COMMANDE ci-dessous). Un nom de répertoire de longueur nulle (null) dans la valeur de PATH indique le répertoire actuel. Un nom de répertoire nul peut apparaître sous la forme de deux deux-points adjacents, ou sous la forme d'un deux-points initial ou final. Le chemin par défaut dépend du système et est défini par l'administrateur qui installe bash. Une valeur commune est

/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin
POSIXLY_CORRECT

Si cette variable est dans l'environnement au démarrage de bash, le shell entre en mode posix avant de lire les fichiers de démarrage, comme si l'invocation --posix l'option avait été fournie. S'il est défini pendant que le shell est en cours d'exécution, bash active le mode posix, comme si la commande set -o posix avait été exécutée. Lorsque le shell entre en mode posix, il définit cette variable si elle n'était pas déjà définie.

PROMPT_COMMAND

Si cette variable est définie et est un tableau, la valeur de chaque élément défini est exécutée en tant que commande avant l'émission de chaque invite principale. Si ceci est défini mais pas une variable de tableau, sa valeur est utilisée comme une commande à exécuter à la place.

PROMPT_DIRTRIM

Si défini sur un nombre supérieur à zéro, la valeur est utilisée comme nombre de composants de répertoire de fin à conserver lors du développement des échappements de chaîne d'invite \w et \W (voir INVITE ci-dessous). Les caractères supprimés sont remplacés par des points de suspension.

PS0

La valeur de ce paramètre est développée (voir PROMPTING ci-dessous) et affichée par les shells interactifs après la lecture d'une commande et avant l'exécution de la commande.

PS1

La valeur de ce paramètre est développée (voir INVITE ci-dessous) et utilisée comme chaîne d'invite principale. La valeur par défaut est ``\s-\v\$''.

PS2

La valeur de ce paramètre est développée comme avec PS1 et utilisée comme chaîne d'invite secondaire. La valeur par défaut est ``> ''.

PS3

La valeur de ce paramètre est utilisée comme invite pour la commande select (voir SHELL GRAMMAIRE ci-dessus).

PS4

La valeur de ce paramètre est développée comme avec PS1 et la valeur est imprimée avant que chaque commande bash ne s'affiche pendant une trace d'exécution. Le premier caractère de la valeur étendue de PS4 est reproduit plusieurs fois, si nécessaire, pour indiquer plusieurs niveaux d'indirection. La valeur par défaut est ``+ ''.

SHELL

Cette variable se développe en le nom de chemin complet vers le shell. S'il n'est pas défini au démarrage du shell, bash lui attribue le chemin d'accès complet du shell de connexion de l'utilisateur actuel.

TIMEFORMAT

La valeur de ce paramètre est utilisée comme chaîne de format spécifiant comment les informations de synchronisation pour les pipelines précédés du mot réservé time doivent être affichées. Le caractère % introduit une séquence d'échappement qui est étendue à une valeur temporelle ou à d'autres informations. Les séquences d'échappement et leurs significations sont les suivantes ; les accolades désignent des portions facultatives.

%%

Un % littéral.

%[p][l]R

Le temps écoulé en secondes.

%[p][l]U

Le nombre de secondes CPU passées en mode utilisateur.

%[p][l]S

Le nombre de secondes CPU passées en mode système.

%P

Le pourcentage de CPU, calculé comme (%U + %S)/%R.

Le p facultatif est un chiffre spécifiant la précision, le nombre de chiffres fractionnaires après un point décimal. Une valeur de 0 n'entraîne la sortie d'aucun point décimal ou fraction. Au plus trois chiffres après la virgule décimale peuvent être spécifiés ; les valeurs de p supérieures à 3 sont remplacées par 3. Si p n'est pas spécifié, la valeur 3 est utilisée.

Le l facultatif spécifie un format plus long, y compris les minutes, de la forme MMmSS.FFs. La valeur de p détermine si la fraction est incluse ou non.

Si cette variable n'est pas définie, bash agit comme si elle avait la valeur $'\nreal\t%3lR\nuser\t%3lU\nsys\t%3lS' . Si la valeur est nulle, aucune information de synchronisation n'est affichée. Une nouvelle ligne de fin est ajoutée lorsque la chaîne de format est affichée.

TMOUT

S'il est défini sur une valeur supérieure à zéro, TMOUT est traité comme le délai d'attente par défaut pour l'intégration read. La commande select se termine si l'entrée n'arrive pas après

TMOUT secondes lorsque l'entrée provient d'un terminal. Dans un shell interactif, la valeur est interprétée comme le nombre de secondes d'attente d'une ligne d'entrée après l'émission de l'invite principale. Bash se termine après avoir attendu ce nombre de secondes si une ligne complète d'entrée n'arrive pas.

TMPDIR

S'il est défini, bash utilise sa valeur comme nom d'un répertoire dans lequel bash crée des fichiers temporaires à l'usage du shell.

auto_resume

Cette variable contrôle la façon dont le shell interagit avec l'utilisateur et le contrôle du travail. Si cette variable est définie, les commandes simples d'un seul mot sans redirection sont traitées comme des candidats à la reprise d'un travail arrêté existant. Aucune ambiguïté n'est permise; s'il existe plusieurs tâches commençant par la chaîne saisie, la tâche la plus récemment consultée est sélectionnée. Le nom d'une tâche arrêtée, dans ce contexte, est la ligne de commande utilisée pour la démarrer. Si la valeur est exacte, la chaîne fournie doit correspondre exactement au nom d'une tâche arrêtée ; si défini sur sous-chaîne, la chaîne fournie doit correspondre à une sous-chaîne du nom d'une tâche arrêtée. La valeur sous-chaîne fournit des fonctionnalités analogues à l'identifiant de travail % ? (voir CONTRÔLE DE TRAVAIL ci-dessous). Si elle est définie sur une autre valeur, la chaîne fournie doit être un préfixe du nom d'une tâche arrêtée ; cela fournit une fonctionnalité analogue à l'identifiant de tâche %string.

histchars

Les deux ou trois caractères qui contrôlent l'expansion et la segmentation de l'historique (voir EXPANSION DE L'HISTORIQUE ci-dessous). Le premier caractère est le caractère expansion de l'historique, le caractère qui signale le début d'une expansion de l'historique, normalement `!'. Le deuxième caractère est le caractère substitution rapide, qui est utilisé comme raccourci pour réexécuter la commande précédente entrée, en remplaçant une chaîne par une autre dans la commande. La valeur par défaut est `^'. Le troisième caractère facultatif est le caractère qui indique que le reste de la ligne est un commentaire lorsqu'il est trouvé comme premier caractère d'un mot, normalement `#'. Le caractère de commentaire d'historique entraîne l'omission de la substitution d'historique pour les mots restants sur la ligne. Cela n'oblige pas nécessairement l'analyseur shell à traiter le reste de la ligne comme un commentaire.

Tableaux

Bash fournit des variables de tableau indexées et associatives unidimensionnelles. Toute variable peut être utilisée comme tableau indexé ; la commande intégrée declare déclarera explicitement un tableau. Il n'y a pas de limite maximale sur la taille d'un tableau, ni aucune exigence que les membres soient indexés ou affectés de manière contiguë. Les tableaux indexés sont référencés à l'aide d'entiers (y compris les expressions arithmétiques) et sont basés sur zéro ; les tableaux associatifs sont référencés à l'aide de chaînes arbitraires. Sauf indication contraire, les indices de tableau indexés doivent être des entiers non négatifs.

Un tableau indexé est créé automatiquement si une variable est affectée à l'aide de la syntaxe nom[indice]=valeur. L'indice est traité comme une expression arithmétique qui doit donner un nombre. Pour déclarer explicitement un tableau indexé, utilisez declare -a name (voir SHELL BUILTIN COMMANDS ci-dessous). declare -a nom[indice] est également accepté ; l'indice est ignoré.

Les tableaux associatifs sont créés à l'aide de declare -A name.

Les attributs peuvent être spécifiés pour une variable de tableau à l'aide des commandes intégrées declare et readonly. Chaque attribut s'applique à tous les membres d'un tableau.

Les tableaux sont affectés à l'aide d'affectations composées de la forme name=(value1 ... valuen), où chaque valeur peut être de la forme [indice]=chaîne. Les affectations de tableaux indexés ne nécessitent rien d'autre que string. Chaque valeur de la liste est développée à l'aide de toutes les extensions de shell décrites ci-dessous sous EXPANSION. Lors de l'affectation à des tableaux indexés, si les crochets facultatifs et l'indice sont fournis, cet index est affecté à ; sinon, l'index de l'élément affecté est le dernier index affecté par l'instruction plus un. L'indexation commence à zéro.

Lors de l'affectation à un tableau associatif, les mots d'une affectation composée peuvent être soit des instructions d'affectation, pour lesquelles l'indice est requis, soit une liste de mots interprétée comme une séquence de clés et de valeurs alternées : nom =( clé1 valeur1 clé2 valeur2 ...). Ceux-ci sont traités de la même manière que name=( [key1]=value1 [key2 ]=valeur2 ...). Le premier mot de la liste détermine comment les mots restants sont interprétés ; toutes les affectations d'une liste doivent être du même type. Lors de l'utilisation de paires clé/valeur, les clés ne doivent pas être manquantes ou vides ; une dernière valeur manquante est traitée comme la chaîne vide.

Cette syntaxe est également acceptée par la commande intégrée declare. Des éléments de tableau individuels peuvent être affectés à l'aide de la syntaxe nom[indice]=valeur présentée ci-dessus. Lors de l'affectation à un tableau indexé, si nom est indicé par un nombre négatif, ce nombre est interprété comme relatif à un supérieur à l'index maximum de nom, donc les indices négatifs comptent à partir de la fin du tableau, et un index de -1 fait référence au dernier élément.

Tout élément d'un tableau peut être référencé à l'aide de $ {nom[indice]}. Les accolades sont nécessaires pour éviter les conflits avec l'expansion du nom de chemin. Si indice est @ ou *, le mot s'étend à tous les membres de nom. Ces indices ne diffèrent que lorsque le mot apparaît entre guillemets doubles. Si le mot est entre guillemets doubles, $ {nom[*]} se développe en un seul mot avec la valeur de chaque membre du tableau séparée par le premier caractère de l'IFS variable spéciale, et $ {nom[@]} développe chaque élément de nom en un mot séparé. Lorsqu'il n'y a pas de membres de tableau, $ {nom[@]} se développe à rien. Si l'expansion entre guillemets doubles se produit dans un mot, l'expansion du premier paramètre est jointe à la partie de début du mot d'origine, et l'expansion du dernier paramètre est jointe à la dernière partie du mot d'origine. Ceci est analogue au développement des paramètres spéciaux * et @ (voir Paramètres spéciaux ci-dessus). $ {#nom[indice]} se développe jusqu'à la longueur de $ {nom[indice ]}. Si indice est * ou @, l'expansion est le nombre d'éléments dans le tableau. Si l'indice utilisé pour référencer un élément d'un tableau indexé est évalué à un nombre inférieur à zéro, il est interprété comme relatif à un supérieur à l'indice maximum du tableau, donc les indices négatifs comptent à rebours à partir du fin du tableau et un index de -1 fait référence au dernier élément.

Référencer une variable de tableau sans indice équivaut à référencer le tableau avec un indice de 0. Toute référence à une variable utilisant un indice valide est légale, et bash créera un tableau si nécessaire.

Une variable de tableau est considérée comme définie si un indice a reçu une valeur. La chaîne nulle est une valeur valide.

Il est possible d'obtenir les clés (indices) d'un tableau ainsi que les valeurs. $ {!nom[@]} et $ {!nom[*]} développe les indices assignés dans la variable tableau nom. Le traitement entre guillemets doubles est similaire au développement des paramètres spéciaux @ et * entre guillemets doubles.

La commande intégrée unset est utilisée pour détruire les tableaux. unset name[subscript] détruit l'élément de tableau à l'index subscript, pour les tableaux indexés et associatifs. Les indices négatifs des tableaux indexés sont interprétés comme décrit ci-dessus. La suppression du dernier élément d'une variable de tableau ne supprime pas la variable. unset nom, où nom est un tableau, ou unset nom[indice], où indice est * ou @, supprime le tableau entier.

Lorsque vous utilisez un nom de variable avec un indice comme argument d'une commande, comme avec unset, sans utiliser la syntaxe d'expansion de mot décrite ci-dessus, l'argument est sujet à l'expansion du nom de chemin. Si l'extension du nom de chemin n'est pas souhaitée, l'argument doit être entre guillemets.

Les commandes intégrées declare, local et readonly acceptent chacune une option -a pour spécifier un tableau indexé et un < option-A pour spécifier un tableau associatif. Si les deux options sont fournies, -A est prioritaire. La commande intégrée read accepte une option -a pour assigner une liste de mots lus depuis l'entrée standard à un tableau. Les commandes intégrées set et declare affichent les valeurs de tableau d'une manière qui permet de les réutiliser comme affectations.

EXPANSION

L'expansion est effectuée sur la ligne de commande après qu'elle a été divisée en mots. Il existe sept types d'expansion : expansion d'accolades, expansion de tilde, expansion de paramètre et de variable, substitution de commande, expansion arithmétique, division de mots et expansion de nom de chemin.

L'ordre des expansions est : expansion des accolades ; développement de tilde, développement de paramètres et de variables, développement arithmétique et substitution de commande (effectué de gauche à droite); fractionnement de mots ; et l'expansion du nom de chemin.

Sur les systèmes qui peuvent le prendre en charge, une extension supplémentaire est disponible : substitution de processus. Ceci est effectué en même temps que le tilde, le paramètre, la variable et l'expansion arithmétique et la substitution de commande.

Une fois ces développements effectués, les guillemets présents dans le mot d'origine sont supprimés, sauf s'ils ont eux-mêmes été guillemets (suppression des guillemets).

Seuls le développement d'accolades, le fractionnement de mots et le développement de noms de chemin peuvent augmenter le nombre de mots du développement ; d'autres extensions étendent un seul mot à un seul mot. Les seules exceptions à cela sont les extensions de "$@" et "$ {nom[@]}", et, dans la plupart des cas, $* et $ {nom[*]} comme expliqué ci-dessus (voir PARAMETRES).

Expansion de l'accolade

L'expansion des accolades est un mécanisme par lequel des chaînes arbitraires peuvent être générées. Ce mécanisme est similaire à l'expansion des noms de chemin, mais les noms de fichiers générés n'ont pas besoin d'exister. Les modèles à développer entre accolades prennent la forme d'un préambule facultatif, suivi soit d'une série de chaînes séparées par des virgules, soit d'une expression de séquence entre une paire d'accolades, suivie d'un postscript facultatif. Le préambule est préfixé à chaque chaîne contenue dans les accolades, et le post-scriptum est ensuite ajouté à chaque chaîne résultante, se développant de gauche à droite.

Les expansions d'accolades peuvent être imbriquées. Les résultats de chaque chaîne développée ne sont pas triés ; L'ordre de gauche à droite est conservé. Par exemple, a{d,c,b}e se développe en `ade ace abe'.

Une expression de séquence prend la forme {x..y[..<incr]}, où x et y sont soit des entiers soit des caractères uniques, et incr , un incrément facultatif, est un entier. Lorsque des entiers sont fournis, l'expression se développe à chaque nombre entre x et y, inclus. Les entiers fournis peuvent être préfixés par 0 pour forcer chaque terme à avoir la même largeur. Lorsque x ou y commence par un zéro, le shell tente de forcer tous les termes générés à contenir le même nombre de chiffres, en ajoutant des zéros si nécessaire. Lorsque des caractères sont fournis, l'expression s'étend lexicographiquement à chaque caractère entre x et y, inclus, en utilisant les paramètres régionaux C par défaut. Notez que x et y doivent être du même type. Lorsque l'incrément est fourni, il est utilisé comme différence entre chaque terme. L'incrément par défaut est 1 ou -1 selon le cas.

L'expansion des accolades est effectuée avant toute autre expansion, et tous les caractères spéciaux aux autres expansions sont conservés dans le résultat. Il est strictement textuel. Bash n'applique aucune interprétation syntaxique au contexte de l'expansion ou du texte entre les accolades.

Un développement d'accolades correctement formé doit contenir des accolades ouvrantes et fermantes sans guillemets, et au moins une virgule sans guillemets ou une expression de séquence valide. Toute expansion de contreventement mal formée reste inchangée. Un { ou , peut être placé entre guillemets avec une barre oblique inverse pour éviter qu'il ne soit considéré comme faisant partie d'une expression entre accolades. Pour éviter les conflits avec l'expansion des paramètres, la chaîne $ { n'est pas considérée comme éligible pour l'expansion des accolades et inhibe l'expansion des accolades jusqu'à la fermeture }.

Cette construction est généralement utilisée comme raccourci lorsque le préfixe commun des chaînes à générer est plus long que dans l'exemple ci-dessus :

mkdir /usr/local/src/bash/{old,new,dist,bugs}

ou

chown root /usr/{ucb/{ex,edit},lib/{ex?.?*,how_ex}}

L'expansion des accolades introduit une légère incompatibilité avec les versions historiques de sh. sh ne traite pas spécialement les accolades ouvrantes ou fermantes lorsqu'elles apparaissent comme faisant partie d'un mot, et les conserve dans la sortie. Bash supprime les accolades des mots suite à l'expansion des accolades. Par exemple, un mot entré dans sh en tant que fichier{1,2} apparaît de manière identique dans la sortie. Le même mot est généré en tant que fichier1 fichier2 après expansion par bash. Si une compatibilité stricte avec sh est souhaitée, démarrez bash avec l'option +B ou désactivez l'expansion des accolades avec +B > à la commande set (voir COMMANDES INTÉGRÉES DU SHELL ci-dessous).

Extension de tilde

Si un mot commence par un caractère tilde sans guillemets (`~'), tous les caractères précédant la première barre oblique sans guillemets (ou tous les caractères, s'il n'y a pas de barre oblique sans guillemets) sont considérés comme un tilde -préfixe. Si aucun des caractères du préfixe tilde n'est entre guillemets, les caractères du préfixe tilde suivant le tilde sont traités comme un éventuel nom de connexion. Si ce nom de connexion est la chaîne vide, le tilde est remplacé par la valeur du paramètre shell HOME. Si HOME n'est pas défini, le répertoire personnel de l'utilisateur exécutant le shell est remplacé à la place. Sinon, le préfixe tilde est remplacé par le répertoire personnel associé au nom de connexion spécifié.

Si le préfixe tilde est un `~+', la valeur de la variable shell PWD remplace le préfixe tilde. Si le préfixe tilde est un `~-', la valeur de la variable shell OLDPWD, si elle est définie, est remplacée. Si les caractères suivant le tilde dans le préfixe tilde consistent en un nombre N, éventuellement préfixé par un `+' ou un `-', le préfixe tilde est remplacé par l'élément correspondant du répertoire pile, tel qu'il serait affiché par la commande intégrée dirs invoquée avec le préfixe tilde comme argument. Si les caractères suivant le tilde dans le préfixe tilde consistent en un nombre sans `+' ou `-', `+' est supposé.

Si le nom de connexion n'est pas valide ou si le développement du tilde échoue, le mot reste inchangé.

Chaque affectation de variable est vérifiée pour les préfixes tilde sans guillemets immédiatement après un  : ou le premier =. Dans ces cas, une expansion de tilde est également effectuée. Par conséquent, on peut utiliser des noms de fichiers avec des tildes dans les affectations à PATH, MAILPATH et CDPATH, et le shell attribue la valeur développée.

Bash effectue également un développement en tilde sur les mots satisfaisant aux conditions d'affectation de variables (comme décrit ci-dessus sous PARAMETRES) lorsqu'ils apparaissent comme arguments de commandes simples. Bash ne le fait pas, à l'exception des commandes de déclaration listées ci-dessus, lorsqu'il est en mode posix.

Extension des paramètres

Le caractère $ introduit l'expansion des paramètres, la substitution de commande ou l'expansion arithmétique. Le nom du paramètre ou le symbole à développer peut être entouré d'accolades, qui sont facultatives mais servent à protéger la variable à développer des caractères qui la suivent immédiatement et qui pourraient être interprétés comme faisant partie du nom.

Lorsque des accolades sont utilisées, l'accolade de fin correspondante est la première `}' non échappée par une barre oblique inverse ou dans une chaîne entre guillemets, et non dans une expansion arithmétique intégrée, une substitution de commande ou une expansion de paramètre.

${parameter}

La valeur du paramètre est remplacée. Les accolades sont obligatoires lorsque paramètre est un paramètre positionnel à plusieurs chiffres, ou lorsque paramètre est suivi d'un caractère qui ne doit pas être interprété comme faisant partie de son nom. Le paramètre est un paramètre shell comme décrit ci-dessus PARAMETERS) ou une référence de tableau (Arrays).

Si le premier caractère de paramètre est un point d'exclamation (!) et que paramètre n'est pas un nomref, il introduit un niveau d'indirection. Bash utilise la valeur formée en développant le reste du paramètre comme nouveau paramètre ; celui-ci est ensuite développé et cette valeur est utilisée dans le reste de l'expansion, plutôt que dans l'expansion du paramètre d'origine. C'est ce qu'on appelle l'expansion indirecte. La valeur est sujette à l'expansion du tilde, à l'expansion des paramètres, à la substitution de commande et à l'expansion arithmétique. Si paramètre est une référence de nom, cela s'étend au nom du paramètre référencé par paramètre au lieu d'effectuer l'expansion indirecte complète. Les exceptions à cela sont les extensions de $ {!prefix*} et $ {! nom[@]} décrit ci-dessous. Le point d'exclamation doit suivre immédiatement l'accolade gauche afin d'introduire l'indirection.

Dans chacun des cas ci-dessous, mot est sujet à l'expansion du tilde, à l'expansion des paramètres, à la substitution de commande et à l'expansion arithmétique.

Lorsque vous n'effectuez pas d'expansion de sous-chaîne, en utilisant les formes documentées ci-dessous (par exemple,  :-), bash teste un paramètre non défini ou nul. L'omission des deux-points entraîne un test uniquement pour un paramètre non défini.

${parameter:-word}

Utiliser les valeurs par défaut. Si le paramètre n'est pas défini ou est nul, le développement du mot est remplacé. Sinon, la valeur du paramètre est substituée.

${parameter:=word}

Attribuer des valeurs par défaut. Si le paramètre n'est pas défini ou est nul, le développement du mot est affecté au paramètre. La valeur du paramètre est alors substituée. Les paramètres de position et les paramètres spéciaux ne peuvent pas être affectés de cette manière.

${parameter:?word}

Afficher l'erreur si Null ou Non défini. Si paramètre est nul ou non défini, le développement de mot (ou un message à cet effet si mot n'est pas présent) est écrit dans le standard erreur et le shell, s'il n'est pas interactif, se ferme. Sinon, la valeur du paramètre est substituée.

${parameter:+word}

Utiliser une valeur alternative. Si paramètre est nul ou non défini, rien n'est remplacé, sinon le développement de mot est remplacé.

${parameter:offset}
${parameter:offset:length}

Extension de sous-chaîne. S'étend jusqu'à longueur caractères de la valeur de paramètre en commençant par le caractère spécifié par décalage. Si paramètre est @, un tableau indexé en indice par @ ou *, ou un nom de tableau associatif, les résultats diffèrent comme décrit ci-dessous. Si longueur est omis, se développe jusqu'à la sous-chaîne de la valeur de paramètre commençant au caractère spécifié par offset et s'étendant jusqu'à la fin de la valeur . longueur et décalage sont des expressions arithmétiques (voir ÉVALUATION ARITHMÉTIQUE ci-dessous).

Si offset est évalué à un nombre inférieur à zéro, la valeur est utilisée comme décalage en caractères à partir de la fin de la valeur du paramètre. Si longueur est évalué à un nombre inférieur à zéro, il est interprété comme un décalage en caractères à partir de la fin de la valeur de paramètre plutôt qu'un nombre de caractères, et l'expansion est les caractères entre décalage et ce résultat. Notez qu'un décalage négatif doit être séparé des deux-points par au moins un espace pour éviter d'être confondu avec l'expansion  :-.

Si paramètre est @, le résultat est des paramètres de position de longueur commençant à décalage. Un décalage négatif est pris par rapport à un plus grand que le plus grand paramètre de position, donc un décalage de -1 est évalué au dernier paramètre de position. Il s'agit d'une erreur d'expansion si longueur est évalué à un nombre inférieur à zéro.

Si paramètre est un nom de tableau indexé en indice par @ ou *, le résultat est la longueur des membres du tableau commençant par $ {paramètre [décalage]}. Un décalage négatif est pris par rapport à un supérieur à l'index maximum du tableau spécifié. Il s'agit d'une erreur d'expansion si longueur est évalué à un nombre inférieur à zéro.

L'expansion de sous-chaîne appliquée à un tableau associatif produit des résultats indéfinis.

L'indexation des sous-chaînes est basée sur zéro sauf si les paramètres positionnels sont utilisés, auquel cas l'indexation commence à 1 par défaut. Si offset vaut 0 et que les paramètres de position sont utilisés, $0 est préfixé à la liste.

${!prefix*}
${!prefix@}

Noms correspondant au préfixe. Développe les noms des variables dont les noms commencent par préfixe, séparés par le premier caractère du

Variable spéciale IFS. Lorsque @ est utilisé et que le développement apparaît entre guillemets doubles, chaque nom de variable se développe en un mot séparé.

${!name[@]}
${!name[*]}

Liste des clés de tableau. Si nom est une variable de tableau, développe la liste des indices de tableau (clés) assignés dans nom. Si name n'est pas un tableau, se développe à 0 si name est défini et null sinon. Lorsque @ est utilisé et que le développement apparaît entre guillemets doubles, chaque clé se développe en un mot séparé.

${#parameter}

Longueur du paramètre. La longueur en caractères de la valeur de paramètre est substituée. Si paramètre est * ou @, la valeur substituée est le nombre de paramètres positionnels. Si paramètre est un nom de tableau indicé par * ou @, la valeur substituée est le nombre d'éléments dans le tableau. Si paramètre est un nom de tableau indexé en indice par un nombre négatif, ce nombre est interprété comme relatif à un supérieur à l'index maximum de paramètre, donc les indices négatifs comptent à rebours à partir du fin du tableau et un index de -1 fait référence au dernier élément.

${parameter#word}
${parameter##word}

Supprimer le modèle de préfixe correspondant. Le mot est développé pour produire un modèle comme dans le développement du nom de chemin, et mis en correspondance avec la valeur développée du paramètre en utilisant les règles décrites dans la section Pattern Matching dessous. Si le modèle correspond au début de la valeur de paramètre, alors le résultat de l'expansion est la valeur étendue de paramètre avec le modèle correspondant le plus court (le `` #'' case) ou le plus long motif correspondant (la ``##'' case) supprimé. Si paramètre est @ ou *, l'opération de suppression de modèle est appliquée à chaque paramètre positionnel tour à tour, et l'expansion est la liste résultante. Si paramètre est une variable de tableau indicée par @ ou *, l'opération de suppression de modèle est appliquée à chaque membre du tableau tour à tour, et le l'expansion est la liste résultante.

${parameter%word}
${parameter%%word}

Supprimer le modèle de suffixe correspondant. Le mot est développé pour produire un modèle comme dans le développement du nom de chemin, et mis en correspondance avec la valeur développée du paramètre en utilisant les règles décrites dans la section Pattern Matching dessous. Si le modèle correspond à une partie finale de la valeur développée de paramètre, alors le résultat de l'expansion est la valeur développée de paramètre avec le modèle correspondant le plus court (le ``< casse%'') ou le plus long motif correspondant (cas ``%%'') supprimé. Si paramètre est @ ou *, l'opération de suppression de modèle est appliquée à chaque paramètre positionnel tour à tour, et l'expansion est la liste résultante. Si paramètre est une variable de tableau indicée par @ ou *, l'opération de suppression de modèle est appliquée à chaque membre du tableau tour à tour, et le l'expansion est la liste résultante.

${parameter/pattern/string}

Substitution de modèle. Le motif est développé pour produire un modèle tout comme dans l'expansion du nom de chemin, Paramètre est développé et la plus longue correspondance de motif par rapport à sa valeur est remplacée par chaîne. La correspondance est effectuée en utilisant les règles décrites dans la section Pattern Matching ci-dessous. Si motif commence par /, toutes les correspondances de motif sont remplacées par chaîne. Normalement, seul le premier match est remplacé. Si motif commence par #, il doit correspondre au début de la valeur développée du paramètre. Si motif commence par %, il doit correspondre à la fin de la valeur développée du paramètre. Si string est nul, les correspondances de pattern sont supprimées et le / suivant pattern peut être omis. Si l'option de shell nocasematch est activée, la correspondance est effectuée sans tenir compte de la casse des caractères alphabétiques. Si paramètre est @ ou *, l'opération de substitution est appliquée à chaque paramètre positionnel tour à tour, et l'expansion est la liste résultante. Si paramètre est une variable de tableau indicée par @ ou *, l'opération de substitution est appliquée tour à tour à chaque membre du tableau, et l'expansion est la liste résultante.

${parameter^pattern}
${parameter^^pattern}
${parameter,pattern}
${parameter,,pattern}

Modification de cas. Cette expansion modifie la casse des caractères alphabétiques dans paramètre. Le motif est développé pour produire un modèle comme dans l'expansion du nom de chemin. Chaque caractère de la valeur étendue du paramètre est testé par rapport au motif et, s'il correspond au motif, sa casse est convertie. Le modèle ne doit pas tenter de faire correspondre plus d'un caractère. L'opérateur ^ convertit les lettres minuscules correspondant au motif en majuscules ; l'opérateur , convertit les lettres majuscules correspondantes en minuscules. Les développements ^^ et ,, convertissent chaque caractère correspondant dans la valeur développée ; les développements ^ et , correspondent et convertissent uniquement le premier caractère de la valeur développée. Si motif est omis, il est traité comme un ?, qui correspond à chaque caractère. Si paramètre est @ ou *, l'opération de modification de la casse est appliquée à chaque paramètre positionnel tour à tour, et l'expansion est la liste résultante. Si paramètre est une variable de tableau indicée par @ ou *, l'opération de modification de casse est appliquée tour à tour à chaque membre du tableau, et la l'expansion est la liste résultante.

${parameter@operator}

Transformation de paramètres. L'expansion est soit une transformation de la valeur de paramètre ou des informations sur paramètre lui-même, selon la valeur de opérateur. Chaque opérateur est une seule lettre :

U

L'expansion est une chaîne qui est la valeur du paramètre avec des caractères alphabétiques minuscules convertis en majuscules.

u

L'expansion est une chaîne qui est la valeur du paramètre avec le premier caractère converti en majuscule, s'il est alphabétique.

L

L'expansion est une chaîne qui est la valeur de paramètre avec des caractères alphabétiques majuscules convertis en minuscules.

Q

L'expansion est une chaîne qui est la valeur de paramètre entre guillemets dans un format qui peut être réutilisé comme entrée.

E

L'expansion est une chaîne qui est la valeur du paramètre avec des séquences d'échappement antislash développées comme avec le mécanisme de guillemets $'...'.

P

L'expansion est une chaîne résultant de l'expansion de la valeur de paramètre comme s'il s'agissait d'une chaîne d'invite (voir INVITE ci-dessous).

A

L'expansion est une chaîne sous la forme d'une instruction d'affectation ou d'une commande declare qui, si elle est évaluée, recréera le paramètre avec ses attributs et sa valeur.

K

Produit une version éventuellement entre guillemets de la valeur de paramètre, sauf qu'il imprime les valeurs des tableaux indexés et associatifs sous la forme d'une séquence de paires clé-valeur entre guillemets (voir Tableaux ci-dessus ).

a

L'expansion est une chaîne composée de valeurs de drapeau représentant les attributs de paramètre.

Si paramètre est @ ou *, l'opération est appliquée à chaque paramètre positionnel tour à tour, et l'expansion est la liste résultante. Si paramètre est une variable de tableau indicée par @ ou *, l'opération est appliquée à chaque membre du tableau tour à tour, et l'expansion est la liste qui en résulte.

Le résultat de l'expansion est sujet à la division des mots et à l'expansion des noms de chemin comme décrit ci-dessous.

Substitution de commande

La substitution de commande permet à la sortie d'une commande de remplacer le nom de la commande. Il existe deux formes :

$(command )

ou

`command`

Bash effectue l'expansion en exécutant la commande dans un environnement de sous-shell et en remplaçant la substitution de commande par la sortie standard de la commande, toutes les nouvelles lignes de fin étant supprimées. Les retours à la ligne intégrés ne sont pas supprimés, mais ils peuvent être supprimés lors de la division des mots. La substitution de commande $ (cat file) peut être remplacée par l'équivalent mais plus rapide $ (< fichier).

Lorsque l'ancienne forme de substitution des guillemets inversés est utilisée, la barre oblique inverse conserve sa signification littérale, sauf lorsqu'elle est suivie de $, ` ou \. Le premier guillemet inversé non précédé d'une barre oblique inverse met fin à la substitution de commande. Lorsque vous utilisez la forme $ ( commande ), tous les caractères entre parenthèses constituent la commande ; aucun n'est traité spécialement.

Les substitutions de commandes peuvent être imbriquées. Pour imbriquer lors de l'utilisation de la forme entre guillemets, échappez les guillemets intérieurs avec des barres obliques inverses.

Si la substitution apparaît entre guillemets doubles, le fractionnement des mots et l'expansion des noms de chemin ne sont pas effectués sur les résultats.

Développement arithmétique

L'expansion arithmétique permet l'évaluation d'une expression arithmétique et la substitution du résultat. Le format du développement arithmétique est le suivant :

$((expression))

L'expression est traitée comme si elle était entre guillemets, mais un guillemet entre parenthèses n'est pas traité spécialement. Tous les jetons de l'expression subissent un développement de paramètre et de variable, une substitution de commande et une suppression des guillemets. Le résultat est traité comme l'expression arithmétique à évaluer. Les développements arithmétiques peuvent être imbriqués.

L'évaluation est effectuée selon les règles énumérées ci-dessous sous ÉVALUATION ARITHMÉTIQUE. Si expression n'est pas valide, bash imprime un message indiquant l'échec et aucune substitution ne se produit.

Substitution de processus

La substitution de processus permet de faire référence à l'entrée ou à la sortie d'un processus à l'aide d'un nom de fichier. Il prend la forme de <(list ) ou >(list ). Le processus list est exécuté de manière asynchrone et son entrée ou sa sortie apparaît sous la forme d'un nom de fichier. Ce nom de fichier est passé en argument à la commande en cours à la suite de l'expansion. Si la forme >(list ) est utilisée, l'écriture dans le fichier fournira une entrée pour list. Si la forme <(list ) est utilisée, le fichier passé en argument doit être lu pour obtenir la sortie de list. La substitution de processus est prise en charge sur les systèmes qui prennent en charge les tubes nommés (FIFOs) ou la méthode /dev/fd pour nommer les fichiers ouverts.

Lorsqu'elle est disponible, la substitution de processus est effectuée simultanément avec le développement de paramètres et de variables, la substitution de commandes et le développement arithmétique.

Fractionnement de mots

Le shell analyse les résultats de l'expansion des paramètres, de la substitution de commandes et de l'expansion arithmétique qui ne se sont pas produits entre guillemets doubles pour la division des mots.

Le shell traite chaque caractère de IFS comme un délimiteur et divise les résultats des autres développements en mots en utilisant ces caractères comme terminateurs de champ. Si IFS n'est pas défini, ou si sa valeur est exactement <space><tab><newline>, la valeur par défaut, puis des séquences de <space> , <tab> et <newline> au début et à la fin des résultats des expansions précédentes sont ignorés, et toute séquence de IFS les caractères qui ne sont ni au début ni à la fin servent à délimiter les mots. Si IFS a une valeur autre que la valeur par défaut, alors les séquences d'espaces blancs espace, tabulation et nouvelle ligne sont ignorés au début et à la fin du mot, tant que le caractère d'espacement est dans la valeur de IFS (un caractère d'espacement IFS). Tout caractère dans IFS qui n'est pas un espace blanc IFS, ainsi que tout caractère d'espace blanc IFS adjacent, délimite un champ. Une séquence d'espaces blancs IFS est également traitée comme un délimiteur. Si la valeur de IFS est nulle, aucun découpage de mot ne se produit.

Les arguments nuls explicites ( " " ou  ' ' ) sont conservés et transmis aux commandes sous forme de chaînes vides. Les arguments nuls implicites sans guillemets, résultant de l'expansion des paramètres qui n'ont pas de valeurs, sont supprimés. Si un paramètre sans valeur est développé entre guillemets doubles, un argument null en résulte et est conservé et transmis à une commande sous la forme d'une chaîne vide. Lorsqu'un argument nul entre guillemets apparaît dans le cadre d'un mot dont le développement est non nul, l'argument nul est supprimé. C'est-à-dire que le mot -d' ' devient -d après la division du mot et la suppression de l'argument nul.

Notez que si aucune expansion ne se produit, aucun fractionnement n'est effectué.

Extension du nom de chemin

Après la séparation des mots, à moins que l'option -f ait été définie, bash analyse chaque mot à la recherche des caractères *, ? , et [. Si l'un de ces caractères apparaît, et n'est pas entre guillemets, alors le mot est considéré comme un modèle, et remplacé par une liste triée par ordre alphabétique de noms de fichiers correspondant au modèle (voir Pattern Matching ci-dessous). Si aucun nom de fichier correspondant n'est trouvé et que l'option shell nullglob n'est pas activée, le mot reste inchangé. Si l'option nullglob est définie et qu'aucune correspondance n'est trouvée, le mot est supprimé. Si l'option shell failglob est définie et qu'aucune correspondance n'est trouvée, un message d'erreur s'affiche et la commande n'est pas exécutée. Si l'option shell nocaseglob est activée, la correspondance est effectuée sans tenir compte de la casse des caractères alphabétiques. Lorsqu'un modèle est utilisé pour l'expansion du nom de chemin, le caractère ``.'' au début d'un nom ou immédiatement après une barre oblique doit être mis en correspondance explicitement, à moins que l'option shell dotglob est défini. Les noms de fichiers ``.'' et ``..'' doivent toujours correspondre explicitement, même si dotglob est défini. Dans d'autres cas, le caractère ``.'' n'est pas traité spécialement. Lors de la correspondance d'un chemin d'accès, la barre oblique doit toujours correspondre explicitement à une barre oblique dans le modèle, mais dans d'autres contextes de correspondance, elle peut être associée à un caractère de modèle spécial, comme décrit ci-dessous sous Correspondance de modèle. Voir la description de shopt ci-dessous sous COMMANDES INTÉGRÉES DU SHELL pour une description de nocaseglob, nullglob, options shell failglob et dotglob.

La variable shell GLOBIGNORE peut être utilisée pour restreindre l'ensemble des noms de fichiers correspondant à un motif. Si GLOBIGNORE est défini, chaque nom de fichier correspondant qui correspond également à l'un des modèles dans GLOBIGNORE est supprimé de la liste des correspondances. Si l'option nocaseglob est définie, la correspondance avec les modèles dans GLOBIGNORE est effectuée sans tenir compte de la casse. Les noms de fichiers . et .. sont toujours ignorés lorsque GLOBIGNORE est défini et non nul. Cependant, définir GLOBIGNORE sur une valeur non nulle a pour effet d'activer l'option shell dotglob, de sorte que tous les autres noms de fichiers commençant par un . seront correspondre. Pour obtenir l'ancien comportement consistant à ignorer les noms de fichiers commençant par ., faites de .* l'un des modèles dans GLOBIGNORE. L'option dotglob est désactivée lorsque

GLOBIGNORE n'est pas défini. La correspondance de modèle respecte le paramètre de l'option shell extglob.

Correspondance de modèle

Tout caractère qui apparaît dans un modèle, autre que les caractères de modèle spéciaux décrits ci-dessous, correspond à lui-même. Le caractère NUL ne peut pas apparaître dans un modèle. Une barre oblique inverse échappe au caractère suivant ; la barre oblique inverse qui s'échappe est ignorée lors de la correspondance. Les caractères de modèle spéciaux doivent être entre guillemets s'ils doivent être mis en correspondance littéralement.

Les caractères de modèle spéciaux ont les significations suivantes :

*

Correspond à n'importe quelle chaîne, y compris la chaîne nulle. Lorsque l'option de shell globstar est activée et que * est utilisé dans un contexte d'expansion de nom de chemin, deux * adjacents utilisés comme un seul modèle correspondront tous les fichiers et zéro ou plusieurs répertoires et sous-répertoires. S'ils sont suivis d'un /, deux * adjacents correspondront uniquement aux répertoires et sous-répertoires.

?

Correspond à n'importe quel caractère unique.

[...]

Correspond à l'un des caractères inclus. Une paire de caractères séparés par un tiret indique une expression de plage ; tout caractère compris entre ces deux caractères, inclus, en utilisant la séquence de classement et le jeu de caractères des paramètres régionaux actuels, est mis en correspondance. Si le premier caractère suivant le [ est un ! ou un ^ alors tout caractère non encadré est reconnu. L'ordre de tri des caractères dans les expressions de plage est déterminé par les paramètres régionaux actuels et les valeurs des variables shell LC_COLLATE ou LC_ALL, si elles sont définies. Pour obtenir l'interprétation traditionnelle des expressions de plage, où [a-d] est équivalent à [abcd], définissez la valeur de la variable shell LC_ALL sur C, ou activez l'option de shell globasciiranges. Un - peut être mis en correspondance en l'incluant comme premier ou dernier caractère de l'ensemble. Un ] peut être mis en correspondance en l'incluant comme premier caractère de l'ensemble.

Dans [ et ], les classes de caractères peuvent être spécifiées à l'aide de la syntaxe [:class  :], où classe est l'une des classes suivantes définies dans la norme POSIX :

alnum alpha ascii blank cntrl digit graph lower print punct space upper word xdigit

Une classe de caractères correspond à n'importe quel caractère appartenant à cette classe. La classe de caractères word correspond aux lettres, aux chiffres et au caractère _.

Dans [ et ], une classe d'équivalence peut être spécifiée en utilisant la syntaxe [=c=], qui correspond à tous les caractères avec le même poids de classement (tel que défini par les paramètres régionaux actuels) que le caractère c.

Entre [ et ], la syntaxe [.symbole.] correspond au classement symbole symbole.

Si l'option de shell extglob est activée à l'aide de la commande intégrée shopt, plusieurs opérateurs de correspondance de modèles étendus sont reconnus. Dans la description suivante, une pattern-list est une liste d'un ou plusieurs motifs séparés par un |. Les modèles composites peuvent être formés en utilisant un ou plusieurs des sous-modèles suivants :

?( pattern-list )

Correspond à zéro ou une occurrence des modèles donnés

*( pattern-list )

Correspond à zéro ou plusieurs occurrences des modèles donnés

+( pattern-list )

Correspond à une ou plusieurs occurrences des modèles donnés

@( pattern-list )

Correspond à l'un des modèles donnés

!( pattern-list )

Correspond à tout sauf à l'un des modèles donnés

La correspondance de modèle étendue compliquée avec des chaînes longues est lente, en particulier lorsque les modèles contiennent des alternances et que les chaînes contiennent plusieurs correspondances. L'utilisation de correspondances séparées avec des chaînes plus courtes ou l'utilisation de tableaux de chaînes au lieu d'une seule longue chaîne peut être plus rapide.

Suppression de devis

Après les développements précédents, toutes les occurrences sans guillemets des caractères \, ' et  "  qui ne résultent pas de l'un des développements ci-dessus sont supprimées.

REDIRECTION

Avant qu'une commande ne soit exécutée, son entrée et sa sortie peuvent être redirigées en utilisant une notation spéciale interprétée par le shell. La redirection permet aux descripteurs de fichiers des commandes d'être dupliqués, ouverts, fermés, de faire référence à différents fichiers et peut modifier les fichiers à partir desquels la commande lit et écrit. La redirection peut également être utilisée pour modifier les descripteurs de fichiers dans l'environnement d'exécution du shell actuel. Les opérateurs de redirection suivants peuvent précéder ou apparaître n'importe où dans une commande simple ou peuvent suivre une commande. Les redirections sont traitées dans l'ordre où elles apparaissent, de gauche à droite.

Chaque redirection qui peut être précédée d'un numéro de descripteur de fichier peut à la place être précédée d'un mot de la forme {varname}. Dans ce cas, pour chaque opérateur de redirection sauf >&- et <&-, le shell allouera un descripteur de fichier supérieur ou égal à 10 et l'affectera à varname. Si >&- ou <&- est précédé de {varname}, la valeur de varname définit le descripteur de fichier à fermer. Si {varname} est fourni, la redirection persiste au-delà de la portée de la commande, permettant au programmeur shell de gérer lui-même le descripteur de fichier.

Dans les descriptions suivantes, si le numéro de descripteur de fichier est omis et que le premier caractère de l'opérateur de redirection est <, la redirection fait référence à l'entrée standard (descripteur de fichier 0). Si le premier caractère de l'opérateur de redirection est >, la redirection fait référence à la sortie standard (descripteur de fichier 1).

Le mot suivant l'opérateur de redirection dans les descriptions suivantes, sauf indication contraire, est soumis à l'expansion des accolades, à l'expansion du tilde, à l'expansion des paramètres et des variables, à la substitution de commande, à l'expansion arithmétique, à la suppression des guillemets, à l'expansion du nom de chemin et à la division des mots. S'il se développe en plusieurs mots, bash signale une erreur.

Notez que l'ordre des redirections est important. Par exemple, la commande

ls > dirlist 2>&1

dirige à la fois la sortie standard et l'erreur standard vers le fichier dirlist, tandis que la commande

ls 2>&1 > dirlist

dirige uniquement la sortie standard vers le fichier dirlist, car l'erreur standard a été dupliquée à partir de la sortie standard avant que la sortie standard ne soit redirigée vers dirlist.

Bash gère plusieurs noms de fichiers spécialement lorsqu'ils sont utilisés dans les redirections, comme décrit dans le tableau suivant. Si le système d'exploitation sur lequel bash s'exécute fournit ces fichiers spéciaux, bash les utilisera ; sinon, il les émulera en interne avec le comportement décrit ci-dessous.

/dev/fd/fd

Si fd est un entier valide, le descripteur de fichier fd est dupliqué.

/dev/stdin

Le descripteur de fichier 0 est dupliqué.

/dev/stdout

Le descripteur de fichier 1 est dupliqué.

/dev/stderr

Le descripteur de fichier 2 est dupliqué.

/dev/tcp/host/port

Si hôte est un nom d'hôte ou une adresse Internet valide, et port est un numéro de port entier ou un nom de service, bash tente d'ouvrir le socket TCP correspondant .

/dev/udp/host/port

Si hôte est un nom d'hôte ou une adresse Internet valide, et port est un numéro de port entier ou un nom de service, bash tente d'ouvrir le socket UDP correspondant .

Un échec d'ouverture ou de création d'un fichier entraîne l'échec de la redirection.

Les redirections utilisant des descripteurs de fichiers supérieurs à 9 doivent être utilisées avec précaution, car elles peuvent entrer en conflit avec les descripteurs de fichiers que le shell utilise en interne.

Redirection de l'entrée

La redirection de l'entrée provoque l'ouverture en lecture du fichier dont le nom résulte du développement de mot sur le descripteur de fichier n, ou l'entrée standard (descripteur de fichier 0) si n n'est pas spécifié.

Le format général pour rediriger l'entrée est :

[n]<word

Rediriger la sortie

La redirection de sortie provoque l'ouverture en écriture du fichier dont le nom résulte du développement de mot sur le descripteur de fichier n, ou la sortie standard (descripteur de fichier 1) si n n'est pas spécifié. Si le fichier n'existe pas, il est créé ; s'il existe, il est tronqué à zéro.

Le format général pour rediriger la sortie est :

[n]>word

Si l'opérateur de redirection est > et que l'option noclobber de la commande intégrée set a été activée, la redirection échouera si le fichier dont le nom résulte de l'expansion de mot existe et est un fichier régulier. Si l'opérateur de redirection est >|, ou si l'opérateur de redirection est > et l'option noclobber à la fonction intégrée set n'est pas activée, la redirection est tentée même si le fichier nommé par mot existe.

Ajout de la sortie redirigée

La redirection de la sortie de cette manière entraîne l'ouverture du fichier dont le nom résulte de l'expansion de mot pour être ajouté au descripteur de fichier n, ou à la sortie standard (descripteur de fichier 1) si n n'est pas spécifié. Si le fichier n'existe pas, il est créé.

Le format général d'ajout de sortie est le suivant :

[n]>>word

Redirection de la sortie standard et de l'erreur standard

Cette construction permet à la fois à la sortie standard (descripteur de fichier 1) et à la sortie d'erreur standard (descripteur de fichier 2) d'être redirigées vers le fichier dont le nom est le développement de mot.

Il existe deux formats pour rediriger la sortie standard et l'erreur standard :

&>word

et

>&word

Des deux formes, la première est préférée. Ceci est sémantiquement équivalent à

>word 2>&1

Lors de l'utilisation de la deuxième forme, mot peut ne pas se développer en un nombre ou en -. Si c'est le cas, d'autres opérateurs de redirection s'appliquent (voir Duplication des descripteurs de fichiers ci-dessous) pour des raisons de compatibilité.

Ajout de la sortie standard et de l'erreur standard

Cette construction permet à la fois la sortie standard (descripteur de fichier 1) et la sortie d'erreur standard (descripteur de fichier 2) d'être ajoutées au fichier dont le nom est l'expansion de mot.

Le format d'ajout de la sortie standard et de l'erreur standard est :

&>>word

Ceci est sémantiquement équivalent à

>>word 2>&1

(voir Dupliquer les descripteurs de fichiers ci-dessous).

Ici Documents

Ce type de redirection demande au shell de lire l'entrée de la source actuelle jusqu'à ce qu'une ligne contenant uniquement un délimiteur (sans espaces à la fin) soit vue. Toutes les lignes lues jusqu'à ce point sont alors utilisées comme entrée standard (ou descripteur de fichier n si n est spécifié) pour une commande.

Le format des documents ici est :

[n]<<[-]word
        here-document
delimiter

Aucun développement de paramètre et de variable, de substitution de commande, de développement arithmétique ou de nom de chemin n'est effectué sur word. Si une partie de mot est citée, le délimiteur est le résultat de la suppression des guillemets sur mot, et les lignes du document ici ne sont pas étendu. Si mot n'est pas entre guillemets, toutes les lignes du document ici sont soumises à l'expansion des paramètres, à la substitution de commande et à l'expansion arithmétique, la séquence de caractères \<newline> est ignorée et \ doit être utilisé pour citer les caractères \, $ et `.

Si l'opérateur de redirection est <<-, tous les caractères de tabulation en tête sont supprimés des lignes d'entrée et de la ligne contenant le délimiteur. Cela permet aux documents ici dans les scripts shell d'être indentés de manière naturelle.

Ici Cordes

Une variante d'ici les documents, le format est :

[n]<<<word

Le mot subit un développement de tilde, un développement de paramètres et de variables, une substitution de commande, un développement arithmétique et une suppression des guillemets. L'expansion du nom de chemin et la division des mots ne sont pas effectuées. Le résultat est fourni sous la forme d'une chaîne unique, avec une nouvelle ligne ajoutée, à la commande sur son entrée standard (ou le descripteur de fichier n si n est spécifié).

Duplication des descripteurs de fichiers

L'opérateur de redirection

[n]<&word

est utilisé pour dupliquer les descripteurs de fichiers d'entrée. Si mot se développe à un ou plusieurs chiffres, le descripteur de fichier désigné par n est fait pour être une copie de ce descripteur de fichier. Si les chiffres dans mot ne spécifient pas un descripteur de fichier ouvert pour la saisie, une erreur de redirection se produit. Si mot vaut -, le descripteur de fichier n est fermé. Si n n'est pas spécifié, l'entrée standard (descripteur de fichier 0) est utilisée.

L'opérateur

[n]>&word

est utilisé de la même manière pour dupliquer les descripteurs de fichiers de sortie. Si n n'est pas spécifié, la sortie standard (descripteur de fichier 1) est utilisée. Si les chiffres dans mot ne spécifient pas un descripteur de fichier ouvert pour la sortie, une erreur de redirection se produit. Si mot vaut -, le descripteur de fichier n est fermé. Comme cas particulier, si n est omis et que mot ne se développe pas en un ou plusieurs chiffres ou -, la sortie standard et l'erreur standard sont redirigés comme décrit précédemment.

Déplacement des descripteurs de fichiers

L'opérateur de redirection

[n]<&digit-

déplace le descripteur de fichier chiffre vers le descripteur de fichier n, ou l'entrée standard (descripteur de fichier 0) si n n'est pas spécifié. chiffre est fermé après avoir été dupliqué en n.

De même, l'opérateur de redirection

[n]>&digit-

déplace le descripteur de fichier chiffre vers le descripteur de fichier n, ou la sortie standard (descripteur de fichier 1) si n n'est pas spécifié.

Ouverture des descripteurs de fichiers pour la lecture et l'écriture

L'opérateur de redirection

[n]<>word

provoque l'ouverture en lecture et en écriture du fichier dont le nom est le développement de mot sur le descripteur de fichier n, ou sur le descripteur de fichier 0 si n n'est pas spécifié. Si le fichier n'existe pas, il est créé.

Alias

Les alias permettent de substituer une chaîne à un mot lorsqu'il est utilisé comme premier mot d'une commande simple. Le shell maintient une liste d'alias qui peuvent être activés et désactivés avec les commandes intégrées alias et unalias (voir COMMANDES INTÉGRÉES DU SHELL ci-dessous). Le premier mot de chaque commande simple, s'il n'est pas entre guillemets, est vérifié pour voir s'il a un alias. Si tel est le cas, ce mot est remplacé par le texte de l'alias. Les caractères /, $, ` et = et tous les métacaractères du shell ou les caractères entre guillemets répertoriés ci-dessus peuvent ne pas apparaître dans un nom d'alias. Le texte de remplacement peut contenir n'importe quelle entrée de shell valide, y compris des métacaractères de shell. Le premier mot du texte de remplacement est testé pour les alias, mais un mot identique à un alias en cours de développement n'est pas développé une deuxième fois. Cela signifie que l'on peut alias ls à ls -F, par exemple, et bash n'essaie pas de développer de manière récursive le texte de remplacement. Si le dernier caractère de la valeur de l'alias est un espace, le mot de commande suivant l'alias est également vérifié pour l'expansion de l'alias.

Les alias sont créés et répertoriés avec la commande alias, et supprimés avec la commande unalias.

Il n'existe aucun mécanisme permettant d'utiliser des arguments dans le texte de remplacement. Si des arguments sont nécessaires, une fonction shell doit être utilisée (voir FONCTIONS ci-dessous).

Les alias ne sont pas développés lorsque le shell n'est pas interactif, sauf si l'option de shell expand_aliases est définie à l'aide de shopt (voir la description de shopt sous COMMANDES INTÉGRÉES DU SHELL ci-dessous).

Les règles concernant la définition et l'utilisation des alias sont quelque peu déroutantes. Bash lit toujours au moins une ligne complète d'entrée, et toutes les lignes qui composent une commande composée, avant d'exécuter l'une des commandes sur cette ligne ou la commande composée. Les alias sont développés lorsqu'une commande est lue, pas lorsqu'elle est exécutée. Par conséquent, une définition d'alias apparaissant sur la même ligne qu'une autre commande ne prend pas effet tant que la ligne d'entrée suivante n'est pas lue. Les commandes qui suivent la définition d'alias sur cette ligne ne sont pas affectées par le nouvel alias. Ce comportement est également un problème lorsque les fonctions sont exécutées. Les alias sont développés lorsqu'une définition de fonction est lue, et non lorsque la fonction est exécutée, car une définition de fonction est elle-même une commande. Par conséquent, les alias définis dans une fonction ne sont disponibles qu'après l'exécution de cette fonction. Pour plus de sécurité, placez toujours les définitions d'alias sur une ligne distincte et n'utilisez pas alias dans les commandes composées.

Dans presque tous les cas, les alias sont remplacés par des fonctions shell.

LES FONCTIONS

Une fonction shell, définie comme décrit ci-dessus sous SHELL GRAMMAIRE, stocke une série de commandes pour une exécution ultérieure. Lorsque le nom d'une fonction shell est utilisé comme simple nom de commande, la liste des commandes associées à ce nom de fonction est exécutée. Les fonctions sont exécutées dans le contexte du shell courant ; aucun nouveau processus n'est créé pour les interpréter (à comparer avec l'exécution d'un script shell). Lorsqu'une fonction est exécutée, les arguments de la fonction deviennent les paramètres positionnels lors de son exécution. Le paramètre spécial # est mis à jour pour refléter le changement. Le paramètre spécial 0 est inchangé. Le premier élément de la variable FUNCNAME est défini sur le nom de la fonction pendant l'exécution de la fonction.

Tous les autres aspects de l'environnement d'exécution du shell sont identiques entre une fonction et son appelant à ces exceptions près : les trappes DEBUG et RETURN (voir la description de la trap< intégré sous COMMANDES INTÉGRÉES DU SHELL ci-dessous) ne sont pas hérités à moins que la fonction n'ait reçu l'attribut trace (voir la description de l'attribut declare intégré ci-dessous) ou l'option shell -o functrace a été activée avec l'élément intégré set (auquel cas toutes les fonctions héritent de DEBUG et RETURN traps), et le trap ERR n'est pas hérité à moins que l'option shell -o errtrace ait été activée.

Les variables locales à la fonction peuvent être déclarées avec la commande intégrée local. Habituellement, les variables et leurs valeurs sont partagées entre la fonction et son appelant. Si une variable est déclarée local, la portée visible de la variable est limitée à cette fonction et à ses enfants (y compris les fonctions qu'elle appelle). Les variables locales "masquent" les variables du même nom déclarées dans les portées précédentes. Par exemple, une variable locale déclarée dans une fonction cache une variable globale du même nom : les références et les affectations font référence à la variable locale, laissant la variable globale inchangée. Lorsque la fonction revient, la variable globale est à nouveau visible.

Le shell utilise la portée dynamique pour contrôler la visibilité d'une variable dans les fonctions. Avec la portée dynamique, les variables visibles et leurs valeurs sont le résultat de la séquence d'appels de fonction qui a amené l'exécution à atteindre la fonction actuelle. La valeur d'une variable qu'une fonction voit dépend de sa valeur dans son appelant, le cas échéant, que cet appelant soit la portée "globale" ou une autre fonction shell. Il s'agit également de la valeur qu'une déclaration de variable locale "masque" et de la valeur qui est restaurée lorsque la fonction revient.

Par exemple, si une variable var est déclarée comme locale dans la fonction func1, et que func1 appelle une autre fonction func2, les références à var faites à partir de func2 résoudront la variable locale var à partir de func1, masquant toute variable globale nommée var.

La fonction intégrée unset agit également en utilisant la même portée dynamique : si une variable est locale à la portée actuelle, unset l'annulera ; sinon, l'unset fera référence à la variable trouvée dans n'importe quelle portée d'appel comme décrit ci-dessus. Si une variable dans la portée locale actuelle n'est pas définie, elle le restera jusqu'à ce qu'elle soit réinitialisée dans cette portée ou jusqu'au retour de la fonction. Une fois la fonction retournée, toute instance de la variable à une portée précédente deviendra visible. Si l'unset agit sur une variable à une portée précédente, toute instance d'une variable portant ce nom qui avait été occultée deviendra visible.

La variable FUNCNEST, si elle est définie sur une valeur numérique supérieure à 0, définit un niveau maximal d'imbrication de fonctions. Les appels de fonction qui dépassent la limite entraînent l'abandon de toute la commande.

Si la commande intégrée return est exécutée dans une fonction, la fonction se termine et l'exécution reprend avec la commande suivante après l'appel de la fonction. Toute commande associée à l'interruption RETURN est exécutée avant la reprise de l'exécution. Lorsqu'une fonction se termine, les valeurs des paramètres de position et du paramètre spécial # sont restaurées aux valeurs qu'elles avaient avant l'exécution de la fonction.

Les noms et les définitions des fonctions peuvent être répertoriés avec l'option -f des commandes intégrées declare ou typeset. L'option -F pour déclarer ou composer listera uniquement les noms de fonction (et éventuellement le fichier source et le numéro de ligne, si le l'option shell extdebug est activée). Les fonctions peuvent être exportées afin que les sous-shells les définissent automatiquement avec l'option -f de la fonction intégrée export. Une définition de fonction peut être supprimée en utilisant l'option -f de la commande intégrée unset.

Les fonctions peuvent être récursives. La variable FUNCNEST peut être utilisée pour limiter la profondeur de la pile d'appels de fonction et restreindre le nombre d'invocations de fonction. Par défaut, aucune limite n'est imposée sur le nombre d'appels récursifs.

ÉVALUATION ARITHMÉTIQUE

Le shell permet d'évaluer des expressions arithmétiques, dans certaines circonstances (voir les commandes intégrées let et declare, la commande composée (( et Développement arithmétique). L'évaluation est effectuée en nombres entiers à largeur fixe sans contrôle de dépassement, bien que la division par 0 soit bloquée et signalée comme une erreur. Les opérateurs et leur priorité, leur associativité et leurs valeurs sont les mêmes que en langage C. La liste d'opérateurs suivante est regroupée en niveaux d'opérateurs de priorité égale. Les niveaux sont répertoriés par ordre de priorité décroissante.

id++ id--

variable post-incrémentation et post-décrémentation

- +

moins et plus unaire

++id --id

pré-incrémentation et pré-décrémentation variables

! ~

négation logique et au niveau du bit

**

exponentiation

* / %

multiplication, division, reste

+ -

addition soustraction

<< >>

décalages binaires à gauche et à droite

<= >= < >

comparaison

== !=

égalité et inégalité

&

ET au niveau du bit

^

OU exclusif au niveau du bit

|

OU au niveau du bit

&&

ET logique

||

OU logique

expr?expr:expr

opérateur conditionnel

= *= /= %= += -= <<= >>= &= ^= |=

mission

expr1 , expr2

virgule

Les variables shell sont autorisées comme opérandes ; l'expansion des paramètres est effectuée avant l'évaluation de l'expression. Dans une expression, les variables shell peuvent également être référencées par leur nom sans utiliser la syntaxe d'expansion des paramètres. Une variable shell nulle ou non définie est évaluée à 0 lorsqu'elle est référencée par son nom sans utiliser la syntaxe d'expansion des paramètres. La valeur d'une variable est évaluée comme une expression arithmétique lorsqu'elle est référencée, ou lorsqu'une variable à laquelle a été attribué l'attribut entier à l'aide de declare -i se voit attribuer une valeur. Une valeur nulle est évaluée à 0. Une variable shell n'a pas besoin d'avoir son attribut entier activé pour être utilisée dans une expression.

Les constantes entières suivent la définition du langage C, sans suffixes ni constantes de caractères. Les constantes précédées de 0 sont interprétées comme des nombres octaux. Un 0x ou 0X en tête indique une valeur hexadécimale. Sinon, les nombres prennent la forme [base#]n, où la base facultative est un nombre décimal entre 2 et 64 représentant la base arithmétique, et n est un nombre dans cette base. Si base# est omis, alors la base 10 est utilisée. Lorsque vous spécifiez n, si un non-chiffre est requis, les chiffres supérieurs à 9 sont représentés par les lettres minuscules, les lettres majuscules, @ et _, dans cet ordre. Si base est inférieur ou égal à 36, les lettres minuscules et majuscules peuvent être utilisées indifféremment pour représenter les nombres entre 10 et 35.

Les opérateurs sont évalués par ordre de priorité. Les sous-expressions entre parenthèses sont évaluées en premier et peuvent remplacer les règles de priorité ci-dessus.

EXPRESSIONS CONDITIONNELLES

Les expressions conditionnelles sont utilisées par la commande composée [[ et les commandes intégrées test et [ pour tester les attributs de fichier et effectuer des comparaisons de chaînes et arithmétiques. Les commandes test et [ déterminent leur comportement en fonction du nombre d'arguments ; voir les descriptions de ces commandes pour toute autre action spécifique à la commande.

Les expressions sont formées à partir des primaires unaires ou binaires suivantes. Bash gère plusieurs noms de fichiers spécialement lorsqu'ils sont utilisés dans des expressions. Si le système d'exploitation sur lequel bash s'exécute fournit ces fichiers spéciaux, bash les utilisera ; sinon, il les émulera en interne avec ce comportement : Si un argument fichier à l'un des primaires est de la forme /dev/fd/n, alors le descripteur de fichier n est coché. Si l'argument file à l'un des primaires est l'un de /dev/stdin, /dev/stdout ou /dev/ stderr, le descripteur de fichier 0, 1 ou 2, respectivement, est vérifié.

Sauf indication contraire, les primaires qui opèrent sur les fichiers suivent les liens symboliques et opèrent sur la cible du lien, plutôt que sur le lien lui-même.

Lorsqu'ils sont utilisés avec [[, les opérateurs < et > effectuent un tri lexicographique en utilisant les paramètres régionaux actuels. La commande test trie en utilisant l'ordre ASCII.

-a file

Vrai si fichier existe.

-b file

Vrai si fichier existe et est un fichier spécial de bloc.

-c file

Vrai si fichier existe et est un fichier spécial de caractères.

-d file

Vrai si fichier existe et est un répertoire.

-e file

Vrai si fichier existe.

-f file

Vrai si fichier existe et est un fichier normal.

-g file

Vrai si fichier existe et est set-group-id.

-h file

Vrai si fichier existe et est un lien symbolique.

-k file

Vrai si fichier existe et son bit ``sticky'' est activé.

-p file

Vrai si fichier existe et est un tube nommé (FIFO).

-r file

Vrai si fichier existe et est lisible.

-s file

Vrai si fichier existe et a une taille supérieure à zéro.

-t fd

Vrai si le descripteur de fichier fd est ouvert et fait référence à un terminal.

-u file

Vrai si fichier existe et que son bit set-user-id est défini.

-w file

Vrai si fichier existe et est accessible en écriture.

-x file

Vrai si fichier existe et est exécutable.

-G file

Vrai si le fichier existe et appartient à l'ID de groupe effectif.

-L file

Vrai si fichier existe et est un lien symbolique.

-N file

Vrai si fichier existe et a été modifié depuis sa dernière lecture.

-O file

Vrai si le fichier existe et appartient à l'ID utilisateur effectif.

-S file

Vrai si fichier existe et est un socket.

file1 -ef file2

Vrai si fichier1 et fichier2 font référence aux mêmes numéros de périphérique et d'inode.

file1 -nt file2

Vrai si fichier1 est plus récent (selon la date de modification) que fichier2, ou si fichier1 existe et que fichier2 n'existe pas .

file1 -ot file2

Vrai si fichier1 est plus ancien que fichier2, ou si fichier2 existe et que fichier1 n'existe pas.

-o optname

Vrai si l'option shell optname est activée. Voir la liste des options sous la description de l'option -o de la commande intégrée set ci-dessous.

-v varname

Vrai si la variable shell varname est définie (a reçu une valeur).

-R varname

Vrai si la variable shell varname est définie et est une référence de nom.

-z string

Vrai si la longueur de chaîne est zéro.

string
-n string

Vrai si la longueur de chaîne est différente de zéro.

string1 == string2
string1 = string2

Vrai si les chaînes sont égales. = doit être utilisé avec la commande test pour la conformité POSIX. Lorsqu'elle est utilisée avec la commande [[, elle effectue une correspondance de modèle comme décrit ci-dessus (Commandes composées).

string1 != string2

Vrai si les chaînes ne sont pas égales.

string1 < string2

Vrai si chaîne1 trie avant chaîne2 lexicographiquement.

string1 > string2

Vrai si string1 trie après string2 lexicographiquement.

arg1 OP arg2

OP est l'un des éléments suivants : -eq, -ne, -lt, -le , -gt ou -ge. Ces opérateurs binaires arithmétiques renvoient vrai si arg1 est égal à, non égal à, inférieur à, inférieur ou égal à, supérieur à, ou supérieur ou égal à arg2, respectivement. Arg1 et arg2 peuvent être des entiers positifs ou négatifs. Lorsqu'ils sont utilisés avec la commande [[, Arg1 et Arg2 sont évalués comme des expressions arithmétiques (voir ÉVALUATION ARITHMÉTIQUE ci-dessus) .

EXTENSION DE COMMANDE SIMPLE

Lorsqu'une commande simple est exécutée, le shell effectue les développements, les affectations et les redirections suivants, de gauche à droite, dans l'ordre suivant.

  1. Les mots que l'analyseur a marqués comme affectations de variables (ceux qui précèdent le nom de la commande) et les redirections sont enregistrés pour un traitement ultérieur.

  2. Les mots qui ne sont pas des affectations de variables ou des redirections sont développés. S'il reste des mots après l'expansion, le premier mot est considéré comme le nom de la commande et les mots restants sont les arguments.

  3. Les redirections sont effectuées comme décrit ci-dessus sous REDIRECTION.

  1. Le texte après le = dans chaque affectation de variable subit un développement de tilde, un développement de paramètre, une substitution de commande, un développement arithmétique et une suppression des guillemets avant d'être affecté à la variable.

Si aucun nom de commande n'est obtenu, les affectations de variables affectent l'environnement shell actuel. Sinon, les variables sont ajoutées à l'environnement de la commande exécutée et n'affectent pas l'environnement shell actuel. Si l'une des affectations tente d'affecter une valeur à une variable en lecture seule, une erreur se produit et la commande se termine avec un état différent de zéro.

Si aucun nom de commande ne résulte, les redirections sont effectuées, mais n'affectent pas l'environnement shell actuel. Une erreur de redirection entraîne la sortie de la commande avec un état différent de zéro.

S'il reste un nom de commande après l'expansion, l'exécution se poursuit comme décrit ci-dessous. Sinon, la commande se termine. Si l'une des extensions contenait une substitution de commande, l'état de sortie de la commande est l'état de sortie de la dernière substitution de commande effectuée. S'il n'y a pas eu de substitutions de commande, la commande se termine avec un état de zéro.

EXÉCUTION DE LA COMMANDE

Une fois qu'une commande a été divisée en mots, si elle se traduit par une commande simple et une liste facultative d'arguments, les actions suivantes sont effectuées.

Si le nom de la commande ne contient pas de barres obliques, le shell tente de le localiser. S'il existe une fonction shell portant ce nom, cette fonction est invoquée comme décrit ci-dessus dans FUNCTIONS. Si le nom ne correspond pas à une fonction, le shell le recherche dans la liste des commandes intégrées du shell. Si une correspondance est trouvée, cette fonction intégrée est invoquée.

Si le nom n'est ni une fonction shell ni une fonction intégrée, et ne contient pas de barres obliques, bash recherche dans chaque élément du PATH un répertoire contenant un fichier exécutable portant ce nom. Bash utilise une table de hachage pour mémoriser les chemins d'accès complets des fichiers exécutables (voir hachage sous COMMANDES INTÉGRÉES DU SHELL ci-dessous). Une recherche complète des répertoires dans PATH est effectuée uniquement si la commande n'est pas trouvée dans la table de hachage. Si la recherche échoue, le shell recherche une fonction shell définie nommée command_not_found_handle. Si cette fonction existe, elle est invoquée dans un environnement d'exécution séparé avec la commande d'origine et les arguments de la commande d'origine comme arguments, et l'état de sortie de la fonction devient l'état de sortie de ce sous-shell. Si cette fonction n'est pas définie, le shell affiche un message d'erreur et renvoie un état de sortie de 127.

Si la recherche réussit, ou si le nom de la commande contient une ou plusieurs barres obliques, le shell exécute le programme nommé dans un environnement d'exécution séparé. L'argument 0 est défini sur le nom donné et les arguments restants de la commande sont définis sur les arguments donnés, le cas échéant.

Si cette exécution échoue parce que le fichier n'est pas au format exécutable et que le fichier n'est pas un répertoire, il est supposé être un script shell, un fichier contenant des commandes shell. Un sous-shell est généré pour l'exécuter. Ce sous-shell se réinitialise, de sorte que l'effet est comme si un nouveau shell avait été appelé pour gérer le script, à l'exception que les emplacements des commandes mémorisés par le parent (voir hachage ci-dessous sous SHELL BUILTIN COMMANDS) sont conservés par l'enfant.

Si le programme est un fichier commençant par #!, le reste de la première ligne spécifie un interpréteur pour le programme. Le shell exécute l'interpréteur spécifié sur les systèmes d'exploitation qui ne gèrent pas eux-mêmes ce format exécutable. Les arguments de l'interpréteur consistent en un seul argument facultatif suivant le nom de l'interpréteur sur la première ligne du programme, suivi du nom du programme, suivi des arguments de la commande, le cas échéant.

ENVIRONNEMENT D'EXÉCUTION DES COMMANDES

Le shell dispose d'un environnement d'exécution, composé des éléments suivants :

  • ouvrir les fichiers hérités par le shell à l'invocation, tels que modifiés par les redirections fournies à la commande intégrée exec

  • le répertoire de travail actuel défini par cd, pushd ou popd, ou hérité par le shell lors de l'invocation

  • le masque de mode de création de fichier défini par umask ou hérité du parent du shell

  • les pièges actuels définis par trap

  • paramètres du shell qui sont définis par affectation de variable ou avec set ou hérités du parent du shell dans l'environnement

  • fonctions shell définies lors de l'exécution ou héritées du parent du shell dans l'environnement

  • options activées à l'invocation (soit par défaut, soit avec des arguments de ligne de commande) ou par set

  • options activées par shopt

  • alias shell définis avec alias

  • divers ID de processus, y compris ceux des tâches d'arrière-plan, la valeur de $$ et la valeur de PPID. Lorsqu'une commande simple autre qu'une fonction intégrée ou shell doit être exécutée, elle est invoquée dans un environnement d'exécution séparé qui se compose des éléments suivants. Sauf indication contraire, les valeurs sont héritées du shell.

  • les fichiers ouverts du shell, ainsi que toutes les modifications et ajouts spécifiés par les redirections vers la commande

  • le répertoire de travail courant

  • le masque du mode de création de fichier

  • variables shell et fonctions marquées pour l'exportation, ainsi que les variables exportées pour la commande, passées dans l'environnement

  • les pièges capturés par le shell sont réinitialisés aux valeurs héritées du parent du shell, et les pièges ignorés par le shell sont ignorés

Une commande invoquée dans cet environnement séparé ne peut pas affecter l'environnement d'exécution du shell.

La substitution de commandes, les commandes regroupées avec des parenthèses et les commandes asynchrones sont appelées dans un environnement de sous-shell qui est un doublon de l'environnement shell, sauf que les interruptions interceptées par le shell sont réinitialisées aux valeurs que le shell a héritées de son parent lors de l'invocation. Les commandes intégrées appelées dans le cadre d'un pipeline sont également exécutées dans un environnement de sous-shell. Les modifications apportées à l'environnement du sous-shell ne peuvent pas affecter l'environnement d'exécution du shell.

Les sous-shell générés pour exécuter des substitutions de commandes héritent de la valeur de l'option -e du shell parent. Lorsqu'il n'est pas en mode posix, bash efface l'option -e dans ces sous-shells.

Si une commande est suivie d'un & et que le contrôle des tâches n'est pas actif, l'entrée standard par défaut pour la commande est le fichier vide /dev/null. Sinon, la commande invoquée hérite des descripteurs de fichier du shell appelant tels que modifiés par les redirections.

ENVIRONNEMENT

Lorsqu'un programme est appelé, il reçoit un tableau de chaînes appelé environnement. Il s'agit d'une liste de paires nom-valeur, de la forme nom=valeur.

Le shell fournit plusieurs façons de manipuler l'environnement. Lors de l'invocation, le shell analyse son propre environnement et crée un paramètre pour chaque nom trouvé, le marquant automatiquement pour exporter vers les processus enfants. Les commandes exécutées héritent de l'environnement. Les commandes export et declare -x permettent d'ajouter et de supprimer des paramètres et des fonctions dans l'environnement. Si la valeur d'un paramètre dans l'environnement est modifiée, la nouvelle valeur fait partie de l'environnement et remplace l'ancienne. L'environnement hérité par toute commande exécutée est constitué de l'environnement initial du shell, dont les valeurs peuvent être modifiées dans le shell, moins les paires supprimées par la commande unset, plus les ajouts via la commande export et déclarez les commandes -x.

L'environnement de toute commande simple ou fonction peut être augmenté temporairement en le préfixant avec des affectations de paramètres, comme décrit ci-dessus dans PARAMETRES. Ces instructions d'affectation n'affectent que l'environnement vu par cette commande.

Si l'option -k est définie (voir la commande intégrée set ci-dessous), alors toutes les affectations de paramètres sont placées dans l'environnement pour une commande, pas seulement ceux qui précèdent le nom de la commande.

Lorsque bash invoque une commande externe, la variable _ est définie sur le nom de fichier complet de la commande et transmise à cette commande dans son environnement.

ETAT DE SORTIE

L'état de sortie d'une commande exécutée est la valeur renvoyée par l'appel système waitpid ou une fonction équivalente. Les statuts de sortie se situent entre 0 et 255, bien que, comme expliqué ci-dessous, le shell puisse utiliser des valeurs supérieures à 125 spécialement. Les états de sortie des commandes intégrées du shell et des commandes composées sont également limités à cette plage. Dans certaines circonstances, le shell utilisera des valeurs spéciales pour indiquer des modes de défaillance spécifiques.

Pour les besoins du shell, une commande qui se termine avec un état de sortie nul a réussi. Un état de sortie de zéro indique un succès. Un état de sortie différent de zéro indique un échec. Lorsqu'une commande se termine sur un signal fatal N, bash utilise la valeur 128+N comme état de sortie.

Si une commande n'est pas trouvée, le processus enfant créé pour l'exécuter renvoie un statut de 127. Si une commande est trouvée mais n'est pas exécutable, le statut de retour est 126.

Si une commande échoue en raison d'une erreur lors de l'expansion ou de la redirection, l'état de sortie est supérieur à zéro.

Les commandes intégrées du shell renvoient un état de 0 (true) en cas de succès, et différent de zéro (false) si une erreur se produit lors de leur exécution. Toutes les commandes intégrées renvoient un état de sortie de 2 pour indiquer une utilisation incorrecte, des options généralement invalides ou des arguments manquants.

Bash lui-même renvoie l'état de sortie de la dernière commande exécutée, sauf si une erreur de syntaxe se produit, auquel cas il se termine avec une valeur non nulle. Voir aussi la commande intégrée exit ci-dessous.

SIGNAUX

Lorsque bash est interactif, en l'absence de pièges, il ignore SIGTERM (de sorte que kill 0 ne tue pas un shell interactif), et SIGINT est intercepté et géré (afin que la commande intégrée wait soit interruptible). Dans tous les cas, bash ignore SIGQUIT. Si le contrôle des tâches est en vigueur, bash ignore SIGTTIN, SIGTTOU et SIGTSTP.

Les commandes non intégrées exécutées par bash ont des gestionnaires de signaux définis sur les valeurs héritées par le shell de son parent. Lorsque le contrôle des tâches n'est pas activé, les commandes asynchrones ignorent SIGINT et SIGQUIT en plus de ces gestionnaires hérités. Les commandes exécutées à la suite d'une substitution de commande ignorent les signaux de contrôle de tâche générés par le clavier SIGTTIN, SIGTTOU et SIGTSTP.

Le shell se ferme par défaut à la réception d'un SIGHUP. Avant de quitter, un shell interactif renvoie le SIGHUP à tous les travaux, en cours d'exécution ou arrêtés. Les travaux arrêtés sont envoyés SIGCONT pour s'assurer qu'ils reçoivent le SIGHUP. Pour empêcher le shell d'envoyer le signal à une tâche particulière, celle-ci doit être supprimée de la table des tâches avec la commande intégrée disown (voir COMMANDES INTÉGRÉES DU SHELL ci-dessous) ou marquée comme non recevoir SIGHUP en utilisant disown -h.

Si l'option shell huponexit a été définie avec shopt, bash envoie un SIGHUP à toutes les tâches lorsqu'une connexion interactive sorties d'obus.

Si bash attend qu'une commande se termine et reçoit un signal pour lequel un déroutement a été défini, le déroutement ne sera pas exécuté tant que la commande ne sera pas terminée. Lorsque bash attend une commande asynchrone via la commande intégrée wait, la réception d'un signal pour lequel un trap a été défini provoquera le wait builtin pour revenir immédiatement avec un état de sortie supérieur à 128, immédiatement après quoi le déroutement est exécuté.

CONTRÔLE DES TRAVAUX

Le contrôle des tâches fait référence à la capacité d'arrêter sélectivement (suspendre) l'exécution des processus et de poursuivre (reprendre) leur exécution ultérieurement. Un utilisateur utilise généralement cette fonctionnalité via une interface interactive fournie conjointement par le pilote de terminal du noyau du système d'exploitation et bash.

Le shell associe un travail à chaque pipeline. Il conserve une table des tâches en cours d'exécution, qui peuvent être répertoriées avec la commande jobs. Lorsque bash démarre une tâche de manière asynchrone (en arrière-plan), il imprime une ligne qui ressemble à :

[1] 25647

indiquant que ce travail est le travail numéro 1 et que l'ID de processus du dernier processus du pipeline associé à ce travail est 25647. Tous les processus d'un même pipeline sont membres du même travail. Bash utilise l'abstraction job comme base pour le contrôle des tâches.

Pour faciliter la mise en œuvre de l'interface utilisateur pour le contrôle des tâches, le système d'exploitation maintient la notion d'ID de groupe de processus terminal actuel. Les membres de ce groupe de processus (processus dont l'ID de groupe de processus est égal à l'ID de groupe de processus terminal actuel) reçoivent des signaux générés par le clavier tels que SIGINT. Ces processus sont dits au premier plan. Les processus d'arrière-plan sont ceux dont l'ID de groupe de processus diffère de celui du terminal ; ces processus sont insensibles aux signaux générés par le clavier. Seuls les processus de premier plan sont autorisés à lire ou, si l'utilisateur le spécifie avec stty tostop, à écrire sur le terminal. Les processus d'arrière-plan qui tentent de lire (écrire lorsque stty tostop est activé) le terminal reçoivent un signal SIGTTIN (SIGTTOU) par le pilote de terminal du noyau, qui, à moins que pris, suspend le processus.

Si le système d'exploitation sur lequel bash s'exécute prend en charge le contrôle des tâches, bash contient des fonctionnalités permettant de l'utiliser. Taper le caractère suspendre (généralement ^Z, Control-Z) pendant qu'un processus est en cours d'exécution provoque l'arrêt de ce processus et rend le contrôle à bash . Taper le caractère suspension retardée (généralement ^Y, Control-Y) provoque l'arrêt du processus lorsqu'il tente de lire l'entrée du terminal, et le contrôle revient à bash. L'utilisateur peut alors manipuler l'état de cette tâche, en utilisant la commande bg pour la poursuivre en arrière-plan, la commande fg pour la poursuivre en avant-plan, ou la commande kill pour le tuer. Un ^Z prend effet immédiatement et a pour effet secondaire supplémentaire de supprimer la sortie et la frappe en attente.

Il existe plusieurs façons de faire référence à un travail dans le shell. Le caractère % introduit une spécification de travail (jobspec). Le numéro de tâche n peut être appelé %n. Un travail peut également être référencé en utilisant un préfixe du nom utilisé pour le démarrer, ou en utilisant une sous-chaîne qui apparaît dans sa ligne de commande. Par exemple, %ce fait référence à une tâche arrêtée dont le nom de commande commence par ce. Si un préfixe correspond à plusieurs tâches, bash signale une erreur. L'utilisation de %?ce, en revanche, fait référence à toute tâche contenant la chaîne ce dans sa ligne de commande. Si la sous-chaîne correspond à plusieurs tâches, bash signale une erreur. Les symboles %% et %+ font référence à la notion du shell de la tâche en cours, qui est la dernière tâche arrêtée alors qu'elle était au premier plan ou démarré en arrière-plan. Le travail précédent peut être référencé en utilisant %-. S'il n'y a qu'un seul travail, %+ et %- peuvent tous deux être utilisés pour faire référence à ce travail. Dans la sortie relative aux tâches (par exemple, la sortie de la commande jobs), la tâche actuelle est toujours signalée par un + et la tâche précédente par un - . Un seul % (sans spécification d'emploi) fait également référence à l'emploi actuel.

Le simple fait de nommer un travail peut être utilisé pour le mettre au premier plan : %1 est un synonyme de ``fg %1'', ce qui fait passer le travail 1 de l'arrière-plan au premier plan. premier plan. De même, ``%1 &'' reprend le travail 1 en arrière-plan, ce qui équivaut à ``bg %1''.

Le shell apprend immédiatement chaque fois qu'un travail change d'état. Normalement, bash attend jusqu'à ce qu'il soit sur le point d'imprimer une invite avant de signaler les changements dans l'état d'un travail afin de ne pas interrompre toute autre sortie. Si l'option -b de la commande intégrée set est activée, bash signale ces modifications immédiatement. Tout déroutement sur SIGCHLD est exécuté pour chaque enfant qui sort.

Si une tentative de sortie de bash est effectuée alors que les tâches sont arrêtées (ou, si l'option de shell checkjobs a été activée à l'aide de la commande intégrée shopt, l'exécution ), le shell affiche un message d'avertissement et, si l'option checkjobs est activée, répertorie les travaux et leurs statuts. La commande jobs peut ensuite être utilisée pour inspecter leur statut. Si une deuxième tentative de sortie est effectuée sans commande intermédiaire, le shell n'affiche pas d'autre avertissement et tous les travaux arrêtés sont terminés.

Lorsque le shell attend une tâche ou un processus à l'aide de la fonction intégrée wait et que le contrôle des tâches est activé, wait revient lorsque la tâche change d'état. L'option -f force wait à attendre que le travail ou le processus se termine avant de revenir.

INVITE

Lors de l'exécution interactive, bash affiche l'invite principale PS1 lorsqu'il est prêt à lire une commande, et l'invite secondaire PS2 lorsqu'il a besoin de plus d'entrées pour terminer une commande. Bash affiche PS0 après avoir lu une commande mais avant de l'exécuter. Bash affiche PS4 comme décrit ci-dessus avant de tracer chaque commande lorsque l'option -x est activée. Bash permet de personnaliser ces chaînes d'invite en insérant un certain nombre de caractères spéciaux échappés par une barre oblique inverse qui sont décodés comme suit :

\a

un caractère cloche ASCII (07)

\d

la date au format "jour de la semaine mois date" (par exemple, "mardi 26 mai")

\D{format}

le format est passé à strftime(3) et le résultat est inséré dans la chaîne d'invite ; un format vide donne une représentation temporelle spécifique aux paramètres régionaux. Les bretelles sont obligatoires

\e

un caractère d'échappement ASCII (033)

\h

le nom d'hôte jusqu'au premier `.'

\H

le nom d'hôte

\j

le nombre de jobs actuellement gérés par le shell

\l

le nom de base du nom du périphérique terminal du shell

\n

nouvelle ligne

\r

retour chariot

\s

le nom du shell, le nom de base de $0 (la partie suivant la barre oblique finale)

\t

l'heure actuelle au format 24 heures HH:MM:SS

\T

l'heure actuelle au format 12 heures HH:MM:SS

\@

l'heure actuelle au format 12 heures am/pm

\A

l'heure actuelle au format 24 heures HH:MM

\u

le nom d'utilisateur de l'utilisateur actuel

\v

la version de bash (par exemple, 2.00)

\V

la version de bash, version + niveau de correctif (par exemple, 2.00.0)

\w

le répertoire de travail courant, avec $HOME abrégé avec un tilde (utilise la valeur de la variable PROMPT_DIRTRIM)

\W

le nom de base du répertoire de travail actuel, avec $HOME abrégé avec un tilde

\!

le numéro d'historique de cette commande

\#

le numéro de commande de cette commande

\$

si l'UID effectif est 0, un #, sinon un $

\nnn

le caractère correspondant au nombre octal nnn

\\

une barre oblique inverse

\[

commencer une séquence de caractères non imprimables, qui pourraient être utilisés pour intégrer une séquence de contrôle de terminal dans l'invite

\]

terminer une séquence de caractères non imprimables

Le numéro de commande et le numéro d'historique sont généralement différents : le numéro d'historique d'une commande est sa position dans la liste d'historique, qui peut inclure des commandes restaurées à partir du fichier d'historique (voir HISTORY ci-dessous), tandis que la commande number est la position dans la séquence de commandes exécutées pendant la session shell en cours. Une fois la chaîne décodée, elle est étendue via l'expansion des paramètres, la substitution de commande, l'expansion arithmétique et la suppression des guillemets, sous réserve de la valeur de l'option shell promptvars (voir la description de l'option shopt< sous COMMANDES INTÉGRÉES DU SHELL ci-dessous). Cela peut avoir des effets secondaires indésirables si des parties échappées de la chaîne apparaissent dans la substitution de commande ou contiennent des caractères spéciaux pour l'expansion de mot.

LIGNE DE LECTURE

Il s'agit de la bibliothèque qui gère la lecture des entrées lors de l'utilisation d'un shell interactif, à moins que l'option --noediting ne soit donnée à l'invocation du shell. L'édition de ligne est également utilisée lors de l'utilisation de l'option -e de la commande intégrée read. Par défaut, les commandes d'édition de ligne sont similaires à celles d'Emacs. Une interface d'édition de ligne de style vi est également disponible. L'édition de ligne peut être activée à tout moment en utilisant les options -o emacs ou -o vi de la commande intégrée set (voir SHELL BUILTIN COMMANDES ci-dessous). Pour désactiver l'édition de ligne après l'exécution du shell, utilisez les options +o emacs ou +o vi pour la commande intégrée set.

Notation de ligne de lecture

Dans cette section, la notation de style Emacs est utilisée pour désigner les frappes. Les touches de contrôle sont désignées par C-touche, par exemple, C-n signifie Control-N. De même, les clés meta sont désignées par M-clé, donc M-x signifie Meta-X. (Sur les claviers sans touche meta, M-x signifie ESC x, c'est-à-dire, appuyez sur la touche Échap puis sur x. Cela fait d'ESC le préfixe méta. La combinaison M-C-x signifie ESC-Control-x, ou appuyez sur la touche Échap puis maintenez la touche Contrôle enfoncée tout en appuyant sur la touche x.)

Les commandes Readline peuvent recevoir des arguments numériques, qui agissent normalement comme un nombre de répétitions. Parfois, cependant, c'est le signe de l'argument qui est significatif. Passer un argument négatif à une commande qui agit vers l'avant (par exemple, kill-line) fait que cette commande agit vers l'arrière. Les commandes dont le comportement avec les arguments s'en écarte sont notées ci-dessous.

Lorsqu'une commande est décrite comme du texte tuant, le texte supprimé est enregistré pour une éventuelle récupération future (coup sec). Le texte supprimé est enregistré dans un anneau de mise à mort. Les éliminations consécutives entraînent l'accumulation du texte en une seule unité, qui peut être retirée en une seule fois. Les commandes qui ne tuent pas le texte séparent les morceaux de texte sur le kill ring.

Initialisation de la ligne de lecture

Readline est personnalisé en plaçant des commandes dans un fichier d'initialisation (le fichier inputrc). Le nom de ce fichier est tiré de la valeur de la variable INPUTRC. Si cette variable n'est pas définie, la valeur par défaut est ~/.inputrc. Si ce fichier n'existe pas ou ne peut pas être lu, la valeur par défaut ultime est /etc/inputrc. Lorsqu'un programme qui utilise la bibliothèque readline démarre, le fichier d'initialisation est lu et les raccourcis clavier et les variables sont définis. Seules quelques constructions de base sont autorisées dans le fichier d'initialisation readline. Les lignes vides sont ignorées. Les lignes commençant par un # sont des commentaires. Les lignes commençant par $ indiquent des constructions conditionnelles. Les autres lignes indiquent les raccourcis clavier et les paramètres variables.

Les raccourcis clavier par défaut peuvent être modifiés avec un fichier inputrc. D'autres programmes qui utilisent cette bibliothèque peuvent ajouter leurs propres commandes et liaisons.

Par exemple, placer

M-Control-u: universal-argument

ou

C-Meta-u: universal-argument

dans inputrc obligerait M-C-u à exécuter la commande readline universal-argument.

Les noms de caractères symboliques suivants sont reconnus : RUBOUT, DEL, ESC, LFD, NEWLINE, RET, RETOUR, SPC, ESPACE et TAB.

En plus des noms de commande, readline permet aux clés d'être liées à une chaîne qui est insérée lorsque la touche est enfoncée (une macro).

Liaisons de touches Readline

La syntaxe de contrôle des raccourcis clavier dans le fichier inputrc est simple. Tout ce qui est requis est le nom de la commande ou le texte d'une macro et une séquence de touches à laquelle elle doit être liée. Le nom peut être spécifié de deux manières : sous la forme d'un nom de clé symbolique, éventuellement avec les préfixes Meta- ou Control-, ou sous la forme d'une séquence de touches.

Lorsque vous utilisez la forme keyname : function-name ou macro, keyname est le nom d'une clé épelé dans Anglais. Par exemple:

Control-u: universal-argument
Meta-Rubout: backward-kill-word
Control-o: "> output"

Dans l'exemple ci-dessus, C-u est lié à la fonction universal-argument, M-DEL est lié à la fonction backward-kill -word, et C-o est tenu d'exécuter la macro exprimée sur le côté droit (c'est-à-dire d'insérer le texte ``> output'' dans la ligne).

Dans la seconde forme, "keyseq" : nom-fonction ou macro, keyseq diffère de keyname ci-dessus dans la mesure où les chaînes indiquant une séquence de touches entière peuvent être spécifiées en plaçant la séquence entre guillemets doubles. Certains raccourcis clavier de style GNU Emacs peuvent être utilisés, comme dans l'exemple suivant, mais les noms de caractères symboliques ne sont pas reconnus.

"\C-u": universal-argument
"\C-x\C-r": re-read-init-file
"\e[11~": "Function Key 1"

Dans cet exemple, C-u est à nouveau lié à la fonction universal-argument. C-x C-r est lié à la fonction re-read-init-file, et ESC [ 1 1 ~ est lié pour insérer le texte `` Touche de fonction 1''.

L'ensemble complet des séquences d'échappement de style GNU Emacs est

\C-

préfixe de contrôle

\M-

préfixe méta

\e

un caractère d'échappement

\\

barre oblique inverse

\"

littéral "

\'

littéral '

En plus des séquences d'échappement de style GNU Emacs, un deuxième ensemble d'échappements antislash est disponible :

\a

alerte (cloche)

\b

retour arrière

\d

supprimer

\f

saut de formulaire

\n

nouvelle ligne

\r

retour chariot

\t

tabulation horizontale

\v

onglet vertical

\nnn

le caractère huit bits dont la valeur est la valeur octale nnn (un à trois chiffres)

\xHH

le caractère huit bits dont la valeur est la valeur hexadécimale HH (un ou deux chiffres hexadécimaux)

Lors de la saisie du texte d'une macro, des guillemets simples ou doubles doivent être utilisés pour indiquer une définition de macro. Le texte sans guillemets est supposé être un nom de fonction. Dans le corps de la macro, les échappements antislash décrits ci-dessus sont développés. La barre oblique inverse cite tout autre caractère dans le texte de la macro, y compris " et '.

Bash permet d'afficher ou de modifier les raccourcis clavier actuels de readline avec la commande intégrée bind. Le mode d'édition peut être changé pendant l'utilisation interactive en utilisant l'option -o de la commande intégrée set (voir COMMANDES INTÉGRÉES DU SHELL ci-dessous).

Variables de ligne de lecture

Readline a des variables qui peuvent être utilisées pour personnaliser davantage son comportement. Une variable peut être définie dans le fichier inputrc avec une déclaration de la forme

set variable-name value

ou en utilisant la commande intégrée bind (voir COMMANDES INTÉGRÉES DU SHELL ci-dessous).

Sauf indication contraire, les variables readline peuvent prendre les valeurs On ou Off (sans tenir compte de la casse). Les noms de variables non reconnus sont ignorés. Lorsqu'une valeur de variable est lue, les valeurs vides ou nulles, "on" (insensible à la casse) et "1" sont équivalents à On. Toutes les autres valeurs sont équivalentes à Désactivé. Les variables et leurs valeurs par défaut sont :

bell-style (audible)

Contrôle ce qui se passe lorsque readline veut sonner la cloche du terminal. S'il est défini sur aucun, readline ne sonne jamais la cloche. Si défini sur visible, readline utilise une cloche visible si elle est disponible. S'il est défini sur audible, readline tente de faire sonner la cloche du terminal.

bind-tty-special-chars (On)

S'il est défini sur On, readline tente de lier les caractères de contrôle traités spécialement par le pilote de terminal du noyau à leurs équivalents readline.

blink-matching-paren (Off)

Si défini sur On, readline tente de déplacer brièvement le curseur vers une parenthèse ouvrante lorsqu'une parenthèse fermante est insérée.

colored-completion-prefix (Off)

Si défini sur On, lors de la liste des complétions, readline affiche le préfixe commun de l'ensemble des complétions possibles en utilisant une couleur différente. Les définitions de couleur sont extraites de la valeur de la variable d'environnement LS_COLORS.

colored-stats (Off)

S'il est défini sur Activé, readline affiche les complétions possibles en utilisant différentes couleurs pour indiquer leur type de fichier. Les définitions de couleur sont extraites de la valeur de la variable d'environnement LS_COLORS.

comment-begin (``#'')

La chaîne qui est insérée lorsque la commande readline insert-comment est exécutée. Cette commande est liée à M-# en mode emacs et à # en mode commande vi.

completion-display-width (-1)

Le nombre de colonnes d'écran utilisées pour afficher les correspondances possibles lors de l'achèvement. La valeur est ignorée si elle est inférieure à 0 ou supérieure à la largeur de l'écran du terminal. Une valeur de 0 entraînera l'affichage des correspondances une par ligne. La valeur par défaut est -1.

completion-ignore-case (Off)

S'il est défini sur On, readline effectue la correspondance et la complétion des noms de fichiers sans tenir compte de la casse.

completion-map-case (Off)

S'il est défini sur On et que completion-ignore-case est activé, readline traite les traits d'union (-) et les traits de soulignement (_) comme équivalent lors de l'exécution d'une correspondance et d'une complétion de noms de fichiers insensibles à la casse.

completion-prefix-display-length (0)

La longueur en caractères du préfixe commun d'une liste de complètements possibles qui s'affiche sans modification. Lorsqu'il est défini sur une valeur supérieure à zéro, les préfixes communs plus longs que cette valeur sont remplacés par des points de suspension lors de l'affichage des complètements possibles.

completion-query-items (100)

Cela détermine quand l'utilisateur est interrogé sur l'affichage du nombre de complétions possibles générées par la commande possible-completions. Il peut être défini sur n'importe quelle valeur entière supérieure ou égale à zéro. Si le nombre de complétions possibles est supérieur ou égal à la valeur de cette variable, readline demandera si l'utilisateur souhaite ou non les visualiser ; sinon, ils sont simplement répertoriés sur le terminal.

convert-meta (On)

S'il est défini sur On, readline convertira les caractères avec le huitième bit défini en une séquence de touches ASCII en supprimant le huitième bit et en préfixant un caractère d'échappement (en fait, en utilisant escape comme méta préfixe). La valeur par défaut est On, mais readline la définira sur Off si les paramètres régionaux contiennent des caractères huit bits.

disable-completion (Off)

S'il est défini sur On, readline empêchera l'achèvement des mots. Les caractères de complétion seront insérés dans la ligne comme s'ils avaient été mappés sur auto-insertion.

echo-control-characters (On)

Lorsqu'il est défini sur On, sur les systèmes d'exploitation qui indiquent qu'ils le prennent en charge, readline renvoie un caractère correspondant à un signal généré à partir du clavier.

editing-mode (emacs)

Contrôle si readline commence par un ensemble de raccourcis clavier similaires à Emacs ou vi. editing-mode peut être défini sur emacs ou vi.

emacs-mode-string (@)

Si la variable show-mode-in-prompt est activée, cette chaîne est affichée immédiatement avant la dernière ligne de l'invite principale lorsque le mode d'édition d'emacs est actif. La valeur est développée comme une liaison de clé, de sorte que l'ensemble standard de préfixes méta et de contrôle et de séquences d'échappement de barre oblique inverse est disponible. Utilisez les échappements \1 et \2 pour commencer et terminer des séquences de caractères non imprimables, qui peuvent être utilisées pour intégrer une séquence de contrôle de terminal dans la chaîne de mode.

enable-bracketed-paste (On)

Lorsqu'il est défini sur On, readline configurera le terminal de manière à lui permettre d'insérer chaque collage dans le tampon d'édition comme une seule chaîne de caractères, au lieu de traiter chaque caractère comme s'il avait été lu du clavier. Cela peut empêcher que les caractères collés soient interprétés comme des commandes d'édition.

enable-keypad (Off)

Lorsqu'il est défini sur Activé, readline essaiera d'activer le clavier de l'application lorsqu'il est appelé. Certains systèmes en ont besoin pour activer les touches fléchées.

enable-meta-key (On)

Lorsqu'il est défini sur On, readline essaiera d'activer toute clé de modification méta que le terminal prétend prendre en charge lorsqu'il est appelé. Sur de nombreux terminaux, la clé méta est utilisée pour envoyer des caractères à huit bits.

expand-tilde (Off)

S'il est défini sur On, l'expansion du tilde est effectuée lorsque readline tente de compléter un mot.

history-preserve-point (Off)

S'il est défini sur On, le code d'historique tente de placer le point au même emplacement sur chaque ligne d'historique récupérée avec previous-history ou next-history .

history-size (unset)

Définissez le nombre maximum d'entrées d'historique enregistrées dans la liste d'historique. S'il est défini sur zéro, toutes les entrées d'historique existantes sont supprimées et aucune nouvelle entrée n'est enregistrée. S'il est défini sur une valeur inférieure à zéro, le nombre d'entrées d'historique n'est pas limité. Par défaut, le nombre d'entrées d'historique est défini sur la valeur de la variable shell HISTSIZE. Si une tentative est faite pour définir history-size sur une valeur non numérique, le nombre maximum d'entrées d'historique sera défini sur 500.

horizontal-scroll-mode (Off)

Lorsqu'il est défini sur On, fait que readline utilise une seule ligne pour l'affichage, faisant défiler l'entrée horizontalement sur une seule ligne d'écran lorsqu'elle devient plus longue que la largeur de l'écran plutôt que de passer à une nouvelle ligne. Ce paramètre est automatiquement activé pour les terminaux de hauteur 1.

input-meta (Off)

S'il est défini sur On, readline activera l'entrée huit bits (c'est-à-dire qu'il ne supprimera pas le huitième bit des caractères qu'il lit), indépendamment de ce que le terminal prétend pouvoir prendre en charge. Le nom meta-flag est synonyme de cette variable. La valeur par défaut est Off, mais readline la définira sur On si les paramètres régionaux contiennent des caractères huit bits.

isearch-terminators (``C-[C-J'')

La chaîne de caractères qui doit terminer une recherche incrémentielle sans exécuter ensuite le caractère en tant que commande. Si cette variable n'a pas été valorisée, les caractères ESC et C-J termineront une recherche incrémentale.

keymap (emacs)

Définit le keymap actuel de readline. L'ensemble de noms de keymap valides est emacs, emacs-standard, emacs-meta, emacs-ctlx, vi, vi-command et vi-insert. vi est équivalent à vi-command ; emacs est équivalent à emacs-standard. La valeur par défaut est emacs ; la valeur de editing-mode affecte également le keymap par défaut.

keyseq-timeout (500)

Spécifie la durée pendant laquelle readline attendra un caractère lors de la lecture d'une séquence de touches ambiguë (celle qui peut former une séquence de touches complète en utilisant l'entrée lue jusqu'à présent, ou peut prendre une entrée supplémentaire pour compléter une séquence de touches plus longue) . Si aucune entrée n'est reçue dans le délai imparti, readline utilisera la séquence de touches la plus courte mais la plus complète. La valeur est spécifiée en millisecondes, donc une valeur de 1000 signifie que readline attendra une seconde pour une entrée supplémentaire. Si cette variable est définie sur une valeur inférieure ou égale à zéro, ou sur une valeur non numérique, readline attendra qu'une autre touche soit enfoncée pour décider quelle séquence de touches terminer.

mark-directories (On)

S'il est défini sur Activé, les noms de répertoire complets sont suivis d'une barre oblique.

mark-modified-lines (Off)

S'il est défini sur Activé, les lignes d'historique qui ont été modifiées sont affichées précédées d'un astérisque (*).

mark-symlinked-directories (Off)

S'il est défini sur On, les noms complets qui sont des liens symboliques vers des répertoires sont suivis d'une barre oblique (sous réserve de la valeur de mark-directories).

match-hidden-files (On)

Cette variable, lorsqu'elle est définie sur On, force readline à rechercher les fichiers dont les noms commencent par un `.' (fichiers cachés) lors de la complétion du nom de fichier. S'il est défini sur Désactivé, le premier `.' doit être fourni par l'utilisateur dans le nom du fichier à compléter.

menu-complete-display-prefix (Off)

S'il est défini sur Activé, la complétion de menu affiche le préfixe commun de la liste des complétions possibles (qui peut être vide) avant de parcourir la liste.

output-meta (Off)

S'il est défini sur On, readline affichera les caractères avec le huitième bit défini directement plutôt que sous la forme d'une séquence d'échappement méta-préfixée. La valeur par défaut est Off, mais readline la définira sur On si les paramètres régionaux contiennent des caractères huit bits.

page-completions (On)

S'il est défini sur On, readline utilise un téléavertisseur interne de type more pour afficher un écran des complétions possibles à la fois.

print-completions-horizontally (Off)

S'il est défini sur Activé, readline affichera les complétions avec les correspondances triées horizontalement par ordre alphabétique, plutôt que vers le bas de l'écran.

revert-all-at-newline (Off)

Si défini sur On, readline annulera toutes les modifications apportées aux lignes d'historique avant de revenir lorsque accept-line est exécuté. Par défaut, les lignes d'historique peuvent être modifiées et conserver des listes d'annulation individuelles lors des appels à readline.

show-all-if-ambiguous (Off)

Cela modifie le comportement par défaut des fonctions de complétion. S'il est défini sur Activé, les mots qui ont plus d'un complètement possible entraînent l'affichage immédiat des correspondances au lieu de sonner la cloche.

show-all-if-unmodified (Off)

Cela modifie le comportement par défaut des fonctions de complétion d'une manière similaire à show-all-if-ambiguous. S'il est défini sur Activé, les mots qui ont plus d'une complétion possible sans aucune complétion partielle possible (les complétions possibles ne partagent pas un préfixe commun) entraînent l'affichage immédiat des correspondances au lieu de sonner la cloche.

show-mode-in-prompt (Off)

Si défini sur Activé, ajoutez une chaîne au début de l'invite indiquant le mode d'édition : emacs, commande vi ou insertion vi. Les chaînes de mode sont configurables par l'utilisateur (par exemple, emacs-mode-string).

skip-completed-text (Off)

S'il est défini sur Activé, cela modifie le comportement de complétion par défaut lors de l'insertion d'une seule correspondance dans la ligne. Il n'est actif que lors de la complétion au milieu d'un mot. S'il est activé, readline n'insère pas de caractères à partir de la complétion qui correspondent aux caractères après le point dans le mot en cours de complétion, de sorte que les parties du mot suivant le curseur ne sont pas dupliquées.

vi-cmd-mode-string ((cmd))

Si la variable show-mode-in-prompt est activée, cette chaîne s'affiche immédiatement avant la dernière ligne de l'invite principale lorsque le mode d'édition vi est actif et en mode commande. La valeur est développée comme une liaison de clé, de sorte que l'ensemble standard de préfixes méta et de contrôle et de séquences d'échappement de barre oblique inverse est disponible. Utilisez les échappements \1 et \2 pour commencer et terminer des séquences de caractères non imprimables, qui peuvent être utilisées pour intégrer une séquence de contrôle de terminal dans la chaîne de mode.

vi-ins-mode-string ((ins))

Si la variable show-mode-in-prompt est activée, cette chaîne s'affiche immédiatement avant la dernière ligne de l'invite principale lorsque le mode d'édition vi est actif et en mode insertion. La valeur est développée comme une liaison de clé, de sorte que l'ensemble standard de préfixes méta et de contrôle et de séquences d'échappement de barre oblique inverse est disponible. Utilisez les échappements \1 et \2 pour commencer et terminer des séquences de caractères non imprimables, qui peuvent être utilisées pour intégrer une séquence de contrôle de terminal dans la chaîne de mode.

visible-stats (Off)

Si défini sur On, un caractère indiquant le type de fichier tel que rapporté par stat(2) est ajouté au nom de fichier lors de la liste des complétions possibles.

Constructions conditionnelles Readline

Readline implémente une fonctionnalité similaire dans l'esprit aux fonctionnalités de compilation conditionnelle du préprocesseur C qui permet d'effectuer des raccourcis clavier et des paramètres de variables à la suite de tests. Quatre directives d'analyseur sont utilisées.

$if

La construction $if permet d'effectuer des liaisons en fonction du mode d'édition, du terminal utilisé ou de l'application utilisant readline. Le texte du test, après tout opérateur de comparaison, s'étend jusqu'à la fin de la ligne ; sauf indication contraire, aucun caractère n'est requis pour l'isoler.

mode

La forme mode= de la directive $if est utilisée pour tester si readline est en mode emacs ou vi. Cela peut être utilisé en conjonction avec la commande set keymap, par exemple, pour définir des liaisons dans les keymaps emacs-standard et emacs-ctlx uniquement si readline démarre en mode emacs.

term

La forme term= peut être utilisée pour inclure des raccourcis clavier spécifiques au terminal, peut-être pour lier les séquences de touches générées par les touches de fonction du terminal. Le mot à droite de = est testé à la fois par rapport au nom complet du terminal et à la partie du nom du terminal avant le premier -. Cela permet à sun de faire correspondre à la fois sun et sun-cmd, par exemple.

version

Le test version peut être utilisé pour effectuer des comparaisons avec des versions readline spécifiques. La version s'étend à la version actuelle de readline. L'ensemble d'opérateurs de comparaison comprend =, (et ==), !=, <=, >=, < et >. Le numéro de version fourni sur le côté droit de l'opérateur se compose d'un numéro de version majeur, d'un point décimal facultatif et d'une version mineure facultative (par exemple, 7.1). Si la version mineure est omise, elle est supposée être 0. L'opérateur peut être séparé de la chaîne version et de l'argument du numéro de version par des espaces.

application

La construction application est utilisée pour inclure des paramètres spécifiques à l'application. Chaque programme utilisant la bibliothèque readline définit le nom de l'application, et un fichier d'initialisation peut tester une valeur particulière. Cela pourrait être utilisé pour lier des séquences de touches à des fonctions utiles pour un programme spécifique. Par exemple, la commande suivante ajoute une séquence de touches qui cite le mot actuel ou précédent dans bash :

$if Bash
# Quote the current or previous word
"\C-xq": "\eb\"\ef\""
$endif
variable

La construction variable fournit des tests d'égalité simples pour les variables et les valeurs readline. Les opérateurs de comparaison autorisés sont =, == et !=. Le nom de la variable doit être séparé de l'opérateur de comparaison par un espace ; l'opérateur peut être séparé de la valeur sur le côté droit par un espace. Les variables de chaîne et booléennes peuvent être testées. Les variables booléennes doivent être testées par rapport aux valeurs on et off.

$endif

Cette commande, comme dans l'exemple précédent, termine une commande $if.

$else

Les commandes de cette branche de la directive $if sont exécutées si le test échoue.

$include

Cette directive prend un seul nom de fichier comme argument et lit les commandes et les liaisons de ce fichier. Par exemple, la directive suivante lirait /etc/inputrc :

$include   /etc/inputrc

Recherche

Readline fournit des commandes pour rechercher dans l'historique des commandes (voir HISTORY ci-dessous) les lignes contenant une chaîne spécifiée. Il existe deux modes de recherche : incrémental et non incrémental.

Les recherches incrémentielles commencent avant que l'utilisateur ait fini de taper la chaîne de recherche. Au fur et à mesure que chaque caractère de la chaîne de recherche est saisi, readline affiche l'entrée suivante de l'historique correspondant à la chaîne saisie jusqu'à présent. Une recherche incrémentielle ne nécessite que le nombre de caractères nécessaires pour trouver l'entrée d'historique souhaitée. Les caractères présents dans la valeur de la variable isearch-terminators sont utilisés pour terminer une recherche incrémentale. Si cette variable n'a pas reçu de valeur, les caractères Escape et Control-J termineront une recherche incrémentielle. Control-G annulera une recherche incrémentielle et restaurera la ligne d'origine. Lorsque la recherche est terminée, l'entrée d'historique contenant la chaîne de recherche devient la ligne courante.

Pour rechercher d'autres entrées correspondantes dans la liste d'historique, tapez Control-S ou Control-R selon le cas. Cela recherchera en arrière ou en avant dans l'historique la prochaine entrée correspondant à la chaîne de recherche tapée jusqu'à présent. Toute autre séquence de touches liée à une commande readline mettra fin à la recherche et exécutera cette commande. Par exemple, un newline mettra fin à la recherche et acceptera la ligne, exécutant ainsi la commande de la liste d'historique.

Readline se souvient de la dernière chaîne de recherche incrémentielle. Si deux Control-R sont tapés sans aucun caractère intermédiaire définissant une nouvelle chaîne de recherche, toute chaîne de recherche mémorisée est utilisée.

Les recherches non incrémentielles lisent l'intégralité de la chaîne de recherche avant de commencer à rechercher les lignes d'historique correspondantes. La chaîne de recherche peut être tapée par l'utilisateur ou faire partie du contenu de la ligne courante.

Noms des commandes Readline

Voici une liste des noms des commandes et des séquences de touches par défaut auxquelles elles sont liées. Les noms de commande sans séquence de touches d'accompagnement ne sont pas liés par défaut. Dans les descriptions suivantes, point fait référence à la position actuelle du curseur et mark fait référence à une position de curseur enregistrée par la commande set-mark. Le texte entre le point et la marque est appelé la région.

Commandes de déplacement

beginning-of-line (C-a)

Aller au début de la ligne courante.

end-of-line (C-e)

Déplacez-vous à la fin de la ligne.

forward-char (C-f)

Avancer d'un caractère.

backward-char (C-b)

Reculer d'un caractère.

forward-word (M-f)

Avancez jusqu'à la fin du mot suivant. Les mots sont composés de caractères alphanumériques (lettres et chiffres).

backward-word (M-b)

Revenir au début du mot actuel ou précédent. Les mots sont composés de caractères alphanumériques (lettres et chiffres).

shell-forward-word

Avancez jusqu'à la fin du mot suivant. Les mots sont délimités par des métacaractères shell sans guillemets.

shell-backward-word

Revenir au début du mot actuel ou précédent. Les mots sont délimités par des métacaractères shell sans guillemets.

previous-screen-line

Essayez de déplacer le point vers la même colonne d'écran physique sur la ligne d'écran physique précédente. Cela n'aura pas l'effet souhaité si la ligne Readline actuelle n'occupe pas plus d'une ligne physique ou si point n'est pas supérieur à la longueur de l'invite plus la largeur de l'écran.

next-screen-line

Essayez de déplacer le point vers la même colonne d'écran physique sur la ligne d'écran physique suivante. Cela n'aura pas l'effet souhaité si la ligne Readline actuelle n'occupe pas plus d'une ligne physique ou si la longueur de la ligne Readline actuelle n'est pas supérieure à la longueur de l'invite plus la largeur de l'écran.

clear-display (M-C-l)

Effacez l'écran et, si possible, le tampon de défilement du terminal, puis redessinez la ligne courante en laissant la ligne courante en haut de l'écran.

clear-screen (C-l)

Effacez l'écran, puis redessinez la ligne actuelle, en laissant la ligne actuelle en haut de l'écran. Avec un argument, actualise la ligne courante sans effacer l'écran.

redraw-current-line

Rafraîchir la ligne courante.

Commandes pour manipuler l'historique

accept-line (Newline, Return)

Acceptez la ligne quelle que soit la position du curseur. Si cette ligne n'est pas vide, ajoutez-la à la liste d'historique en fonction de l'état de la variable HISTCONTROL. Si la ligne est une ligne d'historique modifiée, restaurez la ligne d'historique à son état d'origine.

previous-history (C-p)

Récupérer la commande précédente dans la liste de l'historique, en remontant dans la liste.

next-history (C-n)

Récupérez la commande suivante dans la liste de l'historique, en avançant dans la liste.

beginning-of-history (M-<)

Accéder à la première ligne de l'historique.

end-of-history (M->)

Aller à la fin de l'historique de saisie, c'est-à-dire la ligne en cours de saisie.

reverse-search-history (C-r)

Recherche en arrière à partir de la ligne actuelle et en remontant dans l'historique si nécessaire. Il s'agit d'une recherche incrémentale.

forward-search-history (C-s)

Recherche vers l'avant en commençant à la ligne actuelle et en se déplaçant vers le bas dans l'historique si nécessaire. Il s'agit d'une recherche incrémentale.

non-incremental-reverse-search-history (M-p)

Recherche en arrière dans l'historique à partir de la ligne actuelle en utilisant une recherche non incrémentielle d'une chaîne fournie par l'utilisateur.

non-incremental-forward-search-history (M-n)

Recherche vers l'avant dans l'historique à l'aide d'une recherche non incrémentielle d'une chaîne fournie par l'utilisateur.

history-search-forward

Recherche en avant dans l'historique la chaîne de caractères entre le début de la ligne actuelle et le point. Il s'agit d'une recherche non incrémentielle.

history-search-backward

Recherche en arrière dans l'historique la chaîne de caractères entre le début de la ligne courante et le point. Il s'agit d'une recherche non incrémentielle.

history-substring-search-backward

Recherche en arrière dans l'historique la chaîne de caractères entre le début de la ligne actuelle et la position actuelle du curseur (le point). La chaîne de recherche peut correspondre n'importe où dans une ligne d'historique. Il s'agit d'une recherche non incrémentielle.

history-substring-search-forward

Recherche en avant dans l'historique la chaîne de caractères entre le début de la ligne actuelle et le point. La chaîne de recherche peut correspondre n'importe où dans une ligne d'historique. Il s'agit d'une recherche non incrémentielle.

yank-nth-arg (M-C-y)

Insérez le premier argument de la commande précédente (généralement le deuxième mot de la ligne précédente) au point. Avec un argument n, insérez le nième mot de la commande précédente (les mots de la commande précédente commencent par le mot 0). Un argument négatif insère le nème mot à partir de la fin de la commande précédente. Une fois l'argument n calculé, l'argument est extrait comme si l'extension d'historique "!n" avait été spécifiée.

yank-last-arg (M-. , M-_ )

Insérez le dernier argument de la commande précédente (le dernier mot de l'entrée d'historique précédente). Avec un argument numérique, se comporte exactement comme yank-nth-arg. Les appels successifs à yank-last-arg remontent dans la liste d'historique, en insérant le dernier mot (ou le mot spécifié par l'argument du premier appel) de chaque ligne à tour de rôle. Tout argument numérique fourni à ces appels successifs détermine la direction à suivre dans l'historique. Un argument négatif change la direction dans l'historique (en arrière ou en avant). Les fonctions d'expansion de l'historique sont utilisées pour extraire le dernier mot, comme si l'expansion de l'historique "!$" avait été spécifiée.

shell-expand-line (M-C-e)

Développez la ligne comme le fait le shell. Cela exécute l'expansion des alias et de l'historique ainsi que toutes les expansions de mots du shell. Voir EXTENSION DE L'HISTORIQUE ci-dessous pour une description de l'extension de l'historique.

history-expand-line (M-^)

Exécute l'expansion de l'historique sur la ligne courante. Voir EXTENSION DE L'HISTORIQUE ci-dessous pour une description de l'extension de l'historique.

magic-space

Exécute l'expansion de l'historique sur la ligne courante et insère un espace. Voir EXTENSION DE L'HISTORIQUE ci-dessous pour une description de l'extension de l'historique.

alias-expand-line

Exécute l'expansion d'alias sur la ligne courante. Voir ALIASES ci-dessus pour une description de l'extension d'alias.

history-and-alias-expand-line

Exécute l'expansion de l'historique et des alias sur la ligne actuelle.

insert-last-argument (M-. , M-_ )

Un synonyme de yank-last-arg.

operate-and-get-next (C-o)

Acceptez la ligne actuelle pour exécution et récupérez la ligne suivante relative à la ligne actuelle dans l'historique pour modification. Un argument numérique, s'il est fourni, spécifie l'entrée d'historique à utiliser à la place de la ligne courante.

edit-and-execute-command (C-x C-e)

Appelez un éditeur sur la ligne de commande actuelle et exécutez le résultat en tant que commandes shell. Bash tente d'invoquer $VISUAL, $EDITOR et emacs comme éditeur, dans cet ordre.

Commandes pour modifier le texte

end-of-file (usually C-d)

Le caractère indiquant la fin du fichier défini, par exemple, par ``stty''. Si ce caractère est lu alors qu'il n'y a aucun caractère sur la ligne et que le point est au début de la ligne, Readline l'interprète comme la fin de l'entrée et renvoie EOF.

delete-char (C-d)

Supprimer le caractère au point. Si cette fonction est liée au même caractère que le caractère tty EOF, comme C-d l'est généralement, voir ci-dessus pour les effets.

backward-delete-char (Rubout)

Supprimer le caractère derrière le curseur. Lorsqu'on lui donne un argument numérique, enregistre le texte supprimé sur le kill ring.

forward-backward-delete-char

Supprime le caractère sous le curseur, sauf si le curseur se trouve en fin de ligne, auquel cas le caractère derrière le curseur est supprimé.

quoted-insert (C-q, C-v)

Ajoutez le prochain caractère tapé à la ligne textuellement. Voici comment insérer des caractères comme C-q, par exemple.

tab-insert (C-v TAB)

Insérez un caractère de tabulation.

self-insert (a, b, A, 1, !, ...)

Insérez le caractère tapé.

transpose-chars (C-t)

Faites glisser le caractère avant le point vers l'avant sur le caractère au point, en déplaçant également le point vers l'avant. Si le point est à la fin de la ligne, cela transpose les deux caractères avant le point. Les arguments négatifs n'ont aucun effet.

transpose-words (M-t)

Faites glisser le mot avant le point au-delà du mot après le point, en déplaçant également le point sur ce mot. Si point est en fin de ligne, cela transpose les deux derniers mots de la ligne.

upcase-word (M-u)

Mettre en majuscule le mot courant (ou suivant). Avec un argument négatif, mettez en majuscule le mot précédent, mais ne déplacez pas le point.

downcase-word (M-l)

Minuscule le mot courant (ou suivant). Avec un argument négatif, mettez en minuscule le mot précédent, mais ne déplacez pas le point.

capitalize-word (M-c)

Mettez en majuscule le mot courant (ou suivant). Avec un argument négatif, mettez le mot précédent en majuscule, mais ne déplacez pas le point.

overwrite-mode

Basculer le mode d'écrasement. Avec un argument numérique positif explicite, passe en mode écrasement. Avec un argument numérique non positif explicite, passe en mode insertion. Cette commande affecte uniquement le mode emacs ; Le mode vi écrase différemment. Chaque appel à readline() démarre en mode insertion. En mode écrasement, les caractères liés à l'auto-insertion remplacent le texte au point plutôt que de pousser le texte vers la droite. Les caractères liés à backward-delete-char remplacent le caractère avant le point par un espace. Par défaut, cette commande est indépendante.

Tuer et tirer

kill-line (C-k)

Tuez le texte du point à la fin de la ligne.

backward-kill-line (C-x Rubout)

Tuez en arrière jusqu'au début de la ligne.

unix-line-discard (C-u)

Tuez en arrière du point au début de la ligne. Le texte tué est enregistré sur le kill-ring.

kill-whole-line

Tuez tous les personnages sur la ligne actuelle, peu importe où se trouve le point.

kill-word (M-d)

Tue du point à la fin du mot courant, ou si entre les mots, à la fin du mot suivant. Les limites des mots sont les mêmes que celles utilisées par forward-word.

backward-kill-word (M-Rubout)

Tuez le mot derrière le point. Les limites des mots sont les mêmes que celles utilisées par backward-word.

shell-kill-word

Tue du point à la fin du mot courant, ou si entre les mots, à la fin du mot suivant. Les limites des mots sont les mêmes que celles utilisées par shell-forward-word.

shell-backward-kill-word

Tuez le mot derrière le point. Les limites des mots sont les mêmes que celles utilisées par shell-backward-word.

unix-word-rubout (C-w)

Tuez le mot derrière le point, en utilisant un espace blanc comme limite de mot. Le texte tué est enregistré sur le kill-ring.

unix-filename-rubout

Tuez le mot derrière le point, en utilisant l'espace blanc et la barre oblique comme limites de mot. Le texte tué est enregistré sur le kill-ring.

delete-horizontal-space (M-\)

Supprimez tous les espaces et tabulations autour du point.

kill-region

Tue le texte dans la région actuelle.

copy-region-as-kill

Copiez le texte de la région dans le kill buffer.

copy-backward-word

Copiez le mot avant le point dans le kill buffer. Les limites des mots sont les mêmes que pour backward-word.

copy-forward-word

Copiez le mot suivant dans le kill buffer. Les limites des mots sont les mêmes que pour forward-word.

yank (C-y)

Tirez le haut de l'anneau d'arrêt dans le tampon au point.

yank-pop (M-y)

Faites pivoter l'anneau d'arrêt et tirez sur le nouveau haut. Ne fonctionne qu'après yank ou yank-pop.

Arguments numériques

digit-argument (M-0, M-1, ..., M--)

Ajoutez ce chiffre à l'argument qui s'accumule déjà ou commencez un nouvel argument. M-- commence un argument négatif.

universal-argument

C'est une autre façon de spécifier un argument. Si cette commande est suivie d'un ou plusieurs chiffres, éventuellement précédés d'un signe moins, ces chiffres définissent l'argument. Si la commande est suivie de chiffres, l'exécution de universal-argument termine à nouveau l'argument numérique, mais est sinon ignorée. En tant que cas particulier, si cette commande est immédiatement suivie d'un caractère qui n'est ni un chiffre ni un signe moins, le nombre d'arguments pour la commande suivante est multiplié par quatre. Le nombre d'arguments est initialement un, donc l'exécution de cette fonction la première fois fait que l'argument compte quatre, une deuxième fois fait que l'argument compte seize, et ainsi de suite.

Achèvement

complete (TAB)

Essayez d'effectuer l'achèvement sur le texte avant le point. Bash tente de terminer en traitant le texte comme une variable (si le texte commence par $), nom d'utilisateur (si le texte commence par ~), nom d'hôte (si le texte commence par @), ou commande (y compris les alias et les fonctions) à tour de rôle. Si aucune de celles-ci ne produit de correspondance, la complétion du nom de fichier est tentée.

possible-completions (M-?)

Énumérez les complétions possibles du texte avant le point.

insert-completions (M-*)

Insérez toutes les complétions du texte avant le point qui auraient été générées par possible-completions.

menu-complete

Similaire à compléter, mais remplace le mot à compléter par une seule correspondance de la liste des complétions possibles. Exécution répétée des étapes menu-complete dans la liste des complétions possibles, en insérant chaque correspondance à tour de rôle. À la fin de la liste des complétions, la cloche est sonnée (sous réserve du réglage du style de cloche) et le texte d'origine est restauré. Un argument de n déplace n positions vers l'avant dans la liste des correspondances ; un argument négatif peut être utilisé pour reculer dans la liste. Cette commande est destinée à être liée à TAB, mais n'est pas liée par défaut.

menu-complete-backward

Identique à menu-complete, mais recule dans la liste des complétions possibles, comme si menu-complete avait reçu un argument négatif. Cette commande est non liée par défaut.

delete-char-or-list

Supprime le caractère sous le curseur s'il n'est pas au début ou à la fin de la ligne (comme delete-char). Si à la fin de la ligne, se comporte de manière identique à possible-completions. Cette commande est non liée par défaut.

complete-filename (M-/)

Tentative de complétion du nom de fichier sur le texte avant le point.

possible-filename-completions (C-x /)

Listez les complétions possibles du texte avant le point, en le traitant comme un nom de fichier.

complete-username (M-~)

Essayez de compléter le texte avant le point, en le traitant comme un nom d'utilisateur.

possible-username-completions (C-x ~)

Énumérez les complétions possibles du texte avant le point, en le traitant comme un nom d'utilisateur.

complete-variable (M-$)

Tente de compléter le texte avant le point, en le traitant comme une variable shell.

possible-variable-completions (C-x $)

Listez les complétions possibles du texte avant le point, en le traitant comme une variable shell.

complete-hostname (M-@)

Tentez de compléter le texte avant le point, en le traitant comme un nom d'hôte.

possible-hostname-completions (C-x @)

Listez les complétions possibles du texte avant le point, en le traitant comme un nom d'hôte.

complete-command (M-!)

Tenter de compléter le texte avant le point, en le traitant comme un nom de commande. La complétion de la commande tente de faire correspondre le texte aux alias, aux mots réservés, aux fonctions du shell, aux commandes intégrées du shell et enfin aux noms de fichiers exécutables, dans cet ordre.

possible-command-completions (C-x !)

Listez les complétions possibles du texte avant le point, en le traitant comme un nom de commande.

dynamic-complete-history (M-TAB)

Tentative d'achèvement sur le texte avant le point, en comparant le texte aux lignes de la liste d'historique pour d'éventuelles correspondances d'achèvement.

dabbrev-expand

Tentative d'achèvement du menu sur le texte avant le point, en comparant le texte aux lignes de la liste d'historique pour d'éventuelles correspondances d'achèvement.

complete-into-braces (M-{)

Effectuez la complétion du nom de fichier et insérez la liste des complétions possibles entre accolades afin que la liste soit disponible pour le shell (voir Expansion des accolades ci-dessus).

Macros clavier

start-kbd-macro (C-x ( )

Commencez à enregistrer les caractères saisis dans la macro de clavier actuelle.

end-kbd-macro (C-x ) )

Arrêtez d'enregistrer les caractères saisis dans la macro de clavier actuelle et enregistrez la définition.

call-last-kbd-macro (C-x e)

Réexécutez la dernière macro clavier définie, en faisant apparaître les caractères de la macro comme s'ils avaient été saisis au clavier.

print-last-kbd-macro ()

Affiche la dernière macro clavier définie dans un format adapté au fichier inputrc.

Divers

re-read-init-file (C-x C-r)

Lisez le contenu du fichier inputrc et incorporez toutes les liaisons ou affectations de variables qui s'y trouvent.

abort (C-g)

Abandonnez la commande d'édition en cours et faites sonner la cloche du terminal (sous réserve du réglage du style de cloche).

do-lowercase-version (M-A, M-B, M-x, ...)

Si le caractère métafié x est en majuscule, exécutez la commande qui est liée au caractère métafié minuscule correspondant. Le comportement est indéfini si x est déjà en minuscule.

prefix-meta (ESC)

Métafier le prochain caractère tapé.

ESC f est équivalent à Meta-f.

undo (C-_, C-x C-u)

Annulation incrémentielle, mémorisée séparément pour chaque ligne.

revert-line (M-r)

Annuler toutes les modifications apportées à cette ligne. Cela revient à exécuter la commande undo suffisamment de fois pour ramener la ligne à son état initial.

tilde-expand (M-&)

Effectue une expansion de tilde sur le mot actuel.

set-mark (C-@, M-<space>)

Réglez la marque sur le point. Si un argument numérique est fourni, la marque est définie à cette position.

exchange-point-and-mark (C-x C-x)

Échangez le point avec la marque. La position actuelle du curseur est définie sur la position enregistrée et l'ancienne position du curseur est enregistrée en tant que marque.

character-search (C-])

Un caractère est lu et le point est déplacé vers l'occurrence suivante de ce caractère. Un décompte négatif recherche les occurrences précédentes.

character-search-backward (M-C-])

Un caractère est lu et le point est déplacé vers l'occurrence précédente de ce caractère. Un décompte négatif recherche les occurrences suivantes.

skip-csi-sequence

Lire suffisamment de caractères pour consommer une séquence multi-touche telle que celles définies pour des touches telles que Début et Fin. Ces séquences commencent par un indicateur de séquence de contrôle (CSI), généralement ESC-[. Si cette séquence est liée à "\[", les touches produisant de telles séquences n'auront aucun effet à moins d'être explicitement liées à une commande readline, au lieu d'insérer des caractères parasites dans le tampon d'édition. Ceci est non lié par défaut, mais généralement lié à ESC-[.

insert-comment (M-#)

Sans argument numérique, la valeur de la variable readline comment-begin est insérée au début de la ligne courante. Si un argument numérique est fourni, cette commande agit comme une bascule : si les caractères en début de ligne ne correspondent pas à la valeur de comment-begin, la valeur est insérée, sinon les caractères entre comment-begin sont supprimés du début de la ligne. Dans les deux cas, la ligne est acceptée comme si une nouvelle ligne avait été tapée. La valeur par défaut de comment-begin fait que cette commande transforme la ligne en cours en commentaire shell. Si un argument numérique entraîne la suppression du caractère de commentaire, la ligne sera exécutée par le shell.

glob-complete-word (M-g)

Le mot avant le point est traité comme un modèle pour l'expansion du nom de chemin, avec un astérisque implicitement ajouté. Ce modèle est utilisé pour générer une liste de noms de fichiers correspondants pour les complétions possibles.

glob-expand-word (C-x *)

Le mot avant le point est traité comme un modèle pour l'expansion du nom de chemin et la liste des noms de fichiers correspondants est insérée, remplaçant le mot. Si un argument numérique est fourni, un astérisque est ajouté avant l'expansion du nom de chemin.

glob-list-expansions (C-x g)

La liste des expansions qui auraient été générées par glob-expand-word s'affiche, et la ligne est redessinée. Si un argument numérique est fourni, un astérisque est ajouté avant l'expansion du nom de chemin.

dump-functions

Affiche toutes les fonctions et leurs raccourcis clavier dans le flux de sortie readline. Si un argument numérique est fourni, la sortie est formatée de manière à pouvoir faire partie d'un fichier inputrc.

dump-variables

Affiche toutes les variables readline réglables et leurs valeurs dans le flux de sortie readline. Si un argument numérique est fourni, la sortie est formatée de manière à pouvoir faire partie d'un fichier inputrc.

dump-macros

Affiche toutes les séquences de touches readline liées aux macros et les chaînes qu'elles génèrent. Si un argument numérique est fourni, la sortie est formatée de manière à pouvoir faire partie d'un fichier inputrc.

display-shell-version (C-x C-v)

Affiche les informations de version sur l'instance actuelle de bash.

Achèvement programmable

Lorsque l'achèvement de mot est tenté pour un argument d'une commande pour laquelle une spécification d'achèvement (une compspec) a été définie à l'aide de la fonction intégrée complete (voir SHELL BUILTIN COMMANDS< ci-dessous), les fonctionnalités de complétion programmables sont appelées.

Tout d'abord, le nom de la commande est identifié. Si le mot de commande est la chaîne vide (complétion tentée au début d'une ligne vide), toute spécification de configuration définie avec l'option -E pour compléter est utilisée. Si un compspec a été défini pour cette commande, le compspec est utilisé pour générer la liste des complètements possibles pour le mot. Si le mot de commande est un nom de chemin complet, une spécification de configuration pour le nom de chemin complet est recherchée en premier. Si aucune spécification de configuration n'est trouvée pour le nom de chemin complet, une tentative est faite pour trouver une spécification de configuration pour la partie suivant la barre oblique finale. Si ces recherches n'aboutissent pas à une spécification de configuration, toute spécification de configuration définie avec l'option -D pour compléter est utilisée par défaut. S'il n'y a pas de compspec par défaut, bash tente une expansion d'alias sur le mot de commande en dernier recours, et tente de trouver une compspec pour le mot de commande à partir de toute expansion réussie.

Une fois qu'un compspec a été trouvé, il est utilisé pour générer la liste des mots correspondants. Si une compspec n'est pas trouvée, la complétion par défaut bash comme décrit ci-dessus sous Completing est effectuée.

Tout d'abord, les actions spécifiées par le compspec sont utilisées. Seules les correspondances précédées du mot à compléter sont renvoyées. Lorsque l'option -f ou -d est utilisée pour la complétion de nom de fichier ou de nom de répertoire, la variable shell FIGNORE est utilisée pour filtrer les correspondances.

Toutes les complétions spécifiées par un modèle d'expansion de nom de chemin vers l'option -G sont générées ensuite. Les mots générés par le modèle n'ont pas besoin de correspondre au mot à compléter. La variable shell GLOBIGNORE n'est pas utilisée pour filtrer les correspondances, mais la variable FIGNORE est utilisée.

Ensuite, la chaîne spécifiée comme argument de l'option -W est prise en compte. La chaîne est d'abord fractionnée en utilisant les caractères de la variable spéciale IFS comme délimiteurs. La citation de Shell est honorée. Chaque mot est ensuite développé à l'aide d'un développement d'accolades, d'un développement de tilde, d'un développement de paramètres et de variables, d'une substitution de commande et d'un développement arithmétique, comme décrit ci-dessus sous EXPANSION. Les résultats sont divisés en utilisant les règles décrites ci-dessus sous Division de mots. Les résultats de l'expansion sont mis en correspondance avec le préfixe du mot en cours de complétion, et les mots correspondants deviennent les complétions possibles.

Une fois ces correspondances générées, toute fonction ou commande shell spécifiée avec les options -F et -C est invoquée. Lorsque la commande ou la fonction est invoquée, les variables COMP_LINE, COMP_POINT, COMP_KEY et COMP_TYPE reçoivent des valeurs telles que décrit ci-dessus sous Variables Shell. Si une fonction shell est invoquée, les variables COMP_WORDS et COMP_CWORD sont également définies. Lorsque la fonction ou la commande est invoquée, le premier argument ($1) est le nom de la commande dont les arguments sont complétés, le second argument ($2) est le mot en cours terminé, et le troisième argument ($3) est le mot précédant le mot en cours de complétion sur la ligne de commande actuelle. Aucun filtrage des complétions générées par rapport au mot en cours de complétion n'est effectué ; la fonction ou la commande a toute liberté pour générer les correspondances.

Toute fonction spécifiée avec -F est invoquée en premier. La fonction peut utiliser n'importe laquelle des fonctionnalités du shell, y compris la commande intégrée compgen décrite ci-dessous, pour générer les correspondances. Il doit mettre les complétions possibles dans la variable de tableau COMPREPLY, une par élément de tableau.

Ensuite, toute commande spécifiée avec l'option -C est invoquée dans un environnement équivalent à la substitution de commande. Il devrait imprimer une liste de complétions, une par ligne, sur la sortie standard. La barre oblique inverse peut être utilisée pour échapper à une nouvelle ligne, si nécessaire.

Une fois toutes les complétions possibles générées, tout filtre spécifié avec l'option -X est appliqué à la liste. Le filtre est un modèle tel qu'utilisé pour l'expansion des noms de chemin ; un & dans le modèle est remplacé par le texte du mot à compléter. Un & littéral peut être échappé avec une barre oblique inverse ; la barre oblique inverse est supprimée avant de tenter une correspondance. Toute complétion qui correspond au modèle sera supprimée de la liste. Un ! de tête annule le motif ; dans ce cas, toute complétion ne correspondant pas au motif sera supprimée. Si l'option de shell nocasematch est activée, la correspondance est effectuée sans tenir compte de la casse des caractères alphabétiques.

Enfin, tout préfixe et suffixe spécifié avec les options -P et -S sont ajoutés à chaque membre de la liste de complétion, et le résultat est renvoyé au code de complétion readline sous la forme la liste des réalisations possibles.

Si les actions précédemment appliquées ne génèrent aucune correspondance et que l'option -o dirnames a été fournie à complete lorsque la spécification de configuration a été définie, la complétion du nom de répertoire est tentée.

Si l'option -o plusdirs a été fournie à complete lors de la définition de la spécification de configuration, la complétion du nom de répertoire est tentée et toutes les correspondances sont ajoutées aux résultats des autres actions.

Par défaut, si un compspec est trouvé, tout ce qu'il génère est renvoyé au code de complétion comme l'ensemble complet des complétions possibles. Les complétions par défaut bash ne sont pas tentées et la valeur par défaut readline de complétion du nom de fichier est désactivée. Si l'option -o bashdefault a été fournie à complete lorsque la spécification de configuration a été définie, les complétions par défaut bash sont tentées si la spécification de configuration ne génère aucune correspondance. Si l'option -o default a été fournie à complete lorsque le compspec a été défini, la complétion par défaut de readline sera effectuée si le compspec (et, en cas de tentative, le défaut bash complétions) ne génèrent aucune correspondance.

Lorsqu'un compspec indique que la complétion du nom de répertoire est souhaitée, les fonctions de complétion programmables forcent readline à ajouter une barre oblique aux noms complétés qui sont des liens symboliques vers les répertoires, sous réserve de la valeur de la variable readline mark-directories, quel que soit le réglage de la variable readline mark-symlinked-directories.

Il existe un certain support pour modifier dynamiquement les complétions. Ceci est particulièrement utile lorsqu'il est utilisé en combinaison avec un complètement par défaut spécifié avec complete -D. Il est possible que les fonctions shell exécutées en tant que gestionnaires de complétion indiquent que la complétion doit être réessayée en renvoyant un état de sortie de 124. Si une fonction shell renvoie 124 et modifie la spécification associée à la commande sur laquelle la complétion est tentée (fournie comme premier argument lorsque la fonction est exécutée), la complétion programmable redémarre depuis le début, avec une tentative de trouver une nouvelle spécification de comp pour cette commande. Cela permet à un ensemble de complétions d'être construit dynamiquement au fur et à mesure que la complétion est tentée, plutôt que d'être chargées toutes en même temps.

Par exemple, en supposant qu'il existe une bibliothèque de compspecs, chacune conservée dans un fichier correspondant au nom de la commande, la fonction de complétion par défaut suivante chargerait dynamiquement les complétions :

_completion_loader()
{
. "/etc/bash_completion.d/$1.sh" >/dev/null 2>&1 && renvoie 124
}
complete -D -F _completion_loader -o bashdefault -o default

HISTOIRE

Lorsque l'option -o history de la commande intégrée set est activée, le shell donne accès à l'historique des commandes, la liste des commandes saisies précédemment. La valeur de la variable HISTSIZE est utilisée comme nombre de commandes à enregistrer dans une liste d'historique. Le texte des dernières commandes HISTSIZE (500 par défaut) est enregistré.

Le shell stocke chaque commande dans la liste d'historique avant le développement des paramètres et des variables (voir EXPANSION ci-dessus) mais après l'exécution du développement de l'historique, sous réserve des valeurs des variables du shell HISTIGNORE et HISTCONTROL.

Au démarrage, l'historique est initialisé à partir du fichier nommé par la variable HISTFILE (par défaut ~/.bash_history). Le fichier nommé par la valeur de HISTFILE est tronqué, si nécessaire, pour ne pas contenir plus que le nombre de lignes spécifié par la valeur de HISTFILESIZE. Si HISTFILESIZE n'est pas défini ou défini sur null, une valeur non numérique ou une valeur numérique inférieure à zéro, le fichier d'historique n'est pas tronqué.

Lorsque le fichier d'historique est lu, les lignes commençant par le caractère de commentaire d'historique suivi immédiatement d'un chiffre sont interprétées comme des horodatages pour la ligne d'historique suivante. Ces horodatages sont éventuellement affichés en fonction de la valeur de la variable HISTTIMEFORMAT. Lorsqu'un shell avec l'historique activé se termine, les dernières lignes $HISTSIZE sont copiées de la liste d'historique vers $HISTFILE.

Si l'option shell histappend est activée (voir la description de shopt sous COMMANDES INTÉGRÉES DU SHELL ci-dessous), les lignes sont ajoutées au fichier d'historique, sinon le fichier historique est écrasé. Si HISTFILE n'est pas défini, ou si le fichier d'historique n'est pas accessible en écriture, l'historique n'est pas enregistré. Si la variable HISTTIMEFORMAT est définie, les horodatages sont écrits dans le fichier d'historique, marqués du caractère de commentaire d'historique, afin qu'ils puissent être conservés dans les sessions shell. Cela utilise le caractère de commentaire d'historique pour distinguer les horodatages des autres lignes d'historique.

Après avoir enregistré l'historique, le fichier d'historique est tronqué pour ne pas contenir plus de HISTFILESIZE lignes. Si HISTFILESIZE n'est pas défini ou défini sur null, une valeur non numérique ou une valeur numérique inférieure à zéro, le fichier d'historique n'est pas tronqué.

La commande intégrée fc (voir COMMANDES INTÉGRÉES DU SHELL ci-dessous) peut être utilisée pour lister ou modifier et ré-exécuter une partie de la liste d'historique. La fonction intégrée history peut être utilisée pour afficher ou modifier la liste d'historique et manipuler le fichier d'historique. Lors de l'utilisation de l'édition de la ligne de commande, des commandes de recherche sont disponibles dans chaque mode d'édition permettant d'accéder à la liste d'historique.

Le shell permet de contrôler quelles commandes sont enregistrées dans la liste d'historique. Les variables HISTCONTROL et HISTIGNORE peuvent être définies pour que le shell n'enregistre qu'un sous-ensemble des commandes saisies. L'option de shell cmdhist, si elle est activée, oblige le shell à tenter d'enregistrer chaque ligne d'une commande multiligne dans la même entrée d'historique, en ajoutant des points-virgules si nécessaire pour préserver l'exactitude syntaxique. L'option de shell lithist oblige le shell à enregistrer la commande avec des retours à la ligne intégrés au lieu de points-virgules. Voir la description de l'intégré shopt ci-dessous sous COMMANDES INTÉGRÉES DU SHELL pour plus d'informations sur la définition et la désactivation des options du shell.

EXPANSION DE L'HISTOIRE

Le shell prend en charge une fonctionnalité d'extension de l'historique similaire à l'extension de l'historique dans csh. Cette section décrit les fonctionnalités de syntaxe disponibles. Cette fonctionnalité est activée par défaut pour les shells interactifs et peut être désactivée à l'aide de l'option +H de la commande intégrée set (voir SHELL BUILTIN COMMANDS dessous). Les shells non interactifs n'exécutent pas l'expansion de l'historique par défaut.

Les extensions d'historique introduisent des mots de la liste d'historique dans le flux d'entrée, ce qui facilite la répétition des commandes, l'insertion des arguments d'une commande précédente dans la ligne d'entrée actuelle ou la correction rapide des erreurs dans les commandes précédentes.

L'expansion de l'historique est effectuée immédiatement après la lecture d'une ligne complète, avant que le shell ne la décompose en mots, et est effectuée sur chaque ligne individuellement sans tenir compte des citations sur les lignes précédentes. Il se déroule en deux parties. La première consiste à déterminer quelle ligne de la liste d'historique utiliser lors de la substitution. La seconde consiste à sélectionner des portions de cette ligne pour les inclure dans la ligne actuelle. La ligne sélectionnée dans l'historique est l'événement, et les parties de cette ligne sur lesquelles on agit sont les mots. Divers modificateurs sont disponibles pour manipuler les mots sélectionnés. La ligne est divisée en mots de la même manière que lors de la lecture de l'entrée, de sorte que plusieurs mots séparés par des métacaractères entourés de guillemets sont considérés comme un seul mot. Les extensions d'historique sont introduites par l'apparition du caractère d'extension d'historique, qui est  !  par défaut. Seuls la barre oblique inverse ( \ ) et les guillemets simples peuvent citer le caractère d'extension de l'historique, mais le caractère d'extension de l'historique est également traité comme étant entre guillemets s'il précède immédiatement le guillemet double fermant dans une chaîne entre guillemets doubles.

Plusieurs caractères inhibent l'expansion de l'historique s'ils se trouvent immédiatement après le caractère d'expansion de l'historique, même s'il n'est pas entre guillemets : espace, tabulation, saut de ligne, retour chariot et =. Si l'option shell extglob est activée, ( empêchera également l'expansion.

Plusieurs options de shell configurables avec la commande intégrée shopt peuvent être utilisées pour personnaliser le comportement de l'expansion de l'historique. Si l'option shell histverify est activée (voir la description de l'intégré shopt ci-dessous) et que readline est utilisé, les substitutions d'historique ne sont pas immédiatement passé à l'analyseur shell. Au lieu de cela, la ligne développée est rechargée dans le tampon d'édition readline pour une modification ultérieure. Si readline est utilisé et que l'option shell hitreedit est activée, une substitution d'historique ayant échoué sera rechargée dans le tampon d'édition readline pour correction. L'option -p de la commande intégrée history peut être utilisée pour voir ce que fera une extension d'historique avant de l'utiliser. L'option -s de la commande intégrée history peut être utilisée pour ajouter des commandes à la fin de la liste d'historique sans les exécuter réellement, afin qu'elles soient disponibles pour un rappel ultérieur.

Le shell permet de contrôler les différents caractères utilisés par le mécanisme d'expansion de l'historique (voir la description des histchars ci-dessus sous Variables du shell). Le shell utilise le caractère de commentaire d'historique pour marquer les horodatages d'historique lors de l'écriture du fichier d'historique.

Désignateurs d'événement

Un indicateur d'événement est une référence à une entrée de ligne de commande dans la liste d'historique. À moins que la référence ne soit absolue, les événements sont relatifs à la position actuelle dans la liste d'historique.

!

Commencer une substitution d'historique, sauf s'il est suivi d'un vide, d'une nouvelle ligne, d'un retour chariot,=ou ((lorsque l'option shell extglob est activée à l'aide de shopt intégré).

!n

Reportez-vous à la ligne de commande n.

!-n

Reportez-vous à la commande actuelle moins n.

!!

Reportez-vous à la commande précédente. C'est un synonyme de `!-1'.

!string

Reportez-vous à la commande la plus récente précédant la position actuelle dans la liste de l'historique en commençant par string.

!?string[?]

Reportez-vous à la commande la plus récente précédant la position actuelle dans la liste d'historique contenant string. Le ? de fin peut être omis si la chaîne est immédiatement suivie d'une nouvelle ligne. Si chaîne est manquante, la chaîne de la recherche la plus récente est utilisée ; c'est une erreur s'il n'y a pas de chaîne de recherche précédente.

^string1^string2^

Remplacement rapide. Répétez la commande précédente en remplaçant chaîne1 par chaîne2. Équivalent à ``!!:s^chaîne1^chaîne2^'' (voir Modificateurs ci-dessous).

!#

La ligne de commande entière tapée jusqu'à présent.

Désignateurs de mots

Les désignateurs de mots sont utilisés pour sélectionner les mots souhaités à partir de l'événement. Un  : sépare la spécification d'événement de l'indicateur de mot. Il peut être omis si l'indicateur de mot commence par ^, $, *, - ou %. Les mots sont numérotés à partir du début de la ligne, le premier mot étant noté 0 (zéro). Les mots sont insérés dans la ligne courante séparés par des espaces simples.

0 (zero)

Le mot zéro. Pour le shell, c'est le mot de commande.

n

Le nème mot.

^

La première argumentation. C'est-à-dire le mot 1.

$

Le dernier mot. C'est généralement le dernier argument, mais il s'étendra jusqu'au mot zéro s'il n'y a qu'un seul mot dans la ligne.

%

Le premier mot correspondant au plus récent `?string?' recherche, si la chaîne de recherche commence par un caractère faisant partie d'un mot.

x-y

Une gamme de mots; `-y' est abrégé en `0-y'.

*

Tous les mots sauf le zéro. C'est un synonyme de `1-$'. Ce n'est pas une erreur d'utiliser * s'il n'y a qu'un seul mot dans l'événement ; la chaîne vide est renvoyée dans ce cas.

x*

Abrège x-$.

x-

Abrège x-$ comme x*, mais omet le dernier mot. Si x est manquant, la valeur par défaut est 0.

Si un indicateur de mot est fourni sans spécification d'événement, la commande précédente est utilisée comme événement.

Modificateurs

Après l'indicateur de mot facultatif, il peut apparaître une séquence d'un ou plusieurs des modificateurs suivants, chacun précédé d'un `:'. Ceux-ci modifient ou éditent le ou les mots sélectionnés dans l'événement historique.

h

Supprimez un composant de nom de fichier à la fin, ne laissant que l'en-tête.

t

Supprimez tous les composants de nom de fichier en tête, en laissant la queue.

r

Supprimez un suffixe de fin de la forme .xxx, en laissant le nom de base.

e

Supprimez tout sauf le suffixe de fin.

p

Imprimez la nouvelle commande mais ne l'exécutez pas.

q

Citez les mots substitués, en échappant aux substitutions ultérieures.

x

Citez les mots substitués comme avec q, mais décomposez les mots au niveau des espaces et des retours à la ligne. Les modificateurs q et x s'excluent mutuellement ; le dernier fourni est utilisé.

s/old/new/

Remplacez new par la première occurrence de old dans la ligne d'événement. N'importe quel caractère peut être utilisé comme délimiteur à la place de /. Le délimiteur final est facultatif s'il s'agit du dernier caractère de la ligne d'événement. Le délimiteur peut être entre guillemets en ancien et nouveau avec une seule barre oblique inverse. Si & apparaît dans nouveau, il est remplacé par ancien. Une seule barre oblique inverse citera le &. Si old est nul, il est défini sur le dernier old substitué, ou, si aucune substitution d'historique précédente n'a eu lieu, la dernière chaîne dans un !?chaîne[?] recherche. Si new est nul, chaque old correspondant est supprimé.

&

Répétez la substitution précédente.

g

Provoque l'application des modifications sur toute la ligne d'événement. Ceci est utilisé en conjonction avec `:s' (par exemple, `:gs/old/ nouveau/') ou `:&'. S'il est utilisé avec `:s', n'importe quel délimiteur peut être utilisé à la place de /, et le délimiteur final est facultatif s'il s'agit du dernier caractère de la ligne d'événement. Un a peut être utilisé comme synonyme de g.

G

Appliquez le modificateur `s' ou `&' suivant une fois à chaque mot de la ligne d'événement.

COMMANDES INTÉGRÉES DU SHELL

Sauf indication contraire, chaque commande intégrée documentée dans cette section comme acceptant les options précédées de - accepte -- pour signifier la fin des options. Les commandes intégrées  :, true, false et test/[ n'acceptent pas options et ne traitez pas -- spécialement. La sortie, déconnexion, retour, interruption, continuer, laisser Les commandes intégrées et shift acceptent et traitent les arguments commençant par - sans nécessiter --. D'autres commandes intégrées qui acceptent des arguments mais ne sont pas spécifiées comme options d'acceptation interprètent les arguments commençant par - comme des options invalides et nécessitent -- pour empêcher cette interprétation.

: [arguments]

Aucun effet; la commande ne fait rien d'autre que développer les arguments et effectuer les redirections spécifiées. Le statut de retour est zéro.

.  filename [arguments]
source filename [arguments]

Lit et exécute les commandes à partir de filename dans l'environnement shell actuel et renvoie l'état de sortie de la dernière commande exécutée à partir de filename. Si filename ne contient pas de barre oblique, les noms de fichiers dans PATH sont utilisés pour trouver le répertoire contenant filename. Le fichier recherché dans PATH n'a pas besoin d'être exécutable. Lorsque bash n'est pas en mode posix, le répertoire courant est recherché si aucun fichier n'est trouvé dans PATH. Si l'option sourcepath de la commande intégrée shopt est désactivée, le PATH n'est pas recherché. Si des arguments sont fournis, ils deviennent les paramètres de position lorsque filename est exécuté.

Sinon, les paramètres de position sont inchangés. Si l'option -T est activée, source hérite de tout déroutement sur DEBUG ; si ce n'est pas le cas, toute chaîne de déroutement DEBUG est enregistrée et restaurée autour de l'appel à source, et source annule le DEBUG trap pendant son exécution. Si -T n'est pas défini et que le fichier sourcé modifie l'interruption DEBUG, la nouvelle valeur est conservée lorsque source se termine. L'état de retour est l'état de la dernière commande sortie dans le script (0 si aucune commande n'est exécutée) et false si filename n'est pas trouvé ou ne peut pas être lu.

alias [-p] [name[=value] ...]

Alias sans argument ou avec l'option -p imprime la liste des alias sous la forme alias nom=<valeur sur la sortie standard. Lorsque des arguments sont fournis, un alias est défini pour chaque nom dont la valeur est donnée. Un espace de fin dans valeur entraîne la vérification du mot suivant pour la substitution d'alias lorsque l'alias est développé. Pour chaque nom de la liste d'arguments pour lequel aucune valeur n'est fournie, le nom et la valeur de l'alias sont imprimés. Alias renvoie vrai sauf si un nom est donné pour lequel aucun alias n'a été défini.

bg [jobspec ...]

Reprendre chaque travail suspendu jobspec en arrière-plan, comme s'il avait été démarré avec &. Si jobspec n'est pas présent, la notion du shell de job courant est utilisée. bg jobspec renvoie 0 sauf si exécuté lorsque le contrôle des travaux est désactivé ou, lorsqu'il est exécuté avec le contrôle des travaux activé, tout jobspec spécifié n'a pas été trouvé ou a été démarré sans contrôle du travail.

bind [-m keymap] [-lpsvPSVX]
bind [-m keymap] [-q function] [-u function] [-r keyseq]
bind [-m keymap] -f filename
bind [-m keymap] -x keyseq:shell-command
bind [-m keymap] keyseq:function-name
bind [-m keymap] keyseq:readline-command

Affichez les liaisons de touches et de fonctions readline actuelles, liez une séquence de touches à une fonction ou macro readline, ou définissez une variable readline. Chaque argument non optionnel est une commande telle qu'elle apparaîtrait dans .inputrc, mais chaque liaison ou commande doit être passée comme un argument séparé ; par exemple, '"\C-x\C-r": re-read-init-file'. Les options, si elles sont fournies, ont les significations suivantes :

-m keymap

Utilisez keymap comme keymap à affecter par les liaisons suivantes. Les noms de keymap acceptables sont emacs, emacs-standard, emacs-meta, emacs-ctlx, vi, vi-move, vi-command et vi-insert. vi est équivalent à vi-command (vi-move est aussi un synonyme) ; emacs est équivalent à emacs-standard.

-l

Listez les noms de toutes les fonctions readline.

-p

Affichez les noms et les liaisons des fonctions readline de manière à ce qu'ils puissent être relus.

-P

Répertorier les noms et liaisons des fonctions readline actuelles.

-s

Affichez les séquences de touches readline liées aux macros et les chaînes qu'elles génèrent de manière à pouvoir les relire.

-S

Affichez les séquences de touches readline liées aux macros et les chaînes qu'elles génèrent.

-v

Affichez les noms et les valeurs des variables readline de manière à ce qu'elles puissent être relues.

-V

Répertorier les noms et les valeurs des variables readline actuelles.

-f filename

Lire les raccourcis clavier de filename.

-q function

Requête sur les touches qui invoquent la fonction nommée.

-u function

Dissocie toutes les clés liées à la fonction nommée.

-r keyseq

Supprimez toute liaison actuelle pour keyseq.

-x keyseq:shell-command

Provoque l'exécution de shell-command chaque fois que keyseq est saisi. Lorsque la commande shell est exécutée, le shell définit la variable READLINE_LINE sur le contenu du tampon de ligne readline et le READLINE_POINT et READLINE_MARK à l'emplacement actuel du point d'insertion et du point d'insertion enregistré (la marque), respectivement.

Si la commande exécutée modifie la valeur de l'un des éléments READLINE_LINE, READLINE_POINT ou READLINE_MARK, ces nouvelles valeurs seront reflétées dans l'état d'édition.

-X

Répertorier toutes les séquences de touches liées aux commandes shell et les commandes associées dans un format pouvant être réutilisé en entrée.

La valeur de retour est 0 sauf si une option non reconnue est donnée ou si une erreur s'est produite.

break [n]

Sortez d'une boucle for, while, jusqu'à ou select. Si n est spécifié, divisez n niveaux. n doit être ≥ 1. Si n est supérieur au nombre de boucles englobantes, toutes les boucles englobantes sont quittées. La valeur de retour est 0 sauf si n n'est pas supérieur ou égal à 1.

builtin shell-builtin [arguments]

Exécute le shell spécifié, en lui transmettant des arguments, et renvoie son état de sortie. Ceci est utile lors de la définition d'une fonction dont le nom est le même qu'une commande intégrée du shell, en conservant la fonctionnalité de la commande intégrée dans la fonction. La commande intégrée cd est généralement redéfinie de cette façon. Le statut de retour est faux si shell-builtin n'est pas une commande shell intégrée.

caller [expr]

Renvoie le contexte de tout appel de sous-programme actif (une fonction shell ou un script exécuté avec les commandes intégrées . ou source). Sans expr, caller affiche le numéro de ligne et le nom du fichier source de l'appel de sous-programme en cours. Si un entier non négatif est fourni sous la forme expr, caller affiche le numéro de ligne, le nom du sous-programme et le fichier source correspondant à cette position dans la pile d'appels d'exécution en cours. Ces informations supplémentaires peuvent être utilisées, par exemple, pour imprimer une trace de pile. L'image courante est l'image 0. La valeur de retour est 0 sauf si le shell n'exécute pas d'appel de sous-programme ou si expr ne correspond pas à une position valide dans la pile des appels.

cd [-L|[-P [-e]] [-@]] [dir]

Remplacez le répertoire courant par dir. si dir n'est pas fourni, la valeur de la variable shell HOME est la valeur par défaut. Tous les arguments supplémentaires suivant dir sont ignorés. La variable CDPATH définit le chemin de recherche du répertoire contenant dir : chaque nom de répertoire dans CDPATH est recherché dir .

Les noms de répertoire alternatifs dans CDPATH sont séparés par deux-points (:). Un nom de répertoire nul dans CDPATH est le même que le répertoire courant, c'est-à-dire ``.''. Si dir commence par une barre oblique (/), alors CDPATH n'est pas utilisé. L'option -P oblige cd à utiliser la structure de répertoire physique en résolvant les liens symboliques lors de la traversée de dir et avant de traiter les instances de .. dans répertoire (voir aussi l'option -P de la commande intégrée set) ; l'option -L force les liens symboliques à être suivis en résolvant le lien après le traitement des instances de .. dans dir.

Si .. apparaît dans dir, il est traité en supprimant le composant de nom de chemin immédiatement précédent de dir, en le ramenant à une barre oblique ou au début de <répertoire. Si l'option -e est fournie avec -P, et que le répertoire de travail actuel ne peut pas être déterminé avec succès après un changement de répertoire réussi, cd renverra un statut d'échec. Sur les systèmes qui le supportent, l'option -@ présente les attributs étendus associés à un fichier sous forme de répertoire.

Un argument de - est converti en $OLDPWD avant la tentative de changement de répertoire. Si un nom de répertoire non vide de CDPATH est utilisé, ou si - est le premier argument, et que le changement de répertoire réussit, le chemin d'accès absolu du nouveau répertoire de travail est écrit sur la sortie standard. La valeur de retour est true si le répertoire a été modifié avec succès ; faux sinon.

command [-pVv] command [arg ...]

Exécutez command avec args supprimant la recherche normale de la fonction shell. Seules les commandes intégrées ou les commandes trouvées dans le PATH sont exécutées. Si l'option -p est donnée, la recherche de commande est effectuée en utilisant une valeur par défaut pour PATH qui est garantie de trouver tous les standards utilitaires. Si l'option -V ou -v est fournie, une description de la commande est imprimée.

L'option -v provoque l'affichage d'un seul mot indiquant la commande ou le nom de fichier utilisé pour invoquer la commande ; l'option -V produit une description plus détaillée. Si l'option -V ou -v est fournie, le statut de sortie est 0 si la commande a été trouvée, et 1 sinon. Si aucune option n'est fournie et qu'une erreur s'est produite ou que la commande est introuvable, l'état de sortie est 127. Sinon, l'état de sortie de la commande intégrée commande est l'état de sortie de <commande.

compgen [option] [word]

Génère des correspondances de complétion possibles pour mot selon les options, qui peuvent être n'importe quelle option acceptée par la fonction intégrée complete à l'exception de -p et -r, et écrivez les correspondances sur la sortie standard. Lors de l'utilisation des options -F ou -C, les différentes variables shell définies par les fonctions de complétion programmables, bien que disponibles, n'auront pas de valeurs utiles.

Les correspondances seront générées de la même manière que si le code de complétion programmable les avait générées directement à partir d'une spécification de complétion avec les mêmes drapeaux. Si mot est spécifié, seules les complétions correspondant à mot seront affichées.

La valeur de retour est true sauf si une option non valide est fournie ou si aucune correspondance n'a été générée.

complete [-abcdefgjksuv] [-o comp-option] [-DEI] [-A action] [-G globpat] [-W wordlist]
[-F function] [-C command] [-X filterpat] [-P prefix] [-S suffix] name [name ...]
complete -pr [-DEI] [name ...]

Spécifiez comment les arguments de chaque nom doivent être complétés. Si l'option -p est fournie, ou si aucune option n'est fournie, les spécifications de complétion existantes sont imprimées d'une manière qui permet de les réutiliser comme entrée. L'option -r supprime une spécification de complétion pour chaque nom, ou, si aucun nom n'est fourni, toutes les spécifications de complétion. L'option -D indique que les autres options et actions fournies doivent s'appliquer à l'achèvement de la commande ``default'' ; c'est-à-dire, l'achèvement tenté sur une commande pour laquelle aucun achèvement n'a été précédemment défini. L'option -E indique que les autres options et actions fournies doivent s'appliquer à l'achèvement de la commande ``empty'' ; c'est-à-dire, l'achèvement tenté sur une ligne vide. L'option -I indique que les autres options et actions fournies doivent s'appliquer à l'achèvement sur le mot initial de non-affectation sur la ligne, ou après un délimiteur de commande tel que ; ou |, qui est généralement l'achèvement du nom de la commande. Si plusieurs options sont fournies, l'option -D a priorité sur -E, et les deux ont priorité sur -I. Si l'un des arguments -D, -E ou -I est fourni, tous les autres arguments nom sont ignorés ; ces complétions ne s'appliquent qu'au cas spécifié par l'option.

Le processus d'application de ces spécifications de complétion lorsque la complétion de mots est tentée est décrit ci-dessus sous Complétion programmable.

Les autres options, si elles sont spécifiées, ont les significations suivantes. Les arguments des options -G, -W et -X (et, si nécessaire, les options -P > et les options -S) doivent être entre guillemets pour les protéger de l'expansion avant que la commande intégrée complete ne soit invoquée.

-o comp-option

Le comp-option contrôle plusieurs aspects du comportement de la compspec au-delà de la simple génération de complétions. comp-option peut être l'un des éléments suivants :

bashdefault

Effectuez le reste des complétions bash par défaut si la spécification de configuration ne génère aucune correspondance.

default

Utilisez la complétion de nom de fichier par défaut de readline si le compspec ne génère aucune correspondance.

dirnames

Effectuez l'achèvement du nom de répertoire si le compspec ne génère aucune correspondance.

filenames

Dites à readline que le compspec génère des noms de fichiers, afin qu'il puisse effectuer n'importe quel traitement spécifique aux noms de fichiers (comme ajouter une barre oblique aux noms de répertoires, citer des caractères spéciaux ou supprimer les espaces de fin). Destiné à être utilisé avec des fonctions shell.

noquote

Indiquez à readline de ne pas citer les mots complétés s'il s'agit de noms de fichiers (la citation des noms de fichiers est la valeur par défaut).

nosort

Dites à readline de ne pas trier la liste des complétions possibles par ordre alphabétique.

nospace

Dites à readline de ne pas ajouter d'espace (valeur par défaut) aux mots complétés à la fin de la ligne.

plusdirs

Une fois que toutes les correspondances définies par la spécification de configuration sont générées, la complétion du nom de répertoire est tentée et toutes les correspondances sont ajoutées aux résultats des autres actions.

-A action

L'action peut être l'une des suivantes pour générer une liste de réalisations possibles :

alias

Noms d'emprunt. Peut également être spécifié sous la forme -a.

arrayvar

Noms des variables de tableau.

binding

Readline noms de liaison de clé.

builtin

Noms des commandes intégrées du shell. Peut également être spécifié sous la forme -b.

command

Noms de commande. Peut également être spécifié sous la forme -c.

directory

Noms de répertoire. Peut également être spécifié sous la forme -d.

disabled

Noms des commandes intégrées du shell désactivées.

enabled

Noms des commandes intégrées du shell activées.

export

Noms des variables shell exportées. Peut également être spécifié sous la forme -e.

file

Noms de fichiers. Peut également être spécifié sous la forme -f.

function

Noms des fonctions shell.

group

Noms de groupe. Peut également être spécifié sous la forme -g.

helptopic

Rubriques d'aide telles qu'elles sont acceptées par l'intégration help.

hostname

Noms d'hôte, extraits du fichier spécifié par la variable shell HOSTFILE.

job

Noms des travaux, si le contrôle des travaux est actif. Peut également être spécifié sous la forme -j.

keyword

Shell mots réservés. Peut également être spécifié sous la forme -k.

running

Noms des travaux en cours d'exécution, si le contrôle des travaux est actif.

service

Noms des services. Peut également être spécifié sous la forme -s.

setopt

Arguments valides pour l'option -o de la commande intégrée set.

shopt

Les noms d'options du shell tels qu'acceptés par la commande intégrée shopt.

signal

Noms des signaux.

stopped

Noms des travaux arrêtés, si le contrôle des travaux est actif.

user

Noms d'utilisateur. Peut également être spécifié sous la forme -u.

variable

Noms de toutes les variables shell. Peut également être spécifié sous la forme -v.

-C command

La commande est exécutée dans un environnement de sous-shell et sa sortie est utilisée comme complétions possibles.

-F function

La fonction shell fonction est exécutée dans l'environnement shell courant. Lorsque la fonction est exécutée, le premier argument ($1) est le nom de la commande dont les arguments sont en cours de complétion, le second argument ($2) est le mot en cours de complétion, et le troisième argument ($3) est le mot précédant le mot à compléter sur la ligne de commande actuelle. Lorsqu'il se termine, les complétions possibles sont récupérées à partir de la valeur de la variable de tableau COMPREPLY.

-G globpat

Le modèle d'expansion de nom de chemin globpat est développé pour générer les complètements possibles.

-P prefix

Le préfixe est ajouté au début de chaque complétion possible après que toutes les autres options ont été appliquées.

-S suffix

suffixe est ajouté à chaque complétion possible après que toutes les autres options ont été appliquées.

-W wordlist

La liste de mots est divisée en utilisant les caractères de la variable spéciale IFS comme délimiteurs, et chaque mot résultant est développé. Les guillemets shell sont respectés dans wordlist, afin de fournir un mécanisme permettant aux mots de contenir des métacaractères shell ou des caractères dans la valeur de IFS. Les complétions possibles sont les membres de la liste résultante qui correspondent au mot en cours de complétion.

-X filterpat

filterpat est un modèle utilisé pour l'expansion des noms de chemin. Il est appliqué à la liste des complétions possibles générées par les options et arguments précédents, et chaque complétion correspondant à filterpat est supprimée de la liste. Un ! de tête dans filterpat annule le modèle ; dans ce cas, tout complètement ne correspondant pas à filterpat est supprimé.

La valeur de retour est true sauf si une option invalide est fournie, une option autre que -p ou -r est fournie sans argument name, un une tentative est faite pour supprimer une spécification de complétion pour un nom pour lequel aucune spécification n'existe, ou une erreur se produit lors de l'ajout d'une spécification de complétion.

compopt [-o option] [-DEI] [+o option] [name]

Modifiez les options de complétion pour chaque nom en fonction des options, ou pour la complétion en cours d'exécution si aucun nom n'est fourni. Si aucune option n'est donnée, affiche les options de complétion pour chaque nom ou la complétion actuelle. Les valeurs possibles de option sont celles valides pour la commande intégrée complete décrite ci-dessus. L'option -D indique que les autres options fournies doivent s'appliquer à la complétion de la commande ``default'' ; c'est-à-dire, l'achèvement tenté sur une commande pour laquelle aucun achèvement n'a été précédemment défini. L'option -E indique que les autres options fournies doivent s'appliquer à la complétion de la commande ``empty'' ; c'est-à-dire, l'achèvement tenté sur une ligne vide. L'option -I indique que les autres options fournies doivent s'appliquer à l'achèvement sur le mot initial de non-affectation sur la ligne, ou après un délimiteur de commande tel que ; ou |, qui est généralement l'achèvement du nom de la commande.

La valeur de retour est true sauf si une option non valide est fournie, si une tentative est faite pour modifier les options d'un nom pour lequel aucune spécification d'achèvement n'existe ou si une erreur de sortie se produit.

continue [n]

Reprendre la prochaine itération de la boucle englobante for, while, until ou select. Si n est spécifié, reprendre à la nième boucle englobante. n doit être ≥ 1. Si n est supérieur au nombre de boucles englobantes, la dernière boucle englobante (la boucle ``top-level'') est reprise. La valeur de retour est 0 sauf si n n'est pas supérieur ou égal à 1.

declare [-aAfFgiIlnrtux] [-p] [name[=value] ...]
typeset [-aAfFgiIlnrtux] [-p] [name[=value] ...]

Déclarez des variables et/ou attribuez-leur des attributs. Si aucun nom n'est donné, alors affichez les valeurs des variables. L'option -p affichera les attributs et les valeurs de chaque nom. Lorsque -p est utilisé avec les arguments nom, les options supplémentaires, autres que -f et -F, sont ignorées . Lorsque -p est fourni sans arguments name, il affichera les attributs et les valeurs de toutes les variables ayant les attributs spécifiés par les options supplémentaires. Si aucune autre option n'est fournie avec -p, declare affichera les attributs et les valeurs de toutes les variables shell. L'option -f limitera l'affichage aux fonctions du shell. L'option -F inhibe l'affichage des définitions de fonctions ; seuls le nom et les attributs de la fonction sont imprimés. Si l'option shell extdebug est activée à l'aide de shopt, le nom du fichier source et le numéro de ligne où chaque nom est défini sont également affichés. L'option -F implique -f. L'option -g force la création ou la modification de variables au niveau global, même lorsque declare est exécuté dans une fonction shell. Elle est ignorée dans tous les autres cas. L'option -I fait que les variables locales héritent des attributs (à l'exception de l'attribut nameref) et de la valeur de toute variable existante avec le même nom à un portée environnante. S'il n'y a pas de variable existante, la variable locale est initialement non définie. Les options suivantes peuvent être utilisées pour restreindre la sortie aux variables avec l'attribut spécifié ou pour donner des attributs aux variables :

-a

Chaque nom est une variable de tableau indexée (voir Tableaux ci-dessus).

-A

Chaque nom est une variable de tableau associatif (voir Tableaux ci-dessus).

-f

N'utilisez que des noms de fonction.

-i

La variable est traitée comme un entier ; l'évaluation arithmétique (voir ÉVALUATION ARITHMÉTIQUE ci-dessus) est effectuée lorsqu'une valeur est attribuée à la variable.

-l

Lorsqu'une valeur est affectée à la variable, tous les caractères majuscules sont convertis en minuscules. L'attribut majuscule est désactivé.

-n

Donnez à chaque name l'attribut nameref, en faisant une référence de nom à une autre variable. Cette autre variable est définie par la valeur de nom. Toutes les références, affectations et modifications d'attributs à nom, à l'exception de celles utilisant ou modifiant l'attribut -n lui-même, sont effectuées sur la variable référencée par nom > la valeur. L'attribut nameref ne peut pas être appliqué aux variables de tableau.

-r

Faites en sorte que les noms soient en lecture seule. Ces noms ne peuvent alors pas être affectés de valeurs par des instructions d'affectation ultérieures ou supprimés.

-t

Donnez à chaque nom l'attribut trace. Les fonctions tracées héritent des interruptions DEBUG et RETURN du shell appelant. L'attribut trace n'a pas de signification particulière pour les variables.

-u

Lorsqu'une valeur est affectée à la variable, tous les caractères minuscules sont convertis en majuscules. L'attribut minuscule est désactivé.

-x

Marquez les noms pour les exporter vers les commandes suivantes via l'environnement.

L'utilisation de `+' au lieu de `-' désactive l'attribut à la place, à l'exception que +a et +A ne peuvent pas être utilisés pour détruire des variables de tableau et +r ne supprimera pas l'attribut readonly. Lorsqu'ils sont utilisés dans une fonction, declare et typeset rendent chaque nom local, comme avec la commande local, à moins que le L'option -g est fournie. Si un nom de variable est suivi de =valeur, la valeur de la variable est définie sur valeur. Lorsque vous utilisez -a ou -A et la syntaxe d'affectation composée pour créer des variables de tableau, les attributs supplémentaires ne prennent effet qu'aux affectations suivantes. La valeur de retour est 0 sauf si une option invalide est rencontrée, une tentative est faite pour définir une fonction en utilisant ``-f foo=bar'', une tentative est faite pour assigner une valeur à une variable en lecture seule, une tentative est faite pour assigner une valeur à une variable de tableau sans utiliser la syntaxe d'affectation composée (voir Tableaux ci-dessus), l'un des noms n'est pas un nom de variable shell valide, une tentative est faite pour tourner off readonly status pour une variable readonly, une tentative est faite pour désactiver l'état tableau pour une variable tableau, ou une tentative est faite pour afficher une fonction inexistante avec -f.

dirs [-clpv] [+n] [-n]

Sans options, affiche la liste des répertoires actuellement mémorisés. L'affichage par défaut est sur une seule ligne avec des noms de répertoires séparés par des espaces. Les répertoires sont ajoutés à la liste avec la commande pushd ; la commande popd supprime des entrées de la liste. Le répertoire courant est toujours le premier répertoire de la pile.

-c

Efface la pile de répertoires en supprimant toutes les entrées.

-l

Produit une liste en utilisant les noms de chemin complets ; le format de liste par défaut utilise un tilde pour désigner le répertoire personnel.

-p

Imprimez la pile de répertoires avec une entrée par ligne.

-v

Imprimez la pile de répertoires avec une entrée par ligne, en préfixant chaque entrée avec son index dans la pile.

+n

Affiche la nième entrée en partant de la gauche de la liste indiquée par dirs lorsqu'elle est invoquée sans options, en commençant par zéro.

-n

Affiche la nième entrée en partant de la droite de la liste indiquée par dirs lorsqu'elle est invoquée sans options, en commençant par zéro.

La valeur de retour est 0 sauf si une option non valide est fournie ou n index au-delà de la fin de la pile de répertoires.

disown [-ar] [-h] [jobspec ... | pid ... ]

Sans options, supprimez chaque jobspec du tableau des jobs actifs. Si jobspec n'est pas présent, et ni l'option -a ni l'option -r n'est fournie, le job actuel est utilisé. Si l'option -h est donnée, chaque jobspec n'est pas supprimé de la table, mais est marqué de manière à ce que SIGHUP ne soit pas envoyé au travail si le shell reçoit un SIGHUP. Si aucun jobspec n'est fourni, l'option -a signifie supprimer ou marquer tous les travaux ; l'option -r sans argument jobspec limite l'opération aux tâches en cours d'exécution. La valeur de retour est 0 à moins qu'un jobspec ne spécifie pas un travail valide.

echo [-neE] [arg ...]

Sortez les arg, séparés par des espaces, suivis d'une nouvelle ligne. L'état de retour est 0 sauf si une erreur d'écriture se produit. Si -n est spécifié, la fin de ligne est supprimée. Si l'option -e est donnée, l'interprétation des caractères d'échappement suivants est activée. L'option -E désactive l'interprétation de ces caractères d'échappement, même sur les systèmes où ils sont interprétés par défaut. L'option shell xpg_echo peut être utilisée pour déterminer dynamiquement si oui ou non echo développe ces caractères d'échappement par défaut. echo n'interprète pas -- comme signifiant la fin des options. echo interprète les séquences d'échappement suivantes :

\a

alerte (cloche)

\b

retour arrière

\c

supprimer toute autre sortie

\e
\E

un caractère d'échappement

\f

saut de formulaire

\n

nouvelle ligne

\r

retour chariot

\t

tabulation horizontale

\v

onglet vertical

\\

barre oblique inverse

\0nnn

le caractère huit bits dont la valeur est la valeur octale nnn (zéro à trois chiffres octaux)

\xHH

le caractère huit bits dont la valeur est la valeur hexadécimale HH (un ou deux chiffres hexadécimaux)

\uHHHH

le caractère Unicode (ISO/IEC 10646) dont la valeur est la valeur hexadécimale HHHH (un à quatre chiffres hexadécimaux)

\UHHHHHHHH

le caractère Unicode (ISO/IEC 10646) dont la valeur est la valeur hexadécimale HHHHHHHH (un à huit chiffres hexadécimaux)

enable [-a] [-dnps] [-f filename] [name ...]

Activer et désactiver les commandes shell intégrées. La désactivation d'une commande intégrée permet d'exécuter une commande de disque portant le même nom qu'une commande intégrée du shell sans spécifier de chemin d'accès complet, même si le shell recherche normalement les commandes intégrées avant les commandes de disque. Si -n est utilisé, chaque nom est désactivé ; sinon, les noms sont activés. Par exemple, pour utiliser le binaire test trouvé via le PATH au lieu de la version intégrée du shell, exécutez ``enable -n test''. L'option -f signifie charger la nouvelle commande intégrée name à partir de l'objet partagé filename, sur les systèmes prenant en charge le chargement dynamique. L'option -d supprimera une fonction intégrée précédemment chargée avec -f. Si aucun argument nom n'est donné, ou si l'option -p est fournie, une liste des commandes internes du shell est affichée. Sans autre argument d'option, la liste se compose de toutes les commandes intégrées du shell activées. Si -n est fourni, seules les commandes intégrées désactivées sont affichées. Si -a est fourni, la liste imprimée comprend toutes les commandes intégrées, avec une indication indiquant si chacune est activée ou non. Si -s est fourni, la sortie est limitée aux commandes intégrées POSIX special. La valeur de retour est 0 sauf si un nom n'est pas une commande intégrée du shell ou s'il y a une erreur lors du chargement d'une nouvelle commande intégrée à partir d'un objet partagé.

eval [arg ...]

Les arg sont lus et concaténés en une seule commande. Cette commande est ensuite lue et exécutée par le shell, et son état de sortie est renvoyé sous la forme de la valeur de eval. S'il n'y a pas d'args, ou uniquement des arguments nuls, eval renvoie 0.

exec [-cl] [-a name] [command [arguments]]

Si command est spécifié, il remplace le shell. Aucun nouveau processus n'est créé. Les arguments deviennent les arguments de la commande. Si l'option -l est fournie, le shell place un tiret au début du zéroième argument passé à la commande. C'est ce que fait login(1). L'option -c provoque l'exécution de la commande avec un environnement vide. Si -a est fourni, le shell passe nom comme argument zéro à la commande exécutée. Si la commande ne peut pas être exécutée pour une raison quelconque, un shell non interactif se ferme, à moins que l'option de shell execfail ne soit activée. Dans ce cas, il renvoie un échec. Un shell interactif renvoie un échec si le fichier ne peut pas être exécuté. Un sous-shell se ferme inconditionnellement si exec échoue. Si la commande n'est pas spécifiée, toutes les redirections prennent effet dans le shell actuel et l'état de retour est 0. S'il y a une erreur de redirection, l'état de retour est 1.

exit [n]

Provoque la fermeture du shell avec le statut n. Si n est omis, l'état de sortie est celui de la dernière commande exécutée. Un trap sur EXIT est exécuté avant que le shell ne se termine.

export [-fn ] [name[=word]] ...
export -p

Les noms fournis sont marqués pour l'exportation automatique vers l'environnement des commandes exécutées ultérieurement. Si l'option -f est donnée, les noms font référence aux fonctions. Si aucun noms n'est donné, ou si l'option -p est fournie, une liste des noms de toutes les variables exportées est imprimée. L'option -n entraîne la suppression de la propriété d'exportation de chaque nom. Si un nom de variable est suivi de =mot, la valeur de la variable est définie sur mot. export renvoie un état de sortie de 0 sauf si une option non valide est rencontrée, l'un des noms n'est pas un nom de variable shell valide ou -f est fourni avec un nom qui n'est pas une fonction.

fc [-e ename] [-lnr] [first] [last]
fc -s [pat=rep] [cmd]

Le premier formulaire sélectionne une gamme de commandes de première à dernière dans la liste de l'historique et les affiche ou les édite et les réexécute. Premier et dernier peuvent être spécifiés comme une chaîne (pour localiser la dernière commande commençant par cette chaîne) ou comme un nombre (un index dans la liste d'historique, où un nombre négatif est utilisé comme décalage par rapport au numéro de commande actuel). Lors du listage, un premier ou un dernier de 0 est équivalent à -1 et -0 est équivalent à la commande actuelle (généralement la commande fc) ; sinon 0 équivaut à -1 et -0 n'est pas valide. Si last n'est pas spécifié, il est défini sur la commande actuelle pour le listage (de sorte que ``fc -l -10'' affiche les 10 dernières commandes) et sur first sinon. Si premier n'est pas spécifié, il est défini sur la commande précédente pour l'édition et -16 pour le listage.

L'option -n supprime les numéros de commande lors du listage. L'option -r inverse l'ordre des commandes. Si l'option -l est donnée, les commandes sont listées sur la sortie standard. Sinon, l'éditeur donné par ename est appelé sur un fichier contenant ces commandes. Si ename n'est pas donné, la valeur de la variable FCEDIT est utilisée, et la valeur de EDITOR si FCEDIT n'est pas défini. Si aucune variable n'est définie,  vi  est utilisé. Lorsque l'édition est terminée, les commandes éditées sont reprises et exécutées.

Dans la deuxième forme, la commande est ré-exécutée après que chaque instance de pat est remplacée par rep. Command est interprété de la même manière que first ci-dessus. Un alias utile à utiliser avec ceci est ``r="fc -s"'', de sorte que taper ``r cc'' exécute la dernière commande commençant par ``cc'' et taper ``r'' ré-exécute la dernière commande.

Si la première forme est utilisée, la valeur de retour est 0 sauf si une option non valide est rencontrée ou si first ou last spécifient des lignes d'historique hors plage. Si l'option -e est fournie, la valeur de retour est la valeur de la dernière commande exécutée ou un échec si une erreur survient avec le fichier temporaire de commandes. Si la deuxième forme est utilisée, le statut de retour est celui de la commande ré-exécutée, sauf si cmd ne spécifie pas une ligne d'historique valide, auquel cas fc renvoie un échec.

fg [jobspec]

Reprenez jobspec au premier plan et faites-en la tâche en cours. Si jobspec n'est pas présent, la notion du shell de job courant est utilisée. La valeur de retour est celle de la commande placée au premier plan, ou un échec si elle est exécutée lorsque le contrôle des tâches est désactivé ou, lorsqu'elle est exécutée avec le contrôle des tâches activé, si jobspec ne spécifie pas une tâche valide ou jobspec spécifie un travail qui a été démarré sans contrôle de travail.

getopts optstring name [arg ...]

getopts est utilisé par les procédures shell pour analyser les paramètres positionnels. optstring contient les caractères d'option à reconnaître ; si un caractère est suivi de deux-points, l'option est censée avoir un argument, qui doit en être séparé par un espace blanc. Les caractères deux-points et points d'interrogation ne peuvent pas être utilisés comme caractères d'option. Chaque fois qu'il est invoqué, getops place l'option suivante dans la variable shell nom, initialisant nom s'il n'existe pas, et l'index de le prochain argument à traiter dans la variable OPTIND.

OPTIND est initialisé à 1 chaque fois que le shell ou un script shell est appelé. Lorsqu'une option nécessite un argument, getopts place cet argument dans la variable

OPTARG. Le shell ne réinitialise pas OPTIND automatiquement ; il doit être réinitialisé manuellement entre plusieurs appels à getopts dans le même appel de shell si un nouvel ensemble de paramètres doit être utilisé.

Lorsque la fin des options est rencontrée, getopts se termine avec une valeur de retour supérieure à zéro.

OPTIND est défini sur l'index du premier argument non optionnel et nom est défini sur ?.

getopts analyse normalement les paramètres positionnels, mais si plus d'arguments sont fournis en tant que valeurs arg, getopts les analyse à la place.

getopts peut signaler des erreurs de deux manières. Si le premier caractère de optstring est un deux-points, le rapport d'erreur silencieux est utilisé. En fonctionnement normal, des messages de diagnostic sont imprimés lorsque des options non valides ou des arguments d'option manquants sont rencontrés. Si la variable OPTERR est définie sur 0, aucun message d'erreur ne sera affiché, même si le premier caractère de optstring n'est pas un deux-points.

Si une option invalide est vue, getopts place ? dans nom et, s'il n'est pas silencieux, affiche un message d'erreur et annule OPTARG. Si getopts est silencieux, le caractère d'option trouvé est placé dans OPTARG et aucun message de diagnostic n'est imprimé.

Si un argument requis n'est pas trouvé et que getopts n'est pas silencieux, un point d'interrogation ( ? ) est placé dans nom, OPTARG n'est pas défini et un message de diagnostic est imprimé. Si getopts est silencieux, alors deux-points (  : ) sont placés dans nom et OPTARG est défini sur l'option personnage trouvé.

getopts renvoie true si une option, spécifiée ou non, est trouvée. Elle renvoie false si la fin des options est rencontrée ou si une erreur se produit.

hash [-lr] [-p filename] [-dt] [name]

Chaque fois que hash est invoqué, le chemin d'accès complet de la commande name est déterminé en recherchant les répertoires dans ` PATH et mémorisé. Tout nom de chemin précédemment mémorisé est ignoré. Si l'option -p est fournie, aucune recherche de chemin n'est effectuée et filename est utilisé comme nom de fichier complet de la commande. L'option -r force le shell à oublier tous les emplacements mémorisés. L'option -d fait que le shell oublie l'emplacement mémorisé de chaque nom. Si l'option -t est fournie, le chemin d'accès complet auquel chaque nom correspond est imprimé. Si plusieurs arguments nom sont fournis avec -t, le nom est imprimé avant le nom de chemin complet haché. L'option -l entraîne l'affichage de la sortie dans un format qui peut être réutilisé comme entrée. Si aucun argument n'est donné, ou si seul -l est fourni, les informations sur les commandes mémorisées sont affichées. Le statut de retour est vrai sauf si un nom n'est pas trouvé ou si une option non valide est fournie.

help [-dms] [pattern]

Afficher des informations utiles sur les commandes intégrées. Si pattern est spécifié, help donne une aide détaillée sur toutes les commandes correspondant à pattern ; sinon, l'aide pour toutes les commandes intégrées et les structures de contrôle du shell est affichée.

-d

Afficher une courte description de chaque motif

-m

Afficher la description de chaque motif dans un format de type page de manuel

-s

Afficher uniquement un court résumé d'utilisation pour chaque modèle

Le statut de retour est 0 sauf si aucune commande ne correspond à motif.

history [n]
history -c
history -d offset
history -d start-end
history -anrw [filename]
history -p arg [arg ...]
history -s arg [arg ...]

Sans option, affichez la liste de l'historique des commandes avec les numéros de ligne. Les lignes répertoriées avec un * ont été modifiées. Un argument de n répertorie uniquement les n dernières lignes. Si la variable shell HISTTIMEFORMAT est définie et non nulle, elle est utilisée comme chaîne de format pour strftime(3) pour afficher l'horodatage associé avec chaque entrée d'historique affichée. Aucun espace intermédiaire n'est imprimé entre l'horodatage formaté et la ligne d'historique. Si filename est fourni, il est utilisé comme nom du fichier historique ; sinon, la valeur de HISTFILE est utilisée. Les options, si elles sont fournies, ont les significations suivantes :

-c

Effacez la liste de l'historique en supprimant toutes les entrées.

-d offset

Supprimez l'entrée d'historique à la position décalage. Si décalage est négatif, il est interprété comme relatif à un supérieur à la dernière position de l'historique, donc les indices négatifs comptent à rebours à partir de la fin de l'historique, et un index de -1 fait référence à la commande history -d actuelle.

-d start-end

Supprimez les entrées d'historique entre les positions début et fin, inclus. Les valeurs positives et négatives pour start et end sont interprétées comme décrit ci-dessus.

-a

Ajoutez les ``nouvelles'' lignes d'historique au fichier d'historique. Ce sont des lignes d'historique saisies depuis le début de la session bash en cours, mais pas déjà ajoutées au fichier d'historique.

-n

Lit les lignes d'historique qui n'ont pas encore été lues à partir du fichier d'historique dans la liste d'historique actuelle. Ce sont des lignes ajoutées au fichier d'historique depuis le début de la session bash en cours.

-r

Lisez le contenu du fichier d'historique et ajoutez-le à la liste d'historique actuelle.

-w

Ecrit la liste d'historique actuelle dans le fichier d'historique, en écrasant le contenu du fichier d'historique.

-p

Effectuez une substitution d'historique sur les arguments suivants et affichez le résultat sur la sortie standard. Ne stocke pas les résultats dans la liste d'historique. Chaque arg doit être entre guillemets pour désactiver l'expansion normale de l'historique.

-s

Stockez les args dans la liste d'historique comme une seule entrée. La dernière commande de la liste d'historique est supprimée avant que les args ne soient ajoutés.

Si la variable HISTTIMEFORMAT est définie, les informations d'horodatage associées à chaque entrée d'historique sont écrites dans le fichier d'historique, marquées du caractère de commentaire d'historique. Lorsque le fichier d'historique est lu, les lignes commençant par le caractère de commentaire d'historique suivi immédiatement d'un chiffre sont interprétées comme des horodatages pour l'entrée d'historique suivante. La valeur de retour est 0 sauf si une option invalide est rencontrée, une erreur se produit lors de la lecture ou de l'écriture du fichier d'historique, un décalage invalide est fourni comme argument à -d, ou le l'expansion de l'historique fournie comme argument à -p échoue.

jobs [-lnprs] [ jobspec ... ]
jobs -x command [ args ... ]

Le premier formulaire répertorie les travaux actifs. Les options ont les significations suivantes :

-l

Répertorier les ID de processus en plus des informations normales.

-n

Afficher uniquement les informations sur les travaux dont l'état a changé depuis la dernière fois que l'utilisateur a été informé de leur état.

-p

Indiquez uniquement l'ID de processus du chef de groupe de processus du travail.

-r

Afficher uniquement les tâches en cours d'exécution.

-s

Afficher uniquement les travaux arrêtés.

Si jobspec est donné, la sortie est limitée aux informations sur ce travail. Le statut de retour est 0 sauf si une option invalide est rencontrée ou si un jobspec invalide est fourni.

Si l'option -x est fournie, jobs remplace tout jobspec trouvé dans command ou args avec l'ID de groupe de processus correspondant, et exécute la commande en lui passant args, renvoyant son état de sortie.

kill [-s sigspec | -n signum | -sigspec] [pid | jobspec] ...
kill -l|-L [sigspec | exit_status]

Envoyez le signal nommé par sigspec ou signum aux processus nommés par pid ou jobspec. sigspec est soit un nom de signal insensible à la casse tel que SIGKILL (avec ou sans le préfixe SIG) ou un numéro de signal ; signum est un numéro de signal. Si sigspec n'est pas présent, alors SIGTERM est supposé. Un argument de -l répertorie les noms des signaux. Si des arguments sont fournis lorsque -l est donné, les noms des signaux correspondant aux arguments sont répertoriés et le statut de retour est 0. L'argument exit_status à -l est un nombre spécifiant soit un numéro de signal, soit l'état de sortie d'un processus terminé par un signal. L'option -L est équivalente à -l. kill renvoie true si au moins un signal a été envoyé avec succès, ou false si une erreur se produit ou une option invalide est rencontrée.

let arg [arg ...]

Chaque arg est une expression arithmétique à évaluer (voir ÉVALUATION ARITHMÉTIQUE ci-dessus). Si le dernier arg est évalué à 0, let renvoie 1 ; 0 est retourné sinon.

local [option] [name[=value] ... | - ]

Pour chaque argument, une variable locale nommée nom est créée et se voit attribuer une valeur. L'option peut être n'importe laquelle des options acceptées par declare. Lorsque local est utilisé dans une fonction, cela provoque la variable name pour avoir une portée visible limitée à cette fonction et à ses enfants. Si nom est -, l'ensemble des options du shell est rendu local à la fonction dans laquelle local est invoqué : les options du shell sont modifiées à l'aide de set builtin à l'intérieur de la fonction sont restaurés à leurs valeurs d'origine lorsque la fonction revient. La restauration est effectuée comme si une série de commandes set étaient exécutées pour restaurer les valeurs qui étaient en place avant la fonction. Sans opérandes, local écrit une liste de variables locales sur la sortie standard. C'est une erreur d'utiliser local en dehors d'une fonction. Le statut de retour est 0 sauf si local est utilisé en dehors d'une fonction, si un nom invalide est fourni ou si nom est une variable en lecture seule.

logout

Quittez un shell de connexion.

mapfile [-d delim] [-n count] [-O origin] [-s count] [-t] [-u fd] [-C callback] [-c quantum] [array]
readarray [-d delim] [-n count] [-O origin] [-s count] [-t] [-u fd] [-C callback] [-c quantum] [array]

Lit les lignes depuis l'entrée standard dans la variable tableau indexée array, ou depuis le descripteur de fichier fd si l'option -u est fournie. La variable MAPFILE est le tableau. par défaut. Les options, si elles sont fournies, ont les significations suivantes :

-d

Le premier caractère de delim est utilisé pour terminer chaque ligne d'entrée, plutôt qu'un retour à la ligne. Si delim est la chaîne vide, mapfile terminera une ligne lorsqu'il lira un caractère NUL.

-n

Copiez au plus count lignes. Si count vaut 0, toutes les lignes sont copiées.

-O

Commencez l'affectation à tableau à l'index origine. L'indice par défaut est 0.

-s

Ignorer les premières comptes lignes lues.

-t

Supprimez un délimiteur (retour à la ligne par défaut) à la fin de chaque ligne lue.

-u

Lire les lignes du descripteur de fichier fd au lieu de l'entrée standard.

-C

Évaluez le rappel chaque fois que des lignes quantiques sont lues. L'option -c spécifie quantum.

-c

Spécifiez le nombre de lignes lues entre chaque appel au rappel.

Si -C est spécifié sans -c, le quantum par défaut est 5000. Lorsque callback est évalué, l'indice de le prochain élément de tableau à affecter et la ligne à affecter à cet élément comme arguments supplémentaires. Le rappel est évalué après la lecture de la ligne mais avant que l'élément de tableau ne soit assigné.

S'il n'est pas fourni avec une origine explicite, mapfile effacera tableau avant de lui attribuer.

mapfile retourne avec succès à moins qu'une option invalide ou un argument d'option soit fourni, array est invalide ou non assignable, ou si array n'est pas un tableau indexé.

popd [-n] [+n] [-n]

Supprime des entrées de la pile de répertoires. Sans arguments, supprime le répertoire supérieur de la pile et effectue un cd vers le nouveau répertoire supérieur. Les arguments, s'ils sont fournis, ont les significations suivantes :

-n

Supprime le changement normal de répertoire lors de la suppression de répertoires de la pile, afin que seule la pile soit manipulée.

+n

Supprime la nième entrée en partant de la gauche de la liste indiquée par dirs, en commençant par zéro. Par exemple : ``popd +0'' supprime le premier répertoire, ``popd +1'' le second.

-n

Supprime la nième entrée en partant de la droite de la liste indiquée par dirs, en commençant par zéro. Par exemple : ``popd -0'' supprime le dernier répertoire, ``popd -1'' l'avant-dernier.

Si la commande popd réussit, un dirs est également exécuté et le statut de retour est 0. popd renvoie false si une option non valide est rencontré, la pile de répertoires est vide, une entrée de pile de répertoires inexistante est spécifiée ou le changement de répertoire échoue.

printf [-v var] format [arguments]

Écrivez les arguments formatés sur la sortie standard sous le contrôle du format. L'option -v entraîne l'affectation de la sortie à la variable var au lieu d'être imprimée sur la sortie standard.

Le format est une chaîne de caractères qui contient trois types d'objets : des caractères simples, qui sont simplement copiés dans la sortie standard, des séquences de caractères d'échappement, qui sont converties et copiées dans la sortie standard sortie et les spécifications de format, chacune d'entre elles provoquant l'impression du prochain argument. En plus du standard printf(1) spécifications de format, printf interprète les extensions suivantes :

%b

oblige printf à développer les séquences d'échappement antislash dans l'argument correspondant de la même manière que echo -e.

%q

oblige printf à afficher le argument correspondant dans un format qui peut être réutilisé comme entrée du shell.

%(datefmt)T

oblige printf à afficher la chaîne date-heure résultant de l'utilisation de datefmt comme chaîne de format pour strftime (3). L'argument correspondant est un entier représentant le nombre de secondes depuis l'époque. Deux valeurs d'argument spéciales peuvent être utilisées : -1 représente l'heure actuelle et -2 représente l'heure à laquelle le shell a été invoqué. Si aucun argument n'est spécifié, la conversion se comporte comme si -1 avait été donné. Il s'agit d'une exception au comportement habituel de printf.

Les directives %b, %q et %T utilisent toutes les arguments de largeur et de précision du champ de la spécification de format et écrivent autant d'octets à partir (ou utilisent un champ aussi large pour) l'argument étendu, qui contient généralement plus de caractères que l'original .

Les arguments des spécificateurs de format non-chaîne sont traités comme des constantes C, sauf qu'un signe plus ou moins de début est autorisé, et si le caractère de début est un guillemet simple ou double, la valeur est la valeur ASCII du caractère suivant.

Le format est réutilisé si nécessaire pour consommer tous les arguments. Si le format nécessite plus d'arguments qu'il n'en est fourni, les spécifications de format supplémentaires se comportent comme si une valeur nulle ou une chaîne nulle, selon le cas, avait été fournie. La valeur de retour est zéro en cas de succès, non nulle en cas d'échec.

pushd [-n] [+n] [-n]
pushd [-n] [dir]

Ajoute un répertoire au sommet de la pile de répertoires ou fait pivoter la pile, faisant du nouveau sommet de la pile le répertoire de travail actuel. Sans argument, pushd échange les deux premiers répertoires et renvoie 0, sauf si la pile de répertoires est vide. Les arguments, s'ils sont fournis, ont les significations suivantes :

-n

Supprime le changement normal de répertoire lors de la rotation ou de l'ajout de répertoires à la pile, de sorte que seule la pile est manipulée.

+n

Fait pivoter la pile de sorte que le nème répertoire (en partant de la gauche de la liste indiquée par dirs, en commençant par zéro) soit en haut .

-n

Fait pivoter la pile de sorte que le nème répertoire (en partant de la droite de la liste indiquée par dirs, en commençant par zéro) soit en haut .

dir

Ajoute dir à la pile de répertoires en haut, ce qui en fait le nouveau répertoire de travail actuel comme s'il avait été fourni comme argument à la cd builtin.

Si la commande pushd réussit, un dirs est également exécuté. Si la première forme est utilisée, pushd renvoie 0 sauf si le cd vers dir échoue. Avec la deuxième forme, pushd renvoie 0 à moins que la pile de répertoires soit vide, qu'un élément de pile de répertoires inexistant soit spécifié ou que le changement de répertoire vers le nouveau répertoire courant spécifié échoue.

pwd [-LP]

Affiche le chemin d'accès absolu du répertoire de travail courant. Le chemin d'accès imprimé ne contient aucun lien symbolique si l'option -P est fournie ou si l'option -o physical de la commande intégrée set est activée. Si l'option -L est utilisée, le chemin imprimé peut contenir des liens symboliques. L'état de retour est 0 à moins qu'une erreur se produise lors de la lecture du nom du répertoire courant ou qu'une option non valide soit fournie.

read [-ers] [-a aname] [-d delim] [-i text] [-n nchars] [-N nchars] [-p prompt] [-t timeout] [-u fd] [name ...]

Une ligne est lue à partir de l'entrée standard, ou à partir du descripteur de fichier fd fourni comme argument à l'option -u, divisé en mots comme décrit ci-dessus sous Mot Fractionnement, et le premier mot est attribué au premier nom, le deuxième mot au deuxième nom, et ainsi de suite. S'il y a plus de mots que de noms, les mots restants et leurs délimiteurs intermédiaires sont attribués au dernier nom. S'il y a moins de mots lus dans le flux d'entrée que de noms, les noms restants reçoivent des valeurs vides. Les caractères dans IFS sont utilisés pour diviser la ligne en mots en utilisant les mêmes règles que le shell utilise pour l'expansion (décrites ci-dessus sous Division de mots). Le caractère barre oblique inverse ( \) peut être utilisé pour supprimer toute signification spéciale pour le prochain caractère lu et pour la continuation de ligne. Les options, si elles sont fournies, ont les significations suivantes :

-a aname

Les mots sont affectés à des indices séquentiels de la variable tableau aname, en commençant à 0. aname est désactivé avant que toute nouvelle valeur ne soit affectée. Les autres arguments nom sont ignorés.

-d delim

Le premier caractère de delim est utilisé pour terminer la ligne d'entrée, plutôt qu'un retour à la ligne. Si delim est la chaîne vide, read termine une ligne lorsqu'il lit un caractère NUL.

-e

Si l'entrée standard provient d'un terminal, readline (voir READLINE ci-dessus) est utilisé pour obtenir la ligne. Readline utilise les paramètres d'édition actuels (ou par défaut, si l'édition de ligne n'était pas active auparavant), mais utilise la complétion de nom de fichier par défaut de Readline.

-i text

Si readline est utilisé pour lire la ligne, le texte est placé dans le tampon d'édition avant le début de l'édition.

-n nchars

read renvoie après avoir lu les caractères nchars plutôt que d'attendre une ligne complète d'entrée, mais respecte un délimiteur s'il y a moins de ncharsles caractères sont lus avant le délimiteur.

-N nchars

read renvoie après avoir lu exactement nchars caractères plutôt que d'attendre une ligne complète d'entrée, à moins que EOF ne soit rencontré ou que read expire. Les caractères délimiteurs rencontrés dans l'entrée ne sont pas traités spécialement et n'entraînent pas le retour de read tant que les caractères nchars ne sont pas lus. Le résultat n'est pas divisé sur les caractères dans IFS ; l'intention est que la variable se voit attribuer exactement les caractères lus (à l'exception de la barre oblique inverse ; voir l'option -r ci-dessous).

-p prompt

Affichez l'invite sur l'erreur standard, sans retour à la ligne, avant d'essayer de lire une entrée. L'invite s'affiche uniquement si l'entrée provient d'un terminal.

-r

La barre oblique inverse n'agit pas comme un caractère d'échappement. La barre oblique inverse est considérée comme faisant partie de la ligne. En particulier, une paire barre oblique inverse-retour à la ligne ne peut alors pas être utilisée comme continuation de ligne.

-s

Mode silencieux. Si l'entrée provient d'un terminal, les caractères ne sont pas renvoyés.

-t timeout

Cause la lecture jusqu'à l'expiration du délai et renvoie un échec si une ligne complète d'entrée (ou un nombre spécifié de caractères) n'est pas lue dans le timeout secondes. timeout peut être un nombre décimal avec une partie fractionnaire suivant la virgule décimale. Cette option n'est efficace que si read lit l'entrée d'un terminal, d'un tube ou d'un autre fichier spécial ; il n'a aucun effet lors de la lecture de fichiers normaux. Si la lecture expire, la lecture enregistre toute entrée partielle lue dans la variable spécifiée nom. Si timeout est 0, read renvoie immédiatement, sans essayer de lire les données. L'état de sortie est 0 si l'entrée est disponible sur le descripteur de fichier spécifié, différent de zéro sinon. L'état de sortie est supérieur à 128 si le délai d'attente est dépassé.

-u fd

Lire l'entrée du descripteur de fichier fd.

Si aucun nom n'est fourni, la ligne lue, sans le délimiteur de fin mais autrement non modifiée, est affectée à la variable REPLY. L'état de sortie est zéro, sauf si une fin de fichier est rencontrée, un délai de lecture (auquel cas l'état est supérieur à 128), une erreur d'affectation de variable (telle que l'affectation à une variable en lecture seule) se produit, ou un descripteur de fichier invalide est fourni comme argument à -u.

readonly [-aAf] [-p] [name[=word] ...]

Les noms donnés sont marqués en lecture seule ; les valeurs de ces noms ne peuvent pas être modifiées par une attribution ultérieure. Si l'option -f est fournie, les fonctions correspondant aux noms sont ainsi marquées. L'option -a limite les variables aux tableaux indexés ; l'option -A limite les variables aux tableaux associatifs. Si les deux options sont fournies, -A est prioritaire. Si aucun argument nom n'est donné, ou si l'option -p est fournie, une liste de tous les noms en lecture seule est affichée. Les autres options peuvent être utilisées pour limiter la sortie à un sous-ensemble de l'ensemble des noms en lecture seule. L'option -p entraîne l'affichage de la sortie dans un format qui peut être réutilisé comme entrée. Si un nom de variable est suivi de =mot, la valeur de la variable est définie sur mot. Le retour status est 0 sauf si une option non valide est rencontrée, si l'un des noms n'est pas un nom de variable shell valide ou si -f est fourni avec un nom > ce n'est pas une fonction.

return [n]

Provoque l'arrêt de l'exécution d'une fonction et renvoie la valeur spécifiée par n à son appelant. Si n est omis, l'état de retour est celui de la dernière commande exécutée dans le corps de la fonction. Si return est exécuté par un gestionnaire d'interruptions, la dernière commande utilisée pour déterminer l'état est la dernière commande exécutée avant le gestionnaire d'interruptions. Si return est exécuté pendant une interruption DEBUG, la dernière commande utilisée pour déterminer l'état est la dernière commande exécutée par le gestionnaire d'interruptions avant que return ne soit appelé. Si return est utilisé en dehors d'une fonction, mais lors de l'exécution d'un script par la commande . (source), le shell arrête d'exécuter ce script et renvoie soit n ou l'état de sortie de la dernière commande exécutée dans le script comme état de sortie du script. Si n est fourni, la valeur de retour est ses 8 bits les moins significatifs. Le statut de retour est différent de zéro si return est fourni un argument non numérique, ou est utilisé en dehors d'une fonction et non pendant l'exécution d'un script par . ou source. Toute commande associée au trap RETURN est exécutée avant que l'exécution ne reprenne après la fonction ou le script.

set [--abefhkmnptuvxBCEHPT] [-o option-name] [arg ...]
set [+abefhkmnptuvxBCEHPT] [+o option-name] [arg ...]

Sans options, le nom et la valeur de chaque variable shell sont affichés dans un format qui peut être réutilisé comme entrée pour définir ou réinitialiser les variables actuellement définies. Les variables en lecture seule ne peuvent pas être réinitialisées. En mode posix, seules les variables shell sont répertoriées. La sortie est triée en fonction des paramètres régionaux actuels. Lorsque des options sont spécifiées, elles définissent ou annulent les attributs du shell. Tous les arguments restants après le traitement des options sont traités comme des valeurs pour les paramètres positionnels et sont affectés, dans l'ordre, à $1, $2, ... $n. Les options, si elles sont spécifiées, ont les significations suivantes :

-a

Chaque variable ou fonction créée ou modifiée reçoit l'attribut d'exportation et est marquée pour être exportée vers l'environnement des commandes suivantes.

-b

Signalez immédiatement l'état des travaux d'arrière-plan terminés, plutôt qu'avant l'invite principale suivante. Cela n'est effectif que lorsque le contrôle des travaux est activé.

-e

Quittez immédiatement si un pipeline (qui peut consister en une seule commande simple), une liste, ou une commande composée (voir SHELL GRAMMAIRE ci-dessus), sort avec un statut différent de zéro. Le shell ne se ferme pas si la commande qui échoue fait partie de la liste de commandes immédiatement après un mot clé while ou until, une partie du test suivant le if ou elif mots réservés, faisant partie de toute commande exécutée dans une liste && ou || sauf la commande suivant le && final ou ||, n'importe quelle commande dans un pipeline sauf la dernière, ou si la valeur de retour de la commande est inversée avec !. Si une commande composée autre qu'un sous-shell renvoie un état différent de zéro parce qu'une commande a échoué alors que -e était ignoré, le shell ne se ferme pas. Un piège sur ERR, s'il est défini, est exécuté avant la fermeture du shell. Cette option s'applique à l'environnement shell et à chaque environnement de sous-shell séparément (voir

ENVIRONNEMENT D'EXÉCUTION DE COMMANDES ci-dessus), et peut entraîner la fermeture des sous-shells avant l'exécution de toutes les commandes dans le sous-shell.

Si une commande composée ou une fonction shell s'exécute dans un contexte où -e est ignoré, aucune des commandes exécutées dans la commande composée ou le corps de la fonction ne sera affectée par le paramètre -e, même si -e est défini et qu'une commande renvoie un état d'échec. Si une commande composée ou une fonction shell définit -e lors de l'exécution dans un contexte où -e est ignoré, ce paramètre n'aura aucun effet jusqu'à ce que la commande composée ou la commande contenant l'appel de la fonction se termine.

-f

Désactivez l'expansion du nom de chemin.

-h

Souvenez-vous de l'emplacement des commandes lorsqu'elles sont recherchées pour exécution. C'est activé par défault.

-k

Tous les arguments sous la forme d'instructions d'affectation sont placés dans l'environnement d'une commande, pas seulement ceux qui précèdent le nom de la commande.

-m

Mode moniteur. Le contrôle des tâches est activé. Cette option est activée par défaut pour les shells interactifs sur les systèmes qui la prennent en charge (voir JOB CONTROL ci-dessus). Tous les processus s'exécutent dans un groupe de processus distinct. Lorsqu'une tâche en arrière-plan se termine, le shell imprime une ligne contenant son état de sortie.

-n

Lire les commandes mais ne pas les exécuter. Cela peut être utilisé pour vérifier un script shell pour les erreurs de syntaxe. Ceci est ignoré par les shells interactifs.

-o option-name

Le nom-option peut être l'un des suivants :

allexport

Identique à -a.

braceexpand

Identique à -B.

emacs

Utilisez une interface d'édition de ligne de commande de style emacs. Ceci est activé par défaut lorsque le shell est interactif, sauf si le shell est lancé avec l'option --noediting. Cela affecte également l'interface d'édition utilisée pour read -e.

errexit

Identique à -e.

errtrace

Identique à -E.

functrace

Identique à -T.

hashall

Identique à -h.

histexpand

Identique à -H.

history

Activez l'historique des commandes, comme décrit ci-dessus sous HISTORIQUE. Cette option est activée par défaut dans les shells interactifs.

ignoreeof

L'effet est comme si la commande shell ``IGNOREEOF=10'' avait été exécutée (voir Variables Shell ci-dessus).

keyword

Identique à -k.

monitor

Identique à -m.

noclobber

Identique à -C.

noexec

Identique à -n.

noglob

Identique à -f.

nolog

Actuellement ignoré.

notify

Identique à -b.

nounset

Identique à -u.

onecmd

Identique à -t.

physical

Identique à -P.

pipefail

Si elle est définie, la valeur de retour d'un pipeline est la valeur de la dernière commande (la plus à droite) à quitter avec un état différent de zéro, ou zéro si toutes les commandes du pipeline se terminent avec succès. Cette option est désactivée par défaut.

posix

Modifiez le comportement de bash où l'opération par défaut diffère de la norme POSIX pour correspondre à la norme (mode posix). Voir VOIR AUSSI ci-dessous pour une référence à un document qui détaille comment le mode posix affecte le comportement de bash.

privileged

Identique à -p.

verbose

Identique à -v.

vi

Utilisez une interface d'édition de ligne de commande de style vi. Cela affecte également l'interface d'édition utilisée pour read -e.

xtrace

Identique à -x.

Si -o est fourni sans option-name, les valeurs des options actuelles sont imprimées. Si +o est fourni sans option-name, une série de commandes set pour recréer les paramètres d'option actuels s'affiche sur la sortie standard.

-p

Activez le mode privilégié. Dans ce mode, les fichiers $ENV et $BASH_ENV ne sont pas traités, les fonctions shell ne sont pas héritées de l'environnement, et les SHELLOPTS, < Les variablesBASHOPTS, CDPATH et GLOBIGNORE, si elles apparaissent dans l'environnement, sont ignorées. Si le shell est démarré avec l'ID utilisateur (groupe) effectif différent de l'ID utilisateur (groupe) réel et que l'option -p n'est pas fournie, ces actions sont prises et l'ID utilisateur effectif est défini sur l'ID utilisateur réel. Si l'option -p est fournie au démarrage, l'ID utilisateur effectif n'est pas réinitialisé. La désactivation de cette option entraîne la définition des identifiants d'utilisateur et de groupe effectifs sur les identifiants d'utilisateur et de groupe réels.

-t

Quittez après avoir lu et exécuté une commande.

-u

Traitez les variables et paramètres non définis autres que les paramètres spéciaux "@" et "*" comme une erreur lors de l'expansion des paramètres. Si une expansion est tentée sur une variable ou un paramètre non défini, le shell affiche un message d'erreur et, s'il n'est pas interactif, se termine avec un état différent de zéro.

-v

Affiche les lignes d'entrée du shell au fur et à mesure qu'elles sont lues.

-x

Après avoir développé chaque commande simple, pour la commande, la commande de cas, la commande de sélection ou l'arithmétique pour la commande, affichez la valeur développée de< PS4, suivi de la commande et de ses arguments développés ou de la liste de mots associée.

-B

Le shell effectue l'expansion des accolades (voir Expansion des accolades ci-dessus). Ceci est activé par défaut.

-C

S'il est défini, bash n'écrase pas un fichier existant avec les opérateurs de redirection >, >& et <> . Cela peut être remplacé lors de la création de fichiers de sortie en utilisant l'opérateur de redirection >| au lieu de >.

-E

S'il est défini, tout piège sur ERR est hérité par les fonctions du shell, les substitutions de commande et les commandes exécutées dans un environnement de sous-shell. Le piège ERR n'est normalement pas hérité dans de tels cas.

-H

Activez la substitution d'historique de style !. Cette option est activée par défaut lorsque le shell est interactif.

-P

S'il est défini, le shell ne résout pas les liens symboliques lors de l'exécution de commandes telles que cd qui modifient le répertoire de travail actuel. Il utilise à la place la structure de répertoire physique. Par défaut, bash suit la chaîne logique des répertoires lors de l'exécution de commandes qui modifient le répertoire courant.

-T

Si elles sont définies, toutes les interruptions sur DEBUG et RETURN sont héritées par les fonctions shell, les substitutions de commandes et les commandes exécutées dans un environnement de sous-shell. Les interruptions DEBUG et RETURN ne sont normalement pas héritées dans de tels cas.

--

Si aucun argument ne suit cette option, les paramètres positionnels ne sont pas définis. Sinon, les paramètres de position sont définis sur les args, même si certains d'entre eux commencent par un -.

-

Signalez la fin des options, faites en sorte que tous les args restants soient affectés aux paramètres positionnels. Les options -x et -v sont désactivées. S'il n'y a pas de args, les paramètres positionnels restent inchangés.

Les options sont désactivées par défaut, sauf indication contraire. L'utilisation de + plutôt que - entraîne la désactivation de ces options. Les options peuvent également être spécifiées comme arguments d'un appel du shell. L'ensemble actuel d'options se trouve dans $-. Le statut de retour est toujours vrai sauf si une option non valide est rencontrée.

shift [n]

Les paramètres de position de n+1 ... sont renommés en $1 .... Paramètres représentés par le les numéros $# jusqu'à $#-n+1 ne sont pas définis. n doit être un nombre non négatif inférieur ou égal à $#. Si n vaut 0, aucun paramètre n'est modifié. Si n n'est pas donné, il est supposé être 1. Si n est supérieur à $#, les paramètres positionnels ne sont pas modifiés. le statut de retour est supérieur à zéro si n est supérieur à $# ou inférieur à zéro ; sinon 0.

shopt [-pqsu] [-o] [optname ...]

Basculez les valeurs des paramètres contrôlant le comportement facultatif du shell. Les paramètres peuvent être soit ceux répertoriés ci-dessous, soit, si l'option -o est utilisée, ceux disponibles avec l'option -o de la commande intégrée set.< Sans option, ou avec l'option -p, une liste de toutes les options configurables s'affiche, avec une indication indiquant si chacune est définie ou non ; si optnames sont fournis, la sortie est limitée à ces options. L'option -p entraîne l'affichage de la sortie sous une forme qui peut être réutilisée comme entrée. Les autres options ont les significations suivantes :

-s

Activer (définir) chaque optname.

-u

Désactiver (annuler) chaque optname.

-q

Supprime la sortie normale (mode silencieux); le statut de retour indique si optname est défini ou non. Si plusieurs arguments optname sont donnés avec -q, le statut renvoyé est zéro si tous les optnames sont activés ; différent de zéro sinon.

-o

Restreint les valeurs de optname à celles définies pour l'option -o à la commande intégrée set.

Si -s ou -u est utilisé sans arguments optname, shopt affiche uniquement les options définies ou non définies, respectivement. Sauf indication contraire, les options shopt sont désactivées (non définies) par défaut.

Le statut de retour lors de la liste des options est zéro si tous les optnames sont activés, différent de zéro sinon. Lors de la définition ou de la désactivation d'options, le statut de retour est zéro à moins qu'un optname ne soit pas une option shell valide.

La liste des options shopt est :

assoc_expand_once

S'il est défini, le shell supprime l'évaluation multiple des indices de tableaux associatifs lors de l'évaluation des expressions arithmétiques, lors de l'exécution des commandes intégrées qui peuvent effectuer des affectations de variables et lors de l'exécution des commandes intégrées qui effectuent le déréférencement des tableaux.

autocd

Si elle est définie, un nom de commande qui est le nom d'un répertoire est exécuté comme s'il s'agissait de l'argument de la commande cd. Cette option n'est utilisée que par les shells interactifs.

cdable_vars

S'il est défini, un argument de la commande intégrée cd qui n'est pas un répertoire est supposé être le nom d'une variable dont la valeur est le répertoire vers lequel changer.

cdspell

S'il est défini, les erreurs mineures dans l'orthographe d'un composant de répertoire dans une commande cd seront corrigées. Les erreurs recherchées sont les caractères transposés, un caractère manquant et un caractère de trop. Si une correction est trouvée, le nom de fichier corrigé est imprimé et la commande se poursuit. Cette option n'est utilisée que par les shells interactifs.

checkhash

Si défini, bash vérifie qu'une commande trouvée dans la table de hachage existe avant d'essayer de l'exécuter. Si une commande hachée n'existe plus, une recherche de chemin normale est effectuée.

checkjobs

S'il est défini, bash répertorie l'état de toutes les tâches arrêtées et en cours d'exécution avant de quitter un shell interactif. Si des tâches sont en cours d'exécution, la sortie est différée jusqu'à ce qu'une seconde sortie soit tentée sans commande intermédiaire (voir JOB CONTROL ci-dessus). Le shell reporte toujours la sortie si des travaux sont arrêtés.

checkwinsize

Si défini, bash vérifie la taille de la fenêtre après chaque commande externe (non intégrée) et, si nécessaire, met à jour les valeurs de LINES et COLUMNS . Cette option est activée par défaut.

cmdhist

S'il est défini, bash tente d'enregistrer toutes les lignes d'une commande à plusieurs lignes dans la même entrée d'historique. Cela permet de rééditer facilement les commandes multilignes. Cette option est activée par défaut, mais n'a d'effet que si l'historique des commandes est activé, comme décrit ci-dessus sous HISTORIQUE.

compat31
compat32
compat40
compat41
compat42
compat43
compat44

Ceux-ci contrôlent les aspects du mode de compatibilité du shell (voir SHELL COMPATIBILITY MODE ci-dessous).

complete_fullquote

S'il est défini, bash met entre guillemets tous les métacaractères du shell dans les noms de fichiers et les noms de répertoires lors de la complétion. S'il n'est pas défini, bash supprime les métacaractères tels que le signe dollar du jeu de caractères qui seront cités dans les noms de fichiers complétés lorsque ces métacaractères apparaîtront dans les références de variables shell dans les mots à compléter. Cela signifie que les signes dollar dans les noms de variables qui se développent en répertoires ne seront pas entre guillemets ; cependant, les signes dollar apparaissant dans les noms de fichiers ne seront pas non plus cités. Ceci n'est actif que lorsque bash utilise des barres obliques inverses pour citer les noms de fichiers complets. Cette variable est définie par défaut, qui est le comportement bash par défaut dans les versions jusqu'à 4.2.

direxpand

S'il est défini, bash remplace les noms de répertoires par les résultats de l'expansion des mots lors de la complétion des noms de fichiers. Cela modifie le contenu du tampon d'édition readline. S'il n'est pas défini, bash tente de conserver ce que l'utilisateur a tapé.

dirspell

S'il est défini, bash tente de corriger l'orthographe des noms de répertoire lors de la complétion de mots si le nom de répertoire initialement fourni n'existe pas.

dotglob

S'il est défini, bash inclut les noms de fichiers commençant par un `.' dans les résultats de l'expansion du nom de chemin. Les noms de fichiers ``.'' et ``..'' doivent toujours correspondre explicitement, même si dotglob est défini.

execfail

S'il est défini, un shell non interactif ne se fermera pas s'il ne peut pas exécuter le fichier spécifié en tant qu'argument de la commande intégrée exec. Un shell interactif ne se ferme pas si exec échoue.

expand_aliases

S'ils sont définis, les alias sont développés comme décrit ci-dessus sous ALIASES. Cette option est activée par défaut pour les shells interactifs.

extdebug

S'il est défini à l'invocation du shell, ou dans un fichier de démarrage du shell, s'arrange pour exécuter le profil du débogueur avant le démarrage du shell, identique à l'option --debugger. Si défini après l'invocation, comportement destiné à être utilisé par les débogueurs est autorisé:

1.

L'option -F de la commande interne declare affiche le nom du fichier source et le numéro de ligne correspondant à chaque nom de fonction fourni comme argument.

2.

Si la commande exécutée par le trap DEBUG renvoie une valeur différente de zéro, la commande suivante est ignorée et non exécutée.

3.

Si la commande exécutée par le trap DEBUG renvoie une valeur de 2, et que le shell s'exécute dans une sous-routine (une fonction shell ou un script shell exécuté par le . ou les commandes intégrées source), le shell simule un appel à return.

4.

BASH_ARGC et BASH_ARGV sont mis à jour comme décrit dans leurs descriptions ci-dessus.

5.

Le suivi des fonctions est activé : la substitution de commande, les fonctions du shell et les sous-shells invoqués avec ( commande ) héritent des interruptions DEBUG et RETURN.

6.

Le traçage des erreurs est activé : la substitution de commande, les fonctions de l'interpréteur de commandes et les sous-interpréteurs invoqués avec ( commande ) héritent de l' interruption ERR.

extglob

Si elles sont définies, les fonctionnalités de correspondance de modèle étendues décrites ci-dessus sous Extension du nom de chemin sont activées.

extquote

Si défini, les guillemets $'string' et $"string" sont exécutés dans les extensions de $ {paramètre} entre guillemets doubles. Cette option est activée par défaut.

failglob

S'il est défini, les modèles qui ne correspondent pas aux noms de fichiers lors de l'expansion du nom de chemin entraînent une erreur d'expansion.

force_fignore

S'ils sont définis, les suffixes spécifiés par la variable shell FIGNORE entraînent l'ignorance des mots lors de la complétion de mots, même si les mots ignorés sont les seules complétions possibles. Voir VARIABLES SHELL ci-dessus pour une description de FIGNORE. Cette option est activée par défaut.

globasciiranges

Si elles sont définies, les expressions de plage utilisées dans les expressions entre parenthèses de correspondance de modèle (voir Correspondance de modèle ci-dessus) se comportent comme si elles étaient dans les paramètres régionaux C traditionnels lors de l'exécution de comparaisons. Autrement dit, la séquence de classement des paramètres régionaux actuels n'est pas prise en compte, donc b ne rassemblera pas entre A et B, et les majuscules et les caractères ASCII minuscules seront assemblés.

globstar

S'il est défini, le modèle ** utilisé dans un contexte d'extension de nom de chemin correspondra à tous les fichiers et à zéro ou plusieurs répertoires et sous-répertoires. Si le modèle est suivi d'un /, seuls les répertoires et les sous-répertoires correspondent.

gnu_errfmt

S'il est défini, les messages d'erreur du shell sont écrits dans le format de message d'erreur GNU standard.

histappend

Si elle est définie, la liste d'historique est ajoutée au fichier nommé par la valeur de la variable HISTFILE lorsque le shell se termine, plutôt que d'écraser le fichier.

histreedit

S'il est défini et que readline est utilisé, un utilisateur a la possibilité de rééditer une substitution d'historique ayant échoué.

histverify

S'il est défini et que readline est utilisé, les résultats de la substitution d'historique ne sont pas immédiatement transmis à l'analyseur shell. Au lieu de cela, la ligne résultante est chargée dans le tampon d'édition de readline, permettant d'autres modifications.

hostcomplete

S'il est défini et que readline est utilisé, bash tentera d'effectuer la complétion du nom d'hôte lorsqu'un mot contenant un @ est en cours de complétion (voir Compléter sous LIRE LIGNE ci-dessus). C'est activé par défault.

huponexit

S'il est défini, bash enverra SIGHUP à toutes les tâches lorsqu'un shell de connexion interactif se fermera.

inherit_errexit

Si elle est définie, la substitution de commande hérite de la valeur de l'option errexit, au lieu de la désactiver dans l'environnement du sous-shell. Cette option est activée lorsque le mode posix est activé.

interactive_comments

Si défini, autorise un mot commençant par # pour que ce mot et tous les caractères restants sur cette ligne soient ignorés dans un shell interactif (voir COMMENTAIRES ci-dessus). Cette option est activée par défaut.

lastpipe

S'il est défini et que le contrôle des tâches n'est pas actif, le shell exécute la dernière commande d'un pipeline non exécuté en arrière-plan dans l'environnement shell actuel.

lithist

Si elle est définie et que l'option cmdhist est activée, les commandes multilignes sont enregistrées dans l'historique avec des retours à la ligne intégrés plutôt que d'utiliser des séparateurs point-virgule lorsque cela est possible.

localvar_inherit

Si elles sont définies, les variables locales héritent de la valeur et des attributs d'une variable du même nom qui existe dans une portée précédente avant qu'une nouvelle valeur ne soit affectée. L'attribut nameref n'est pas hérité.

localvar_unset

S'il est défini, l'appel de unset sur les variables locales dans les portées de fonction précédentes les marque afin que les recherches ultérieures les trouvent non définies jusqu'au retour de cette fonction. Ceci est identique au comportement de désactivation des variables locales à la portée de la fonction actuelle.

login_shell

Le shell définit cette option s'il est démarré en tant que shell de connexion (voir INVOCATION ci-dessus). La valeur ne peut pas être modifiée.

mailwarn

S'il est défini et qu'un fichier que bash vérifie pour le courrier a été accédé depuis la dernière fois qu'il a été vérifié, le message ``Le courrier dans mailfile a été lire'' s'affiche.

no_empty_cmd_completion

S'il est défini et que readline est utilisé, bash n'essaiera pas de rechercher dans le PATH les complétions possibles lorsque la complétion est tentée sur une ligne vide.

nocaseglob

S'il est défini, bash correspond aux noms de fichiers sans tenir compte de la casse lors de l'expansion du nom de chemin (voir Expansion du nom de chemin ci-dessus).

nocasematch

S'il est défini, bash correspond aux modèles sans tenir compte de la casse lors de la mise en correspondance lors de l'exécution de commandes conditionnelles case ou [[, lors de l'exécution d'expansions de mot de substitution de modèle ou lors du filtrage de complétions possibles dans le cadre de l'achèvement programmable.

nullglob

S'il est défini, bash permet aux modèles qui ne correspondent à aucun fichier (voir Développement du nom de chemin ci-dessus) de se développer en une chaîne nulle, plutôt qu'eux-mêmes.

progcomp

Si elle est définie, les fonctions de complétion programmables (voir Complètement programmable ci-dessus) sont activées. Cette option est activée par défaut.

progcomp_alias

S'il est défini et que la complétion programmable est activée, bash traite un nom de commande qui n'a aucune complétion comme un alias possible et tente de développer l'alias. S'il a un alias, bash tente une complétion programmable en utilisant le mot de commande résultant de l'alias développé.

promptvars

Si elles sont définies, les chaînes d'invite subissent une expansion des paramètres, une substitution de commande, une expansion arithmétique et une suppression des guillemets après avoir été développées comme décrit dans INVITE ci-dessus. Cette option est activée par défaut.

restricted_shell

Le shell définit cette option s'il est démarré en mode restreint (voir SHELL RESTREINT ci-dessous). La valeur ne peut pas être modifiée. Ceci n'est pas réinitialisé lorsque les fichiers de démarrage sont exécutés, ce qui permet aux fichiers de démarrage de découvrir si un shell est restreint ou non.

shift_verbose

Si elle est définie, la commande intégrée shift imprime un message d'erreur lorsque le nombre de décalages dépasse le nombre de paramètres de position.

sourcepath

Si elle est définie, la commande intégrée source (.) utilise la valeur de PATH pour trouver le répertoire contenant le fichier fourni en argument. Cette option est activée par défaut.

xpg_echo

Si elle est définie, la commande intégrée echo développe les séquences d'échappement antislash par défaut.

suspend [-f]

Suspendez l'exécution de ce shell jusqu'à ce qu'il reçoive un signal SIGCONT. Un shell de connexion ne peut pas être suspendu ; l'option -f peut être utilisée pour remplacer cela et forcer la suspension. L'état de retour est 0 sauf si le shell est un shell de connexion et que -f n'est pas fourni, ou si le contrôle des tâches n'est pas activé.

test expr
[ expr ]

Renvoie un statut de 0 (vrai) ou 1 (faux) selon l'évaluation de l'expression conditionnelle expr. Chaque opérateur et opérande doit être un argument distinct.

EXPRESSIONS CONDITIONNELLES. test n'accepte aucune option, ni n'accepte et n'ignore un argument de -- comme signifiant la fin des options.

Les expressions peuvent être combinées à l'aide des opérateurs suivants, répertoriés par ordre décroissant de priorité. L'évaluation dépend du nombre d'arguments ; voir ci-dessous. La priorité des opérateurs est utilisée lorsqu'il y a cinq arguments ou plus.

! expr

Vrai si expr est faux.

( expr )

Renvoie la valeur de expr. Cela peut être utilisé pour remplacer la priorité normale des opérateurs.

expr1 -a expr2

Vrai si expr1 et expr2 sont vrais.

expr1 -o expr2

Vrai si soit expr1 ou expr2 est vrai.

tester et [évaluer les expressions conditionnelles à l'aide d'un ensemble de règles basées sur le nombre d'arguments.

0 arguments

L'expression est fausse.

1 argument

L'expression est vraie si et seulement si l'argument n'est pas nul.

2 arguments

Si le premier argument est !, l'expression est vraie si et seulement si le deuxième argument est nul. Si le premier argument est l'un des opérateurs conditionnels unaires répertoriés ci-dessus sous EXPRESSIONS CONDITIONNELLES, l'expression est vraie si le test unaire est vrai. Si le premier argument n'est pas un opérateur conditionnel unaire valide, l'expression est fausse.

3 arguments

Les conditions suivantes sont appliquées dans l'ordre indiqué. Si le deuxième argument est l'un des opérateurs conditionnels binaires répertoriés ci-dessus sous EXPRESSIONS CONDITIONNELLES, le résultat de l'expression est le résultat du test binaire utilisant les premier et troisième arguments comme opérandes. Les opérateurs -a et -o sont considérés comme des opérateurs binaires lorsqu'il y a trois arguments. Si le premier argument est !, la valeur est la négation de le test à deux arguments utilisant les deuxième et troisième arguments. Si le premier argument est exactement ( et le troisième argument est exactement ), le résultat est le test à un argument du deuxième argument. Sinon, l'expression est fausse.

4 arguments

Si le premier argument est !, le résultat est la négation de l'expression à trois arguments composée des arguments restants. Sinon, l'expression est analysée et évaluée selon la priorité en utilisant les règles répertoriées ci-dessus.

5 or more arguments

L'expression est analysée et évaluée selon la priorité en utilisant les règles répertoriées ci-dessus.

Lorsqu'ils sont utilisés avec test ou [, les opérateurs < et > effectuent un tri lexicographique en utilisant l'ordre ASCII.

times

Affiche les temps utilisateur et système cumulés pour le shell et pour les processus exécutés à partir du shell. Le statut de retour est 0.

trap [-lp] [[arg] sigspec ...]

La commande arg doit être lue et exécutée lorsque le shell reçoit le(s) signal(s) sigspec. Si arg est absent (et qu'il n'y a qu'un seul sigspec) ou -, chaque signal spécifié est réinitialisé à son disposition d'origine (la valeur qu'il avait à l'entrée de la coquille). Si arg est la chaîne nulle, le signal spécifié par chaque sigspec est ignoré par le shell et par les commandes qu'il appelle. Si arg n'est pas présent et que -p a été fourni, alors les commandes trap associées à chaque sigspec sont affichées. Si aucun argument n'est fourni ou si seul -p est donné, trap imprime la liste des commandes associées à chaque signal. L'option -l force le shell à imprimer une liste de noms de signaux et leurs numéros correspondants. Chaque sigspec est soit un nom de signal défini dans <signal.h>, soit un numéro de signal. Les noms de signal ne sont pas sensibles à la casse et le SIG est facultatif.

Si un sigspec est EXIT (0) la commande arg est exécutée à la sortie du shell. Si un sigspec est DEBUG, la commande arg est exécutée avant chaque commande simple, Commande for, commande case, commande select, chaque arithmétique pour la commande, et avant l'exécution de la première commande dans une fonction shell (voir SHELL GRAMMAIRE ci-dessus). Reportez-vous à la description de l'option extdebug du commande intégrée de shopt pour plus de détails sur son effet sur le piège DEBUG. Si un sigspec est RETURN, la commande arg est exécutée à chaque fois qu'une fonction shell ou un script est exécuté avec le . ou les commandes internes de source finissent de s'exécuter.

Si un sigspec est ERR, la commande arg est exécutée chaque fois qu'un pipeline (qui peut consister en une seule commande simple), une liste ou une commande composée renvoie un état de sortie différent de zéro, sous réserve des conditions suivantes. Le piège ERR n'est pas exécuté si la commande qui a échoué fait partie de la liste de commandes suivant immédiatement un mot-clé while ou until, une partie du test dans une instruction if, partie d'une commande exécutée dans une liste && ou || sauf la commande suivant le dernier && ou || , n'importe quelle commande dans un pipeline sauf la dernière, ou si la valeur de retour de la commande est inversée à l'aide de !. Ce sont les mêmes conditions auxquelles obéit l'option errexit (-e).

Les signaux ignorés lors de l'entrée dans le shell ne peuvent pas être piégés ou réinitialisés. Les signaux piégés qui ne sont pas ignorés sont réinitialisés à leurs valeurs d'origine dans un environnement de sous-shell ou de sous-shell lorsqu'un est créé. Le statut de retour est faux si un sigspec est invalide ; sinon trap renvoie vrai.

type [-aftpP] name [name ...]

Sans option, indiquez comment chaque nom serait interprété s'il était utilisé comme nom de commande. Si l'option -t est utilisée, type affiche une chaîne parmi alias, mot-clé, function, builtin ou file si name est un alias, un mot réservé du shell, une fonction, un builtin ou un fichier disque, respectivement. Si le nom n'est pas trouvé, alors rien n'est imprimé et un état de sortie faux est renvoyé. Si l'option -p est utilisée, type renvoie soit le nom du fichier disque qui serait exécuté si nom était spécifié comme nom de commande , ou rien si ``type -t nom'' ne renverrait pas fichier. L'option -P force une recherche PATH pour chaque nom, même si ``type -t nom'' ne renverrait pas fichier. Si une commande est hachée, -p et -P impriment la valeur hachée, qui n'est pas nécessairement le fichier qui apparaît en premier dans PATH. Si l'option -a est utilisée, type imprime tous les endroits qui contiennent un exécutable nommé nom. Cela inclut les alias et les fonctions, si et seulement si l'option -p n'est pas également utilisée. La table des commandes hachées n'est pas consultée lors de l'utilisation de -a. L'option -f supprime la recherche de fonction shell, comme avec la commande intégrée type renvoie true si tous les arguments sont trouvés, false s'il y en a ne sont pas trouvés.

ulimit [-HS] -a
ulimit [-HS] [-bcdefiklmnpqrstuvxPRT [limit]]

Fournit un contrôle sur les ressources disponibles pour le shell et les processus démarrés par celui-ci, sur les systèmes qui permettent un tel contrôle. Les options -H et -S spécifient que la limite stricte ou souple est définie pour la ressource donnée. Une limite stricte ne peut pas être augmentée par un utilisateur non root une fois qu'elle est définie ; une limite souple peut être augmentée jusqu'à la valeur de la limite dure. Si ni -H ni -S n'est spécifié, les limites logicielles et strictes sont définies. La valeur de limit peut être un nombre dans l'unité spécifiée pour la ressource ou l'une des valeurs spéciales hard, soft ou illimité, qui représentent respectivement la limite stricte actuelle, la limite souple actuelle et aucune limite. Si limit est omis, la valeur actuelle de la limite flexible de la ressource est affichée, à moins que l'option -H ne soit donnée. Lorsque plusieurs ressources sont spécifiées, le nom et l'unité de la limite, le cas échéant, sont imprimés avant la valeur. Les autres options sont interprétées comme suit :

-a

Toutes les limites actuelles sont signalées ; aucune limite n'est fixée

-b

La taille maximale du tampon de socket

-c

La taille maximale des fichiers core créés

-d

La taille maximale du segment de données d'un processus

-e

La priorité d'ordonnancement maximale ("nice")

-f

La taille maximale des fichiers écrits par le shell et ses enfants

-i

Le nombre maximum de signaux en attente

-k

Le nombre maximum de kqueues pouvant être allouées

-l

La taille maximale qui peut être verrouillée en mémoire

-m

La taille maximale de l'ensemble résident (de nombreux systèmes ne respectent pas cette limite)

-n

Le nombre maximum de descripteurs de fichiers ouverts (la plupart des systèmes ne permettent pas de définir cette valeur)

-p

La taille du canal en blocs de 512 octets (cela peut ne pas être défini)

-q

Le nombre maximal d'octets dans les files d'attente de messages POSIX

-r

La priorité maximale de planification en temps réel

-s

La taille maximale de la pile

-t

La quantité maximale de temps CPU en secondes

-u

Le nombre maximum de processus disponibles pour un seul utilisateur

-v

La quantité maximale de mémoire virtuelle disponible pour le shell et, sur certains systèmes, pour ses enfants

-x

Le nombre maximum de verrous de fichiers

-P

Le nombre maximum de pseudo-terminaux

-R

Le temps maximum qu'un processus en temps réel peut exécuter avant de se bloquer, en microsecondes

-T

Le nombre maximum de threads

Si limit est donné et que l'option -a n'est pas utilisée, limit est la nouvelle valeur de la ressource spécifiée. Si aucune option n'est donnée, alors -f est supposé. Les valeurs sont par incréments de 1024 octets, sauf pour -t, qui est en secondes ; -R, qui est en microsecondes ; -p, qui est en unités de blocs de 512 octets ; -P, -T, -b, -k, -n, et -u, qui sont des valeurs non mises à l'échelle ; et, en mode posix, -c et -f, qui sont par incréments de 512 octets. L'état de retour est 0 sauf si une option ou un argument non valide est fourni ou si une erreur se produit lors de la définition d'une nouvelle limite.

umask [-p] [-S] [mode]

Le masque de création de fichier utilisateur est défini sur mode. Si mode commence par un chiffre, il est interprété comme un nombre octal ; sinon, il est interprété comme un masque de mode symbolique similaire à celui accepté par chmod(1). Si mode est omis, la valeur courante du masque est imprimée. L'option -S provoque l'impression du masque sous forme symbolique ; la sortie par défaut est un nombre octal. Si l'option -p est fournie et que mode est omis, la sortie est sous une forme qui peut être réutilisée comme entrée. Le statut de retour est 0 si le mode a été changé avec succès ou si aucun argument mode n'a été fourni, et false sinon.

unalias [-a] [name ...]

Supprimez chaque nom de la liste des alias définis. Si -a est fourni, toutes les définitions d'alias sont supprimées. La valeur de retour est true sauf si un nom fourni n'est pas un alias défini.

unset [-fv] [-n] [name ...]

Pour chaque nom, supprimez la variable ou la fonction correspondante. Si l'option -v est donnée, chaque nom fait référence à une variable shell, et cette variable est supprimée. Les variables en lecture seule ne peuvent pas être désactivées. Si -f est spécifié, chaque nom fait référence à une fonction shell et la définition de la fonction est supprimée. Si l'option -n est fournie et que name est une variable avec l'attribut nameref, name sera désactivé plutôt que la variable à laquelle il fait référence. -n n'a aucun effet si l'option -f est fournie.

Si aucune option n'est fournie, chaque nom fait référence à une variable ; s'il n'y a pas de variable portant ce nom, une fonction portant ce nom, le cas échéant, est désactivée. Chaque variable ou fonction non définie est supprimée de l'environnement transmis aux commandes suivantes. Si l'un des BASH_ALIASES, BASH_ARGV0, BASH_CMDS, BASH_COMMAND, BASH_SUBSHELL, BASHPID, COMP_WORDBREAKS, DIRSTACK, EPOCHREALTIME, EPOCHSECONDS, FUNCNAME , GROUPES, HISTCMD, LINENO, RANDOM, SECONDS ou SRANDOM sont désactivés, ils perdent leurs propriétés spéciales, même s'ils sont ensuite réinitialisés.

Le statut de sortie est vrai sauf si un nom est en lecture seule.

wait [-fn] [-p varname] [id ...]

Attend chaque processus enfant spécifié et renvoie son état de terminaison. Chaque id peut être un ID de processus ou une spécification de travail ; si une spécification de travail est donnée, tous les processus du pipeline de ce travail sont attendus. Si id n'est pas donné, wait attend toutes les tâches en arrière-plan en cours d'exécution et la substitution du dernier processus exécuté, si son identifiant de processus est le même que $!,< et le statut de retour est zéro. Si l'option -n est fournie, wait attend une seule tâche de la liste des ids ou, si non ids sont fournis, n'importe quel travail, à terminer et renvoie son état de sortie. Si aucun des arguments fournis n'est un enfant du shell, ou si aucun argument n'est fourni et que le shell n'a pas d'enfants non attendus, l'état de sortie est 127. Si l'option -p est fournie, le processus ou le travail l'identifiant du travail pour lequel le statut de sortie est renvoyé est affecté à la variable varname nommée par l'argument de l'option. La variable sera désactivée initialement, avant tout mission. Ceci n'est utile que lorsque l'option -n est fournie. La fourniture de l'option -f, lorsque le contrôle des tâches est activé, force wait to wait for id à terminer avant de retourner son statut, au lieu de revenir quand il change de statut. Si id spécifie un processus ou un travail inexistant, le statut de retour est 127. Sinon, le statut de retour est le statut de sortie du dernier processus ou travail attendu.

MODE DE COMPATIBILITÉ DE LA COQUE

Bash-4.0 a introduit le concept d'un "niveau de compatibilité shell", spécifié comme un ensemble d'options pour le shopt intégré compat31, compat32, compat40 , compat41, etc.). Il n'y a qu'un seul niveau de compatibilité actuel -- chaque option est mutuellement exclusive. Le niveau de compatibilité est destiné à permettre aux utilisateurs de sélectionner le comportement des versions précédentes qui est incompatible avec les versions plus récentes lors de la migration des scripts pour utiliser les fonctionnalités et le comportement actuels. Il s'agit d'une solution temporaire.

Cette section ne mentionne pas le comportement qui est standard pour une version particulière (par exemple, définir compat32 signifie que citer le rhs de l'opérateur de correspondance regexp cite des caractères regexp spéciaux dans le mot, ce qui est le comportement par défaut dans bash- 3.2 et plus).

Si un utilisateur active, par exemple, compat32, cela peut affecter le comportement d'autres niveaux de compatibilité jusqu'au niveau de compatibilité actuel inclus. L'idée est que chaque niveau de compatibilité contrôle le comportement qui a changé dans cette version de bash, mais ce comportement peut avoir été présent dans des versions antérieures. Par exemple, le changement d'utilisation des comparaisons basées sur les paramètres régionaux avec la commande [[ est venu dans bash-4.1, et les versions antérieures utilisaient des comparaisons basées sur ASCII, donc l'activation de compat32 activera les comparaisons basées sur ASCII également. Cette granularité peut ne pas être suffisante pour toutes les utilisations et, par conséquent, les utilisateurs doivent utiliser les niveaux de compatibilité avec précaution. Lisez la documentation d'une fonctionnalité particulière pour connaître le comportement actuel.

Bash-4.3 a introduit une nouvelle variable shell :

BASH_COMPAT. La valeur attribuée à cette variable (un numéro de version décimal comme 4.2, ou un entier correspondant à l'option compatNN, comme 42) détermine le niveau de compatibilité.

À partir de bash-4.4, Bash a commencé à déprécier les anciens niveaux de compatibilité. Finalement, les options seront supprimées au profit de BASH_COMPAT.

Bash-5.0 est la version finale pour laquelle il y aura une option d'achat individuelle pour la version précédente. Les utilisateurs doivent utiliser BASH_COMPAT sur bash-5.0 et versions ultérieures.

Le tableau suivant décrit les changements de comportement contrôlés par chaque paramètre de niveau de compatibilité. La balise compatNN est utilisée comme raccourci pour définir le niveau de compatibilité sur NN en utilisant l'un des mécanismes suivants. Pour les versions antérieures à bash-5.0, le niveau de compatibilité peut être défini à l'aide de l'option shopt compatNN correspondante. Pour bash-4.3 et versions ultérieures, la variable BASH_COMPAT est préférée, et elle est requise pour bash-5.1 et versions ultérieures.

compat31
  • citer le rhs de l'opérateur de correspondance d'expression régulière de la commande [[ (=~) n'a aucun effet spécial

compat32
  • l'interruption d'une liste de commandes telle que "a ; b ; c" provoque l'exécution de la commande suivante dans la liste (dans bash-4.0 et les versions ultérieures, le shell agit comme s'il recevait l'interruption, donc l'interruption d'une commande dans une liste abandonne l'exécution de toute la liste)

compat40
  • les opérateurs < et > de la commande [[ ne prennent pas en compte les paramètres régionaux actuels lors de la comparaison de chaînes ; ils utilisent l'ordre ASCII. Les versions de Bash antérieures à bash-4.1 utilisent le classement ASCII et strcmp(3) ; bash-4.1 et versions ultérieures utilisent la séquence de classement des paramètres régionaux actuels et strcoll(3).

compat41
  • en mode posix, le temps peut être suivi d'options et être toujours reconnu comme un mot réservé (c'est l'interprétation POSIX 267)

  • en mode posix, l'analyseur requiert qu'un nombre pair de guillemets simples se produisent dans la partie mot d'un guillemet double expansion des paramètres et les traite spécialement, de sorte que les caractères entre guillemets simples soient considérés comme entre guillemets (c'est l'interprétation POSIX 221)

compat42
  • la chaîne de remplacement dans la substitution de modèle entre guillemets doubles ne subit pas la suppression des guillemets, comme c'est le cas dans les versions postérieures à bash-4.2

  • en mode posix, les guillemets simples sont considérés comme spéciaux lors du développement de la partie mot d'un développement de paramètre entre guillemets doubles et peuvent être utilisés pour citer une accolade fermante ou un autre caractère spécial (ceci fait partie de l'interprétation POSIX 221); dans les versions ultérieures, les guillemets simples ne sont pas spéciaux dans les extensions de mots entre guillemets doubles

compat43
  • le shell n'affiche pas de message d'avertissement en cas de tentative d'utilisation d'une affectation composée entre guillemets comme argument à déclarer (declare -a foo='(1 2)'). Les versions ultérieures avertissent que cette utilisation est obsolète

  • les erreurs d'expansion de mot sont considérées comme des erreurs non fatales qui font échouer la commande en cours, même en mode posix (le comportement par défaut est d'en faire des erreurs fatales qui provoquent la fermeture du shell)

  • lors de l'exécution d'une fonction shell, l'état de la boucle (while/until/etc.) n'est pas réinitialisé, donc interrompre ou continuer dans cette fonction interrompra ou continuera les boucles dans le contexte d'appel. Bash-4.4 et versions ultérieures réinitialisent l'état de la boucle pour éviter cela

compat44
  • le shell configure les valeurs utilisées par BASH_ARGV et BASH_ARGC afin qu'ils puissent s'étendre aux paramètres de position du shell même si le mode de débogage étendu n'est pas activé

  • un sous-shell hérite des boucles de son contexte parent, donc break ou continue entraînera la sortie du sous-shell. Bash-5.0 et versions ultérieures réinitialisent l'état de la boucle pour empêcher la sortie

  • les affectations de variables précédant les commandes intégrées telles que export et readonly qui définissent des attributs continuent d'affecter les variables portant le même nom dans l'environnement appelant même si le shell n'est pas en mode posix

compat50
  • Bash-5.1 a changé la façon dont $RANDOM est généré pour introduire un peu plus d'aléatoire. Si le niveau de compatibilité du shell est défini sur 50 ou moins, il revient à la méthode de bash-5.0 et des versions précédentes, donc l'ensemencement du générateur de nombres aléatoires en attribuant une valeur à < RANDOM produira la même séquence comme dans bash-5.0/p>

  • Si la table de hachage de la commande est vide, les versions de bash antérieures à bash-5.1 affichaient un message d'information à cet effet, même lors de la production d'une sortie pouvant être réutilisée comme entrée. Bash-5.1 supprime ce message lorsque l'option -l est fournie.

COQUE RESTREINTE

Si bash est démarré avec le nom rbash, ou si l'option -r est fournie à l'invocation, le shell devient restreint. Un shell restreint est utilisé pour mettre en place un environnement plus contrôlé que le shell standard. Il se comporte de la même manière que bash à l'exception que les éléments suivants ne sont pas autorisés ou ne sont pas exécutés :

  • changer de répertoire avec cd

  • définir ou désactiver les valeurs de SHELL, PATH, HISTFILE, ENV ou BASH_ENV >

  • en spécifiant les noms de commande contenant /

  • en spécifiant un nom de fichier contenant un / comme argument de la commande intégrée .

  • spécifier un nom de fichier contenant une barre oblique comme argument de la commande intégrée history

  • spécifier un nom de fichier contenant une barre oblique comme argument de l'option -p de la commande intégrée hash

  • importation de définitions de fonctions à partir de l'environnement shell au démarrage

  • analyse de la valeur de SHELLOPTS à partir de l'environnement shell au démarrage

  • rediriger la sortie à l'aide des opérateurs de redirection >, >|, <>, >&, &> et >>

  • en utilisant la commande intégrée exec pour remplacer le shell par une autre commande

  • ajouter ou supprimer des commandes intégrées avec les options -f et -d à la commande intégrée enable

  • en utilisant la commande enable builtin pour activer les commandes intégrées désactivées

  • en spécifiant l'option -p à la commande intégrée command

  • désactiver le mode restreint avec set +r ou set +o restreint.

Ces restrictions sont appliquées après la lecture des fichiers de démarrage.

rbash désactive toutes les restrictions dans le shell généré pour exécuter le script.

VOIR ÉGALEMENT

Bash Reference Manual, Brian Fox and Chet Ramey
The Gnu Readline Library, Brian Fox and Chet Ramey
The Gnu History Library, Brian Fox and 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 -- a description of posix mode
sh(1), ksh(1), csh(1)
emacs(1), vi(1)
readline(3)

DES DOSSIERS

 /bin/bash 

L'exécutable bash

 /etc/profile 

Le fichier d'initialisation à l'échelle du système, exécuté pour les shells de connexion

 ~/.bash_profile 

Le fichier d'initialisation personnel, exécuté pour les shells de connexion

 ~/.bashrc 

Le fichier de démarrage individuel par shell interactif

 ~/.bash_logout 

Le fichier de nettoyage du shell de connexion individuel, exécuté lorsqu'un shell de connexion se ferme

 ~/.inputrc 

Fichier d'initialisation readline individuel

AUTEURS

Brian Fox, Fondation pour le logiciel libre
bfox@gnu.org

Chet Ramey, Université Case Western Reserve
chet.ramey@case.edu

RAPPORTS DE BUG

Si vous trouvez un bogue dans bash, vous devez le signaler. Mais d'abord, vous devez vous assurer qu'il s'agit bien d'un bogue et qu'il apparaît dans la dernière version de bash. La dernière version est toujours disponible sur ftp://ftp.gnu.org/pub/gnu/bash/.

Une fois que vous avez déterminé qu'un bogue existe réellement, utilisez la commande bashbug pour soumettre un rapport de bogue. Si vous avez un correctif, nous vous encourageons également à l'envoyer par courrier ! Les suggestions et les rapports de bogues "philosophiques" peuvent être envoyés par courrier à bug-bash@gnu.org ou publiés sur le groupe de discussion Usenet gnu.bash.bug .

TOUS les rapports de bogue doivent inclure :

The version number of bash
The hardware and operating system
The compiler used to compile
A description of the bug behaviour
A short script or `recipe' which exercises the bug

bashbug insère automatiquement les trois premiers éléments dans le modèle qu'il fournit pour remplir un rapport de bogue.

Les commentaires et les rapports de bogues concernant cette page de manuel doivent être adressés à chet.ramey@case.edu.

INSECTES

C'est trop grand et trop lent.

Il existe quelques différences subtiles entre bash et les versions traditionnelles de sh, principalement à cause de la spécification POSIX.

Les alias prêtent à confusion dans certaines utilisations.

Les commandes et fonctions intégrées du shell ne peuvent pas être arrêtées/redémarrées.

Commandes composées et séquences de commandes de la forme `a ; b ; c' ne sont pas gérés correctement lorsque la suspension du processus est tentée. Lorsqu'un processus est arrêté, le shell exécute immédiatement la commande suivante dans la séquence. Il suffit de placer la séquence de commandes entre parenthèses pour la forcer dans un sous-shell, qui peut être arrêté comme une unité.

Les variables de tableau ne peuvent pas (encore) être exportées.

Il ne peut y avoir qu'un seul coprocessus actif à la fois.