BASH(1) Manuel de l'utilisateur Linux BASH(1)
NOM
bash - Interpréteur de commandes GNU Bourne-Again SHell.
SYNOPSIS
bash [options] [fichier]
COPYRIGHT
Bash est sous Copyright (C) 1989, 1999 de la Free Software Foundation,
Inc.
DESCRIPTION
Bash est un interpréteur (Shell) compatible sh qui exécute les comman‐
des lues depuis l'entrée standard, ou depuis un fichier. Bash incor‐
pore également des fonctionnalités provenant des interpréteurs Korn et
C-shell (ksh et csh).
Bash est conçu pour être conforme aux spécifications IEEE concernant
les shells et les outils Posix (Groupe de travail de l'IEEE 1003.2).
OPTIONS
En plus des caractères d'options documentés dans la description de la
commande interne set, bash accepte les arguments suivants lorsqu'on
l'invoque :
-c chaîne Si l'argument -c est présent, les commandes sont interprétées
depuis la chaîne fournie. S'il existe d'autres arguments
après la chaîne, ils sont transmis comme paramètres position‐
nels, en commençant par $0.
-r Si l'option -r est présente, l'interpréteur est restreint
(voir SHELLS RESTREINTS plus bas).
-i Si l'option -i est présente, l'interpréteur est interactif.
-s Si l'option -s est présente, ou s'il n'y a plus d'arguments
sur la ligne de commande, après le traitement des options,
l'interprétation se fera depuis l'entrée standard. Cette
option permet de remplir les paramètres positionnels tout en
invoquant un shell interactif.
-D Une liste de toutes les chaînes entre '"' et précédées de $
est affichée sur la sortie standard. Ce sont les chaînes qui
sont sujettes à une traduction quand la localisation n'est ni
celle du C, ni celle du standard POSIX. Cela nécessite
l'option -n ; aucune commande ne sera exécutée.
-- Deux caractères -- permettent d'indiquer la fin des options,
et empêchent le traitement des arguments restants. Ces
derniers sont alors traités comme des noms de fichiers et des
paramètres. - est équivalent à --.
Bash reconnaît également plusieurs options multi-caractères. Ces
options doivent, pour être reconnues, apparaître sur la ligne de com‐
mande avant les options mono-caractère.
--dump-po-strings
Équivalent à -D, mais la sortie est dans le format des
fichiers po (objets portables) de l'outil Gnu gettext.
--dump-strings
Équivalent à -D.
--help Affiche un message d'aide sur la sortie standard et se ter‐
mine avec succès.
--login Demande que bash Se comporte comme un shell de login. (Voir
INVOCATION plus bas).
--noediting
Ne pas utiliser la bibliothèque GNU readline pour la lecture
des lignes de commande, lorsque le shell est interactif.
--noprofile
Ne lire ni le fichier de configuration générale /etc/profile
ni les fichiers personnalisés ~/.bash_profile, ~/.bash_login,
ou ~/.profile. Par défaut bash lit ces fichiers lorsqu'il
est invoqué comme shell de login (voir le paragraphe INVOCA‐
TION plus bas).
-norc Ne pas lire le fichier de configuration personnalisée
~/.bashrc lorsque le shell est interactif. Cette option est
activée par défaut lorsque bash est invoqué sous le nom sh.
--posix Aligner le comportement de bash sur le standard Posix 1003.2,
en ce qui concerne les options dont l'action par défaut
diffère de ce standard.
--rcfile fichier
Exécuter les commandes contenues dans le fichier mentionne,
plutôt que celles du fichier de configuration personnelle
~/.bashrc, si le shell est interactif (voir le paragraphe
INVOCATION plus bas).
--restricted
Le shell devient restreint (voir le paragraphe SHELLS
RESTREINTS plus bas).
--rpm-requires
Affiche une liste des fichiers qui sont nécessaires pour le
lancement d'un script shell. Ceci nécessite l'option '-n' et
est soumis aux mêmes limites que les vérifications d'erreurs
à la compilation ; les back-quotes, les tests [] et les éval‐
utations ne sont pas analysés, et certaines erreurs peuvent
être oubliées.
--verbose Équivalent à -v
--version Afficher le numéro de version de bash sur la sortie standard
et terminer avec succès.
ARGUMENTS
S'il reste des arguments sur la ligne de commande après l'analyse des
options, et si ni l'option -c, ni l'option -s ne sont présentes, le
premier argument est supposé être le nom du fichier dans lequel lire
les commandes. Lorsque bash est invoqué de cette manière, $0 contient
le nom du fichier, et les autres paramètres positionnels contiennent
les arguments restants. Bash lit, et exécute, les commandes depuis ce
fichier, puis se termine. Le code de retour de bash est celui de la
dernière commande exécutée dans le fichier script. Si aucune commande
n'a été exécutée, le code de retour est 0.
INVOCATION
Un shell est dit de login si le premier caractère de son argument
numéro zéro est un -, ou s'il est invoqué avec l'option -login.
Un shell est interactif si son entrée standard et sa sortie standard
sont toutes deux connectées à un terminal (déterminé par la fonction
isatty(3)), ou s'il est invoqué avec l'option -i. Le paramètre PS1 est
positionné, et le paramètre $- contient la lettre i si bash est inter‐
actif, ce qui permet à un script ou à un fichier de démarrage de
vérifier l'état du shell.
Le paragraphe suivant décrit comment bash exécute ses fichiers d'ini‐
tialisation. Si l'un de ces fichiers existe mais n'est pas accessible
en lecture, bash signale une erreur. Les tildes sont remplacées par
des noms de fichiers comme décrit dans le paragraphe Développement du
Tilde de la section Développement.
Lorsque bash est lancé comme shell de login interactif, ou comme shell
non-interactif avec l'option --login, il lit et exécute tout d'abord
les commandes se trouvant dans le fichier /etc/profile s'il existe.
Après lecture de ce fichier, il recherche ~/.bash_profile,
~/.bash_login, et ~/.profile, dans cet ordre, et exécute les commande
se trouvant dans le premier fichier existant et accessible en lecture.
L'option --noprofile peut être utilisée au démarrage du shell pour
empêcher ce comportement.
Lorsqu'un shell de login se termine, bash lit et exécute les commandes
du fichier ~/.bash_logout, s'il existe.
Quand un shell interactif démarre sans être un shell de login, bash lit
et exécute les commandes se trouvant dans ~/.bashrc s'il existe. Ce
comportement peut être inhibé à l'aide de l'option --norc. L'option
--rcfile fichier forcera bash à exécuter les commandes dans fichier
plutôt que dans ~/.bashrc.
Quand bash est démarré de manière non-interactive, pour lancer un
script shell par exemple, il recherche la variable BASH_ENV dans
l'environnement, développe son contenu si elle existe, et considère
cette valeur comme le nom d'un fichier à lire et exécuter. Bash se
comporte comme si la commande suivante se trouvait en début de script :
if [ -n "$BASH_ENV" ]; then . "$BASH_ENV"; fi
mais la valeur de la variable PATH n'est pas utilisée pour rechercher
le fichier.
Si bash est invoqué sous le nom sh, il essaye d'imiter le comportement
de démarrage des versions historiques de sh autant que possible, tout
en restant conforme au standard Posix. Lorsqu'il est invoqué comme
shell de login interactif (ou non-interactif avec l'option --login), il
essaye d'abord d'exécuter les commandes se trouvant dans /etc/profile
et ~/.profile, dans cet ordre. L'option -noprofile peut toujours être
utilisée pour désactiver ce comportement. Quand il est invoqué en tant
que shell interactif sous le nom sh, bash consulte la variable ENV,
développe sa valeur si elle est définie et utilise le résultat en tant
que nom de fichier à lire et exécuter. Comme un shell invoqué sous le
nom sh n'essaye pas d'exécuter d'autre fichier de démarrage, l'option
--rcfile n'a aucun effet. Un shell non interactif invoqué sous le nom
sh ne lit aucun autre fichier d'initialisation. Quand il est invoqué
sous le nom sh, bash entre en mode posix après avoir lu les fichiers
d'initialisation.
Quand bash est invoqué en mode posix, avec l'option -posix sur la ligne
de commande, il suit ce standard en ce qui concerne les fichiers de
démarrage. Dans ce cas, la variable ENV est développée, et le fichier
qui en résulte est exécuté. On n'exécute pas d'autre fichier d'initial‐
isation.
Bash tente de déterminer s'il est exécuté par le démon lançant les
shells distants (généralement appelé rshd ). Si bash se rend compte
qu'il est exécuté par rshd, il lit et exécute les commandes de
~/.bashrc si ce fichier existe et est lisible. Il n'a pas ce comporte‐
ment lorsqu'il est invoqué sous le nom sh. L'option --norc peut être
utilisé pour interdire ce comportement, et l'option --rcfile permet de
forcer l'utilisation d'un autre fichier, mais rshd n'utilise générale‐
ment pas ces options et ne permet pas non plus leur utilisation.
Si le shell est lancé avec un identifiant effectif d'utilisateur (ou de
groupe) différent de l'identifiant réel, et si l'option -p n'est pas
utilisée, aucun fichier d'initialisation n'est lu, les fonctions du
shell ne sont pas importées depuis l'environnement, la variable SHEL‐
LOPTS est ignorée si elle apparaît dans l'environnement, et l'identifi‐
ant effectif de l'utilisateur (du groupe) est remplacé par l'ID réel.
Si l'option -p est fournie, le démarrage est le même mais l'ID effectif
n'est pas modifié.
DÉFINITIONS
Les définitions suivantes sont utilisées tout au long de ce document.
blanc Un espace ou une tabulation.
mot une séquence de caractères considérée comme une unité élémen‐
taire par le shell. On parle également de token (jeton).
nom un mot ne contenant que des caractères alphanumériques ou le
soulignement (underscore), commençant par une lettre ou un
soulignement. On s'y réfère également sous le terme identifica‐
teur.
méta-caractère
Un caractère qui, non protégé, sépare les mots. Un de ceux-ci :
| & ; ( ) < > espace tabulation
opérateur de contrôle
Un jeton ayant une fonction de contrôle. L'un des symboles suiv‐
ants :
|| & && ; ;; ( ) |
MOTS RÉSERVÉS
Les mots réservés ont une signification spéciale pour le shell. Les
mots suivants sont réservés et interprétés par le shell lorsqu'ils ne
sont pas protégés, et s'il s'agit soit du premier mot d'une commande
simple, soit du troisième mot d'une commande case ou for (voir le para‐
graphe GRAMMAIRE DU SHELL ci-dessous).
! case do done elif else esac fi for function if in select then until
while { } time [[ ]]
GRAMMAIRE DU SHELL
Commandes simples
Une commande simple est une séquence d'affectations de variables facul‐
tative, suivie de mots séparés par des blancs et des redirections, et
terminée par un opérateur de contrôle. Le premier mot indique la com‐
mande à exécuter. Les mots suivants sont transmis en argument à cette
commande.
La valeur de retour d'une commande simple est son code de sortie, ou
128+n si la commande a été interrompue par le signal n.
Pipelines
Un pipeline est une séquence d'une ou plusieurs commandes séparées par
le caractère |. Le format d'un pipeline est :
[time [-p]] [ ! ] commande_1 [ | commande_2 ... ]
La sortie standard de la commande_1 est connectée à l'entrée standard
de la commande_2. Cette connexion est établie avant toute redirection
indiquée dans une commande elle-même (voir le paragraphe REDIRECTION
plus bas).
Si le mot réservé ! précède un pipeline, la valeur de sortie de celui-
ci sera la NÉGATION logique de la valeur de retour de la dernière com‐
mande. Sinon, le code de retour d'un pipeline sera celui de la dernière
commande. L'interpréteur attend la fin de toutes les commandes du
pipeline avant de renvoyer une valeur.
Si le mot réservé time précède le pipeline, les temps passés par le
programme en mode utilisateur et système sont indiqués quand le pipe‐
line se termine. L'option -p change le format de sortie pour celui
spécifié par POSIX. La variable TIMEFORMAT peut être affectée avec une
chaîne de format indiquant comment les informations horaires doivent
être affichées; consultez la descriptions de TIMEFORMAT dans Variables‐
duShell plus bas.
Chaque commande du pipeline est exécutée comme un processus indépendant
(c'est à dire dans un sous-shell).
Listes
Une liste est une séquence d'un ou plusieurs pipelines séparés par l'un
des opérateurs ;, &, &&, ou ⎪⎪, et terminée éventuellement par ;, &, ou
.
Dans cette liste d'opérateurs, && et ⎪⎪ ont une précédence identique,
suivis par ; et &, qui ont également une précédence identique.
Si une commande se termine par l'opérateur de contrôle &,
l'interpréteur l'exécute en arrière-plan, dans un sous-shell.
L'interpréteur n'attend pas que la commande se termine et retourne un
code 0. Les commandes séparées par un ; sont exécutées successivement,
l'interpréteur attend que chaque commande se termine avant de lancer la
suivante. Le code de retour est celui de la dernière commande exécutée.
Les opérateurs de contrôle && et ⎪⎪ indiquent respectivement une liste
liée par un ET, et une liste liée par un OU. Une liste ET a la forme
commande_1 && commande_2
commande_2 est exécutée si, et seulement si, commande_1 renvoie un code
de retour nul.
Une liste OU a la forme
commande_1 ⎪⎪ commande_2
commande_2 est exécutée si, et seulement si commande_1 renvoie un code
de retour non-nul. La valeur de retour des listes ET et OU est celle
de la dernière commande exécutée dans la liste.
Commandes composées
Une commande composée est l'une des constructions suivantes :
(liste)
liste est exécutée dans un sous-shell. Les affectations de vari‐
ables, et les commandes internes qui affectent l'environnement
de l'interpréteur n'ont pas d'effet une fois que la commande se
termine. Le code de retour est celui de la liste.
{ liste; }
liste est simplement exécutée avec l'environnement du shell en
cours. liste doit se terminer par un caractère fin-de-ligne ou
un point-virgule. Cette construction est connue sous le nom de
commandes groupées. Le code de retour est celui de la liste.
L'expression est évaluée selon les règles décrites
plus bas au paragraphe ÉVALUATION ARITHMÉTIQUE. Si la valeur
arithmétique de l'expression est non-nulle, le code renvoyé est
zéro ; sinon 1 est renvoyé. Cela est strictement identique à let
"expression".
[[ expression ]]
Renvoie 1 ou 0 selon la valeur de la condition expression. les
expressions sont composées d'éléments primaires décrits dans
EXPRESSIONS CONDITIONNELLES. Le coupage des mots et l'expansion
des chemins ne sont pas réalisés sur les portions entre [[ et
]]; l'expansion des tildes, des paramètres, des variable, des
expressions arithmétiques, la substitution des commandes et des
processus, ainsi que la disparition des apostrophes sont
réalisés.
Quand les opérateurs == et != sont utilisés, la chaîne placée à
droite de l'opérateur est considérée comme étant un motif et est
recherchée selon les règles décrites dans Motifs génériques. La
valeur renvoyée est 0 si les chaînes correspondent (ou respec‐
tivement ne correspondent pas), et 1 sinon. Toute partie du
motif peut être protégée avec des apostrophes pour forcer sa
comparaison en tant que chaîne (sans développement).
Les expressions peuvent être combinées en utilisant les
opérateurs suivants, par ordre décroissant de priorité :
( expression )
Retourne la valeur de l'expression. Cela peut être
utilisé pour outrepasser la priorité normale des
opérateurs.
! expression
Vraie si expression est vraie.
expression1 && expression2
Vraie si expression1 et expression2 sont toutes les deux
vraies.
expression1 || expression2
Vraie si expression1 ou expression2 est vraie.
Les opérateurs && et || n'exécutent pas expression2 si la valeur de
expression1 suffit à déterminer le code de retour de l'expression con‐
ditionnelle entière.
for nom [ in mot ] ; do liste ; done
La liste de mots à la suite de in est développée, créant une
liste d'éléments. La variable nom prend successivement la
valeur de chacun des éléments, et liste est exécutée à chaque
fois. Si in mot est omis, la commande for exécute la liste une
fois pour chacun des paramètres positionnels ayant une valeur
(voir le paragraphe PARAMÈTRES plus bas). Le code de retour est
celui de la dernière commande exécutée. Si le développement de
ce qui suit in est une liste vide, aucune commande n'est
exécutée et 0 est renvoyé.
select nom [ in mot ] ; do liste ; done
La liste de mots à la suite de in est développée, créant une
liste d'éléments. L'ensemble des mots développés est imprimé
sur la sortie d'erreur standard, chacun précédé par un nombre.
Si in mot est omis, les paramètres positionnels sont imprimés
(voir le paragraphe PARAMÈTRES plus bas). Le symbole d'accueil
PS3 est affiché, et une ligne est lue depuis l'entrée standard.
Si la ligne est constituée d'un nombre correspondant à l'un des
mots affichés, la variable nom est remplie avec ce mot. Si la
ligne est vide, les mots et le symbole d'accueil sont affichés à
nouveau. Si une fin de fichier (EOF) est lue, la commande se
termine. Pour toutes les autres valeurs, la variable nom est
vidée. La ligne lue est stockée dans la variable REPLY. La
liste est exécutée après chaque sélection, jusqu'à ce qu'une
commande break ou return soit atteinte. Le code de retour de
select est celui de la dernière commande exécutée dans la liste,
ou zéro si aucune commande n'est exécutée.
case mot in [ motif [ | motif ] ... ) liste ;; ] ... esac
Une commande case commence d'abord par développer le mot, puis
essaye de le mettre en correspondance successivement avec chacun
des motifs en utilisant les mêmes règles que pour les noms de
fichiers (voir le paragraphe Développement des noms de fichiers
plus bas). Quand une correspondance est trouvée, la liste
associée est exécutée. Dès qu'un motif correct a été trouvé, il
n'y a plus d'autre essais. Le code retour est zéro si aucun
motif ne correspond, sinon il s'agit du code de la dernière com‐
mande exécutée dans la liste.
if liste ; then liste ; [ elif liste ; then liste ; ] ... [ else liste
; ] fi
La liste du if est exécutée. Si son code de retour est nul, la
liste du then est exécutée. Sinon, chacune des listes des elif
est exécutée successivement, et si un code de retour est nul, la
liste du then associé est exécutée, et la commande se termine.
En dernier ressort, la liste du else est exécutée. Le code de
retour est celui de la dernière commande exécutée, ou zéro si
aucune condition n'a été vérifiée.
while liste ; do liste ; done
until liste ; do liste ; done
La commande while répète la liste du do tant que la dernière
commande de la liste du while renvoie un code de retour nul. La
commande until agit de même manière, sauf que le test est
négatif, et la liste du do est exécutée tant que la liste du
until renvoie un code non-nul. Le code de retour des commandes
while et until est celui de la dernière commande exécutée dans
la liste do, ou zéro si aucune commande n'a été exécutée.
[ function ] nom () { liste; }
Ceci définit une fonction possédant le nom mentionné. Le corps
de cette fonction est la liste de commandes entre { et }. Cette
liste est exécutée dès que le nom de la fonction est invoqué en
tant que commande simple. Le code de retour est celui de la
dernière commande exécutée dans le corps de la fonction. (voir
le paragraphe FONCTIONS plus bas)
COMMENTAIRES
Dans un shell non-interactif, ou dans un shell interactif avec l'option
-o interactive-comments activée par la commande interne shopt (voir
COMMANDES INTERNES DU SHELL plus bas), un mot commençant par # permet‐
tra d'ignorer tous les caractères restants sur la ligne. Un shell
interactif sans l'option interactive-comments n'autorise pas les com‐
mentaires. L'option interactive_comments est activée par défaut dans
les shells interactifs.
PROTECTION
Les protections (quoting) permettent de forcer l'interpréteur à ignorer
la signification spéciale de certains caractères ou mots. Les protec‐
tions peuvent être utilisées pour empêcher le traitement des caractères
spéciaux, éviter la reconnaissance des mots-réservés ou empêcher le
développement des paramètres.
Tous les méta-caractères mentionnés dans le paragraphe DÉFINITIONS plus
haut ont des significations spéciales pour le shell, et doivent être
protégés pour garder leur propre valeur. Il y a trois mécanismes de
protection : le caractère d'échappement, les apostrophes (quote) et les
guillemets (double-quote).
Un caractère backslash (\), quand il n'est pas protégé, représente le
caractère d'échappement. Il préserve la valeur littérale du caractère
qui le suit, à l'exception du . Si une séquence
\ apparaît, et si le backslash n'est pas protégé,
l'ensemble \ est considéré comme une continuation de
ligne (autrement dit, il est ignoré).
Encadrer des caractères entre des apostrophes simples préserve la
valeur littérale de chacun des caractères. Une apostrophe ne peut pas
être placée entre deux apostrophes, même si elle est précédée d'un
backslash.
Encadrer des caractères entre des guillemets préserve la valeur
littérale de chacun des caractères sauf $, `, et \. Les caractères $
et ` conservent leurs significations spéciales, même entre guillemets.
Le backslash ne conserve sa signification que lorsqu'il est suivi par
$, `, ", \, ou . Un guillemet peut être protégé entre
deux guillemets, à condition de le faire précéder par un backslash.
Les caractères spéciaux * et @ ont des significations spéciales
lorsqu'ils se trouvent entre guillemets (voir le paragraphe PARAMÈTRES
ci-dessous).
Les mots de la forme $'chaîne' sont traités différemment. Le mot est
développé en chaîne avec les séquences d'échappement remplacées par les
séquences standards du C ANSI:
\a alerte (cloche alias bip)
\b effacement arrière
\e un caractère escape
\f fin de page
\n fin de ligne
\r retour chariot
\t tabulation horizontale
\v tabulation verticale
\\ anti-slash (backslash)
\nnn le caractère dont le code ASCII en octal est nnn (un à
trois chiffres)
\xnnn le caractère dont le code ASCII en hexadécimal est nnn
(un à trois chiffres)
Le résultat après traduction est protégé par des apostrophes comme si
le symbole dollar n'avait pas été présent.
Une chaîne entre guillemets précédée d'un symbole dollar ($) sera
traduite selon la localisation en vigueur. Si la locale courante est C
ou POSIX, le symbole dollar est ignoré. Si la chaîne a subi une tra‐
duction ou des remplacements, le résultat est protégé par des
guillemets.
PARAMÈTRES
Un paramètre est une entité permettant de stocker des valeurs, comme
les variables dans les langages de programmation courants. Il peut se
présenter sous forme d'un nom, d'un nombre, ou d'un des caractères
spéciaux décrits plus bas, dans Paramètres Spéciaux. Au niveau du
shell, une variable est un paramètre muni d'un nom.
Un paramètre existe dès qu'on lui attribue une valeur. Une chaîne vide
est une valeur valide. Une fois qu'une variable existe, elle ne peut
être détruite qu'en utilisant la commande interne unset (voir COMMANDES
INTERNES DU SHELL plus bas).
Une variable peut recevoir une valeur par une affectation de la forme
nom=[valeur]
Si aucune valeur n'est indiquée, la variable reçoit une chaîne vide.
Toute valeur est soumise aux principes de développement du tilde, des
paramètres et des variables, de la substitution de commandes, de
l'évaluation arithmétique, et de la suppression des protections (voir
EXPANSION plus bas). Si une variable a son attribut -i activé (voir
declare plus bas, dans le paragraphe COMMANDES INTERNES DU SHELL) alors
la valeur est soumise à l'évaluation arithmétique, même si la syntaxe
$((...)) n'apparaît pas (voir ÉVALUATION ARITHMÉTIQUE plus bas). Les
mots ne sont pas tronqués, sauf avec la séquence "$@" comme cela est
expliqué dans le paragraphe Paramètres Spéciaux ci-dessous. Le
développement des noms de fichiers n'est pas effectué.
Paramètres Positionnels
Un paramètre positionnel est un paramètre indiqué par un ou plusieurs
chiffres (à l'exception du chiffre 0 seul). Les paramètres positionnels
sont remplis avec les arguments du shell lors de son invocation. Ils
peuvent être modifiés avec la commande interne set. On ne peut pas
utiliser d'assignation pour modifier le contenu d'un paramètre posi‐
tionnel. Les paramètres positionnels sont temporairement modifiés lors
de l'exécution d'une fonction du shell (voir le paragraphe FONCTIONS
plus bas).
Un paramètre positionnel constitué de plusieurs chiffres doit être
encadré par des accolades lors de son développement (voir EXPANSION
plus bas).
Paramètres Spéciaux
Il existe plusieurs paramètres ayant un comportement particulier. Ces
paramètres peuvent uniquement être consultés, on ne peut pas les modi‐
fier.
* Se développe en l'ensemble des paramètres positionnels, com‐
mençant à 1. Quand le développement se produit entre des
guillemets, * se transforme en un seul mot constitué de la
valeur de tous les paramètres positionnels séparées par le pre‐
mier caractère de la variable spéciale IFS. Ceci signifie que
"$*" est équivalent à "$1c$2c...", dans laquelle c est le pre‐
mier caractère de la valeur de la variable IFS. Si IFS est
inexistante, les paramètres sont séparés par des espaces. Si
IFS est nulle, les paramètres sont juxtaposés sans séparation.
@ Se développe en l'ensemble des paramètres positionnels, com‐
mençant à 1. Quand le développement a lieu entre guillemets,
chaque paramètre se transforme en un mot distinct. Ceci signifie
que "$@" est équivalent à "$1" "$2" ... Quand il n'y a pas de
paramètres positionnels, "$@" et $@ sont simplement éliminés.
# Correspond au nombre de paramètres positionnels, en base
décimale.
? Fournit le code de retour du dernier pipeline exécuté à l'avant-
plan.
- Est remplacé par la liste des options du shell indiquées durant
l'invocation, configurées avec la commande interne set ou posi‐
tionnées par le shell lui-même (comme avec l'option -i ).
$ Se transforme en PID du shell. Dans un sous-shell (), il se
transforme en PID du shell, et non pas du sous-shell.
! Se transforme en PID de la commande (asynchrone) exécutée en
arrière-plan le plus récemment.
0 Se développe pour donner le nom du shell ou du script. Ce
paramètre est rempli lors de l'initialisation de l'interpréteur.
Si bash est invoqué avec un fichier de commandes, $0 correspond
au nom de ce fichier. Si bash est lancé avec l'option -c, alors
$0 contient le premier argument, s'il y en a un, après la chaîne
de commandes à exécuter. Sinon, ce paramètre contient le chemin
d'accès utilisé pour invoquer bash, comme il l'a reçu en argu‐
ment zéro.
_ Au lancement du shell, contient le chemin absolu du shell ou du
script en cours d'exécution. Devient le dernier argument de la
commande précédente, après développement. Correspond aussi au
chemin d'accès complet de chaque commande exécutée, et se
retrouve dans l'environnement exporté à cette commande. Lors de
la vérification de l'arrivée de courrier, contient le nom du
fichier de courrier en cours de vérification [Ndt: généralement
/var/mail/nom_de_l_utilisateur].
Variables du Shell
Les variables suivantes sont remplies par l'interpréteur de commandes :
PPID L'ID du processus parent du shell. Cette variables est protégée
en écriture.
PWD Le répertoire de travail en cours, tel qu'il est configuré par
la commande cd.
OLDPWD Le répertoire de travail précédent, configuré par la commande
cd.
REPLY Contient la ligne d'entrée lue par la commande interne read
lorsqu'elle n'a pas d'argument.
UID Contient l'ID de l'utilisateur, initialisé au démarrage du
shell. C'est une variable en lecture seulement
EUID Contient l'UID effectif de l'utilisateur, initialisé au démar‐
rage du shell. Cette variable est en lecture seule.
GROUPS Variable de type tableau contenant la liste des groupes dont
l'utilisateur est membre. Cette variables est protégée en écrit‐
ure.
BASH Se développe en chemin d'accès complet à l'instance courrante de
bash.
BASH_VERSION
Correspond au numéro de version de cette instance de bash.
BASH_VERSINFO
Une variable tableau protégée en écriture dont les membres
représentent la version de cette instance de bash. Cette valeur
est renseignée de la manière suivante:
BASH_VERSINFO[0] Le numéro majeur de la version
(release).
BASH_VERSINFO[1] Le numéro mineur de la version (ver‐
sion).
BASH_VERSINFO[2] Le niveau de patch.
BASH_VERSINFO[3] Le numéro de compilation.
BASH_VERSINFO[4] Le statut de cette version (e.g.,
beta1).
BASH_VERSINFO[5] La valeur de MACHTYPE.
SHLVL (NDT : Lire SH LVL - Shell Level - Niveau d'interpréteur)
Incrémenté de 1 à chaque invocation d'une instance de bash.
RANDOM A chaque fois que ce paramètre est référencé, un entier
aléatoire entre 0 et 32767 est engendré. Cette séquence de nom‐
bres aléatoires peut être initialisée en assignant une valeur à
RANDOM. Si RANDOM est détruit (commande unset), il perd son
comportement spécial, même s'il est recréé plus tard.
SECONDS
A chaque fois que ce paramètre est lu, le nombre de secondes
écoulées depuis le lancement de l'interpréteur est renvoyé. Si
une valeur est affectée à SECONDS, il renverra lors des lectures
ultérieures le nombre de secondes écoulées depuis l'affectation,
augmenté de la valeur fournie. Si SECONDS est détruit (commande
unset), il perd son comportement spécial, même s'il est recréé
plus tard.
LINENO Chaque fois que ce paramètre est référencé, le shell le remplace
par un nombre décimal représentant le numéro de la ligne
actuelle (commençant à 1), au sein du script ou de la fonction.
Hors d'un script ou d'une fonction, la valeur n'a pas néces‐
sairement de sens. Si LINENO est détruit (commande unset), il
perd son comportement spécial, même s'il est recréé plus tard.
HISTCMD
Le numéro d'historique, ou le rang dans la liste d'historique,
de la commande en cours. Si HISTCMD est détruit (commande
unset), il perd son comportement spécial, même s'il est recréé
plus tard.
DIRSTACK
Une variable de type tableau (voir Tableaux plus bas) représen‐
tant le contenu courant de la pile de répertoires. Les réper‐
toires apparaissent dans la pile dans l'ordre dans lequel la
commande interne dirs les affiche. Il est possible de modifier
directement cette variables mais les commandes internes pushd et
popd doivent être utilisées pour ajouter et enlever des réper‐
toires. Modifier cette variable ne modifiera pas le répertoire
courant. Si DIRSTACK est détruite, elle perd ses propriétés
spéciales, même si elle est recréée.
PIPESTATUS
Une variable de type tableau (voir Tableaux plus bas) contenant
une liste des codes de retour des derniers processus exécutés en
avant-plan (éventuellement une seule commande).
OPTARG La valeur du dernier argument d'option traité par la commande
interne getopts (voir le paragraphe COMMANDES INTERNES DU SHELL
plus bas).
OPTIND Le rang du prochain argument à traiter avec la commande getopts
(voir le paragraphe COMMANDES INTERNES DU SHELL plus bas).
HOSTNAME
Automatiquement affectée avec le nom de l'ordinateur.
HOSTTYPE
Automatiquement rempli avec 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.
OSTYPE Automatiquement rempli avec 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.
MACHTYPE
Automatiquement affectée avec une chaîne décrivant le type du
système sur lequel bash s'exécute, dans le format standard de
GNU processeur-compagnie-système. La valeur par défaut dépend
du système.
SHELLOPTS
Liste des options activées du shell, séparées par des virgules.
Chaque mot de la liste est un argument valide pour l'option -o
de la commande interne set (voir COMMANDES INTERNES DU SHELL).
Les options apparaissant dans SHELLOPTS sont celle indiquées
comme actives par set -o. Si cette variable est dans l'environ‐
nement au lancement de bash, chaque option de la liste est
activée avant de lire les fichiers d'initialisation. Cette
variable est protégée en écriture.
Les variables suivantes sont utilisées par l'interpréteur. Dans cer‐
tains cas, bash affecte des valeurs par défaut aux variables, ces cas
sont décrits plus bas.
IFS Le Séparateur de Champs Interne Internal Field Separator qui est
utilisé pour séparer les mots après les développements, et pour
découper les lignes en mots avec la commande interne read. La
valeur par défaut est ``''.
PATH Le chemin de recherche des commandes à exécuter. Il s'agit d'une
liste de répertoires, séparés par des deux-points (`:') que
l'interpréteur consulte lorsqu'il recherche une commande (voir
le paragraphe EXÉCUTION DES COMMANDES plus bas). Le chemin par
défaut dépend du système, et de la configuration choisie par la
personne installant bash. Une configuration fréquente est
``/bin:/usr/bin:/usr/local/bin:.''.
HOME Le répertoire personnel de l'utilisateur. C'est l'argument par
défaut de la commande interne cd. Cette variable sert également
lors du développement du tilde.
CDPATH Le chemin de recherche de la commande interne cd. Il s'agit
d'une liste de répertoires, séparés par des deux-points (`:')
que l'interpréteur consulte lorsqu'il cherche un sous-répertoire
destination de la commande cd. Une configuration possible
serait ``.:~:/usr''.
BASH_ENV
Si ce paramètre est configuré lorsque bash exécute un script, sa
valeur est considérée comme un nom de fichier, contenant les
commandes d'initialisation de l'interpréteur, comme .bashrc. La
valeur de BASH_ENV est soumise au remplacement des paramètres,
substitution de commandes, et évaluation arithmétique avant
d'être considérée comme nom de fichier. PATH n'est pas utilisée
pour rechercher le fichier obtenu.
MAIL Si ce paramètre correspond à un nom de fichier, et si la vari‐
able MAILPATH n'est pas configurée, bash informera l'utilisateur
si un courrier arrive dans le fichier indiqué.
MAILCHECK
Indique une période (en secondes), par défaut 60, avec laquelle
bash vérifiera si un nouveau courrier est arrivé. Lorsque le
délai est écoulé, le shell vérifiera la présence d'un courrier
avant d'afficher son symbole d'accueil. Si cette variable est
détruite, le shell cessera la vérification.
MAILPATH
Il s'agit d'une liste de fichiers séparés par des deux-points
(`:'), dans lesquels on vérifiera l'arrivée de courrier. Le nom
d'un fichier peut être suivi d'un point d'interrogation, puis
d'une chaîne de caractères indiquant le message à afficher en
cas de courrier. Dans cette chaîne, le paramètre $_ correspond
au nom du fichier. Exemple:
MAILPATH='/usr/spool/mail/bfox?"Tu as du courrier":~/shell-
mail?"$_ a du courrier"'
Bash fournit une valeur par défaut pour cette variable, mais
l'emplacement du fichier boîte à lettres dépend du système (par
exemple /usr/spool/mail/$USER).
PS1 La valeur de ce paramètre est développée puis utilisée comme
symbole d'accueil principal (voir le paragraphe SYMBOLE
D'ACCUEIL ci-dessous). La valeur par défaut est ``\s-\v\$ ''.
PS2 La valeur de ce paramètre est développée comme PS1 puis utilisée
comme symbole d'accueil secondaire. Par défaut il s'agit de ``>
''.
PS3 La valeur de ce paramètre est utilisée comme symbole pour la
commande select (voir GRAMMAIRE DU SHELL plus haut).
PS4 La valeur de ce paramètre est développée comme PS1 puis affichée
entre chaque commande lors d'un suivi d'exécution. Le premier
caractère de PS4 est répété autant de fois que nécessaire pour
indiquer le niveau d'imbrication. La valeur par défaut est ``+
''.
TIMEFORMAT
La valeur de ce paramètre est utilisée en tant que chaîne de
format pour afficher le temps consommé dans les pipelines
préfixés avec le mot réservé time. Le caractère % introduit une
séquence d'échappement qui est développée avec une valeur de
temps ou une autre information. Les séquences d'échappement et
leurs significations sont les suivantes; les accolades entourent
les parties facultatives.
%% Un % seul (non interprété).
%[p][l]R Le temps écoulé en secondes.
%[p][l]U Le temps processeur écoulé en mode utilisateur en sec‐
ondes.
%[p][l]S Le temps processeur écoulé en mode système en secon‐
des.
%P Le pourcentage de temps processeur utilisé calculé
avec (%U + %S) / %R.
La séquence facultative p est un chiffre indiquant la précision,
le nombre de chiffres après la virgule. Une valeur de 0
provoque l'affichage de nombre entiers. Trois chiffres au plus
peuvent être affichés après la virgule; tout chiffre supérieur à
3 sera changé en 3. Si p n'est pas indiqué, 3 est utilisé.
La séquence optionnelle l spécifie un format étendu, incluant
les minutes, de la forme MMmSS.FFs. La valeur de p détermine si
la partie décimale est affichée ou non.
Si cette variable n'est pas assignée, bash réagit comme si la
valeur $'\nreal\t%3lR\nuser\t%3lU\nsys%3lS' avait été affectée.
Si la variable est vide, aucune information n'est affichée. Un
caractère fin-de-ligne est ajouté à la fin de l'affichage.
HISTSIZE
Le nombre de commandes à mémoriser dans l'historique (voir le
paragraphe HISTORIQUE plus bas). La valeur par défaut est 500.
HISTFILE
Le nom du fichier d'historique pour la mémorisation des comman‐
des(voir HISTORIQUE plus bas). Par défaut, il s'agit de
~/.bash_history. Si cette variable est détruite, l'historique
n'est pas enregistré en fin de shell.
HISTFILESIZE
Le nombre maximal de lignes contenues dans le fichier his‐
torique. Quand cette variable contient une valeur, le fichier
historique est tronqué, si besoin est, pour ne contenir que ce
nombre de lignes. La valeur par défaut est 500. Ce fichier est
tronqué à cette taille après écriture quand un shell interactif
se termine.
OPTERR Si cette variable contient la valeur 1, bash affiche les mes‐
sages d'erreurs déclenchés par la commande interne getopts (voir
le paragraphe COMMANDES INTERNES DU SHELL plus bas). OPTERR est
initialisé avec la valeur 1 à chaque invocation du shell, ou au
lancement d'un script.
LANG Détermine la localisation pour toutes les catégories non
spécifiquement précisées par une variable commençant par LC_.
LC_ALL Cette variable surcharge LANG et toute autre variable LC_ indi‐
quant la localisation.
LC_COLLATE
Cette variable détermine l'ordre des lettres lors du tri des
chemins ainsi que le comportement des expressions des inter‐
valles, des classes d'équivalences, et de la comparaison de
chaînes lors de la recherche de motifs et le développement des
chemins.
LC_CTYPE
Cette variable détermine l'interprétation des caractères et le
comportement des classes de caractères [Ndt: ex: [:alpha] ] lors
du développement des chemins et de la recherche de motifs.
LC_MESSAGES
Cette variable détermine le langage des messages et celui
utilisé pour traduire les chaînes entre guillemets précédés par
un $.
PROMPT_COMMAND
Lorsque cette variable contient une valeur, celle-ci est
exécutée en tant que commande, avant l'affichage du symbole
d'accueil principal.
IGNOREEOF
Cette variable contrôle le comportement du shell lorsqu'il
reçoit un caractère EOF (fin de fichier) comme unique entrée. Si
elle configurée, la valeur de cette variable correspond au nom‐
bre de caractères EOF consécutifs apparaissant en début de ligne
que bash ignorera avant de se terminer. Si cette variable existe
mais que sa valeur n'est pas numérique, ou si elle n'a pas de
valeur, bash accepte par défaut 10 EOF consécutifs avant de se
terminer. Si elle n'existe pas, EOF est considéré comme un ter‐
minateur de saisie pour le shell.
TMOUT Si cette variable contient une valeur supérieure a zéro, celle-
ci est considérée comme un délai en secondes, à partir de
l'affichage du symbole d'accueil principal. Lorsque ce délai
sera écoulé, Bash se terminera si aucune saisie n'a eu lieu.
FCEDIT L'éditeur par défaut utilisé par la commande interne fc.
FIGNORE
Une liste de suffixes, séparés par des deux-points `:', que bash
ignorera lors de la complétion des noms de fichiers (voir le
paragraphe READLINE plus bas). Un nom de fichier dont le suf‐
fixe correspond à l'un de ceux mentionnés dans FIGNORE est
exclus de la liste des fichiers. Par exemple, cette variable
peut prendre la valeur ``.o:~''.
GLOBIGNORE
Une liste de motifs séparés par des deux-points, définissant la
liste des noms de fichiers à ignorer lors du développement des
chemins. Si un nom de fichier correspondant à un motif d'expan‐
sion, correspond également à un motif dans GLOBIGNORE, il est
supprimé de la liste des correspondances.
INPUTRC
Le nom du fichier de configuration de readline prioritaire sur
le fichier par défaut ~/.inputrc (voir READLINE plus bas).
HISTCONTROL
Si cette variable contient la valeur ignorespace, les lignes
commençant par un caractère d'espacement ne seront par
mémorisées dans l'historique. Si elle contient la valeur
ignoredups, une ligne correspondant exactement à la ligne de
commande précédente ne sera pas dupliquée dans l'historique. La
valeur ignoreboth permet de combiner ces deux comportements. Si
la variable est détruite (commande unset), ou si elle contient
une valeur différente des trois mentionnées ci-dessus, tous les
lignes lues par l'interpréteur seront mémorisées dans la liste
d'historique, sous contrôle de HISTIGNORE. Le fonctionnement de
cette variable est surchargé par HISTIGNORE. La seconde ligne
et les suivantes d'une commande multiligne ne sont pas testées,
et sont ajoutées dans l'historique quelque soit la valeur de
HISTCONTROL.
HISTIGNORE
Une liste de motifs séparés par des deux-points déterminant
quelles lignes de commandes seront ajoutées à l'historique.
Chaque motif est accroché au début de la ligne et doit lui cor‐
respondre en entier (il n'y a pas d'ajout de `*' implicite).
Chaque motif est comparé à chaque ligne après que les vérifica‐
tions de HISTCONTROL aient été appliquées. En plus des motifs
génériques normaux du shell, `&' correspond à la ligne
précédente de l'historique. `&' peut être protégé par un anti-
slash. Ce dernier est éliminé avant de tenter une comparaison.
La seconde ligne et les suivantes d'une commande multiligne ne
sont pas testées, et sont ajoutées dans l'historique quelque
soit la valeur de HISTIGNORE.
histchars
Cette variable contient deux ou trois caractères contrôlant le
développement de l'historique, et le découpage en jetons (voir
DÉVELOPPEMENT DE L'HISTORIQUE plus bas). Le premier caractère
est le caractère de développement de l'historique, c'est à dire
celui qui indique le début d'un développement d'historique (nor‐
malement `!'). Le second caractère est celui de substitution
rapide, utilisé comme raccourci pour relancer la commande
précédente, en modifiant une partie de la chaîne. Par défaut il
s'agit de `^'. L'éventuel troisième caractère est celui qui
indique, lorsqu'on le trouve en début de mot que le reste de la
ligne est un commentaire. Normalement on utilise le caractère
`#'. Ce caractère de commentaire empêche l'expansion de l'his‐
torique pour tous les mots restants sur la ligne. En revanche,
il ne s'agit pas obligatoirement du caractère de commentaire
pour l'interpréteur.
HOSTFILE
Contient le nom d'un fichier ayant le même format que /etc/hosts
qui sera consulté lorsque le shell devra compléter un nom
d'hôte. Ce fichier peut être changé de manière interactive. Lors
de la prochaine tentative pour compléter un nom d'hôte, bash
ajoutera le nouveau fichier à sa base de données déjà exis‐
tantes.
auto_resume
Cette variable configure le comportement du shell interactif
vis-à-vis de l'utilisateur et du contrôle de jobs. Si cette
variable existe, les commandes simples constituées d'un seul mot
sont considérées comme de possibles relances de travaux arrêtés.
Aucune ambiguïté n'est possible, si plusieurs travaux arrêtés
commencent par la chaîne saisie, bash sélectionne le job
manipulé le plus récemment. Le nom du job arrêté correspond,
dans ce contexte, à la ligne de commande utilisée pour le
lancer. Si cette variable contient la valeur exact, la chaîne
fournie doit correspondre exactement au nom d'un job arrêté. Si
elle contient la valeur substring, la chaîne fournie doit corre‐
spondre à une sous-chaîne du nom du job arrêté. La valeur sub‐
string fournit un comportement analogue au job id %? (voir
CONTRÔLE DES JOBS
plus bas). Si la variable contient n'importe quelle autre
valeur, la chaîne fournie doit correspondre à un préfixe du nom
d'un job arrêté. C'est analogue au fonctionnement du job id %.
Tableaux
Bash propose des variables tableaux à une dimension. N'importe quelle
variable peut être utilisée comme tableau ; la commande interne declare
peut servir à déclarer explicitement un tableau. Il n'y a pas de limite
maximale à la taille d'un tableau, ni d'obligation que les membres
soient indexés ou assignés de manière contigûe. Les tableaux sont
indexés par des entiers en commençant à zéro.
Un tableau est créé automatiquement si une variable est remplie en
utilisant la syntaxe nom[index]=valeur. l'index est traîté comme une
expression arithmétique, et s'évaluer en un nombre positif ou nul. Pour
déclarer explicitement un tableau, on utilise declare -a nom (voir COM‐
MANDES INTERNES DU SHELL plus bas). declare -a nom[index] est aussi
accepté bien que l'index soit ignoré. Des attributs peuvent être
spécifié pour une variable tableau en utilisant les commandes internes
declare et readonly. Les attributs s'appliquent à tous les membres du
tableau.
Les tableaux sont remplis en utilisant l'affectation composée de la
forme nom=(valeur_1 ... valeur_n), où chaque valeur est de la forme
[index]=chaîne. Seule la chaîne est obligatoire. Si les crochets et les
index optionnels sont fournis, les affectations ont lieu en conséquence
; sinon le rang de l'elément rempli est le dernier rang rempli plus un.
Les index commencent à zéro. Cette syntaxed est aussi acceptée par la
commande interne declare. Les éléments individuels du tableaux sont
remplis en utilisant la syntaxe nom[index]=valeur présentée plus haut.
Chaque élément d'un tableau peut référencé en utilisant la notation
${nom[index]}. Les accolades sont indispensables pour éviter les con‐
flits avec le développement des noms de fichiers. Si index est @ ou *,
le développement donne tous les membres de nom. Ces deux index
diffèrent lorsqu'ils sont employés entre guillemets. Dans ce cas,
${nom[*]} correspond à un seul mot contenant les valeurs de tous les
membres séparés par le premier caractère de la variable spéciale IFS,
et ${nom[@]} développe chaque membre de nom en un mot distinct. Quant
il n'y a pas de membre dans le tableau, ${nom[@]} n'a pas de valeur. Le
comportement est analogue à celui des paramètres spéciaux * et @ (voir
Paramètres spéciaux plus haut). ${#nom[index]} donne la longueur du
membre ${nom[index]}. Si l'index est * ou @, le développement donne le
nombre d'éléments dans le tableau. Référencer une variable sans index
est équivalent à en référencer l'élément zéro.
La commande interne unset sert à détruire les tableaux. unset
nom[index] détruit l'élément de rang index. unset nom, où nom est un
tableau, ou unset nom[index], avec index valant * ou @ supprimer le
tableau entier.
Les commandes internes declare, local, et readonly acceptent toutes une
option -a pour spécifier un tableau. La commande interne read accepte
une option -a pour remplir un tableau avec une liste de mots lus depuis
l'entrée standard. Les commandes internes set et declare affiche les
valeurs des tableaux d'une manière permettant de les réutiliser pour
les affectations.
EXPANSION
Les expansions sont appliquées à la ligne de commande après qu'elle ait
été divisée en mots. Il existe sept types de développements : expansion
des accolades, développement du tilde, remplacement des paramètres et
variables, substitution de commandes, évaluation arithmétique,
découpage des mots, et développement des noms de fichiers.
L'ordre est : expansion des accolades, du tilde, des paramètres, des
variables, des commandes, évaluation arithmétique (selon la méthode
gauche-à-droite), découpage des mots et développement des noms de
fichiers.
Sur les systèmes qui le supportent, un développement supplémentaire a
lieu : la substitution de processus.
Seuls l'expansion des accolades, le découpage des mots, et le
développement des noms de fichiers peuvent modifier le nombre de mots.
Les autres développement transforment un mot unique en un autre mot
unique. La seule exception à cette règle est l'expansion de "$@" et
"${nom[@]}" comme on l'a vu plus haut (voir le paragraphe PARAMÈTRES).
Expansion des accolades
L'expansion des accolades est un mécanisme permettant la création de
chaînes quelconques. Il est similaire au développement des noms de
fichiers, mais les noms de fichiers créés n'existent pas nécessaire‐
ment. Les motifs qui seront développes prennent la forme d'un préambule
facultatif, suivi d'une série de chaînes séparées par des virgules,
encadrée par des accolades. Un postambule peut éventuellement suivre la
série de chaînes. Le préambule est inséré devant chacune des chaînes
contenues entre les accolades, et le postambule est ajouté à la fin de
chacune des chaînes résultantes, le développement se faisant de gauche
à droite.
Plusieurs développements d'accolades peuvent être imbriqués. Les résul‐
tats de chaque développement ne sont pas triées, l'ordre gauche à
droite est conservé. Par exemple a{d,c,b}e se développe en `ade ace
abe'.
L'expansion des accolades est effectuée en premier, et tous les car‐
actères ayant une signification spéciale pour les autres développement
sont conservés dans le résultat. Il s'agit d'une modification purement
littérale. Bash n'effectue aucune interprétation syntaxique du texte
entre les accolades.
Une formule correcte pour le développement doit contenir des accolades
ouvrantes et fermantes non protégées, et au moins une virgule non
protégée. Toute formule incorrecte n'est pas développée et reste
inchangée. Un { ou un , peuvent être protégés par un anti-slash pour
éviter d'être considérés comme partie d'une expression entre accolades.
Cette construction est généralement utilisée comme raccourci lorsque le
préfixe commun aux différentes chaînes est relativement long :
mkdir /usr/local/src/bash/{old,new,dist,bugs}
ou
chown root /usr/{ucb/{ex,edit},lib/{ex?.?*,how_ex}}
Le développement des accolades induit une légère incompatibilité avec
les versions traditionnelles de l'interpréteur Bourne sh. sh
n'effectue aucun traitement sur les accolades ouvrantes et fermantes
lorsqu'elles apparaissent dans un mot, et les laisse inchangées. Bash
supprime les accolades dans les mots, après développement. Par exemple
si l'on fournit à sh le mot file{1,2}, il reste inchangé en sortie. Par
contre, il est transformé en file1 file2 par bash. Si une compati‐
bilité stricte avec sh est nécessaire, lancez bash avec l'option +B ou
désactivez le développement des accolades avec l'option +B de la com‐
mande set (voir le paragraphe COMMANDES INTERNES DU SHELL plus bas).
Développement du Tilde
Si un mot commence avec le caractère tilde (`~'), tous les caractères
précédant le premier slash non protégé (voire tous les caractères s'il
n'y a pas de slash), sont considérés comme un préfixe tilde. Si aucun
caractère du préfixe tilde n'est protégé, les caractères suivant le
tilde sont traités comme un nom de login possible. Si ce nom de login
est une chaîne nulle, le tilde est remplacé par la valeur du paramètre
HOME. Si HOME n'existe pas, le tilde est remplacé par le répertoire de
connexion de l'utilisateur exécutant le shell. Si le préfixe tilde est
remplacé par le répertoire personnel associé au nom de login en ques‐
tion.
Si le préfixe tilde est `+', la valeur du paramètre shell PWD le rem‐
place. Si le préfixe tilde est `-', la valeur du paramètre shell OLD‐
PWD lui est substitué. Si les caractères à la suite du tilde dans le
préfixe tilde représentent un nombre N préfixé éventuellement d'un `+'
ou d'un `-' le préfixe tilde est remplacé par l'élément correspondant
de la pile de répertoires telle qu'il serait affiché par la commande
interne dirs invoquée avec le préfixe tilde en argument. Si les car‐
actères à la suite du tilde dans le préfixe tilde représentent un nom‐
bre sans signe, on suppose qu'il s'agit de `+'.
Si le nom est invalide, ou si le développement du tilde échoue, le mot
est inchangé.
Chaque affectation de variable est soumis au développement du tilde
s'il suit immédiatement un : ou un =. On peut donc utiliser des
chemins d'accès avec un tilde pour remplir les variables PATH, MAIL‐
PATH, et CDPATH, et le shell fournira la valeur correcte.
Remplacement des paramètres
Le caractère `$' permet d'introduire le remplacement des paramètres, la
substitution de commandes, ou l'expansion arithmétique. Le nom du
paramètre ou du symbole à développer peut être encadré par des acco‐
lades, afin d'éviter que les caractères suivants ne soient considérés
comme appartenant au nom de la variable.
Lorsque les accolades sont utilisées, l'accolade finale est le premier
caractère `}' non protégé par un antislash ni inclus dans une chaîne
protégé, ni dans une expresssion arithmétique, une substitution de com‐
mande ou un développement de paramètre.
${paramètre}
est remplacé par la valeur du paramètre. Les accolades sont
nécessaire quand le paramètre est un paramètre positionnel ayant
plusieurs chiffres, ou si le paramètre est suivi de caractères
n'appartenant pas à son nom.
Si le premier caractère du paramètre est un point d'exclamation, un
niveau d'indirection de variable est introduit. Bash utilise la valeur
de la variable formée par le reste du paramètre comme un nom de vari‐
able. Cette variable est alors développée et la valeur utilisée pour le
reste de la substitution plutôt que la valeur du paramètre lui-même.
On appelle ce mécanisme le développement indirect.
Dans chacun des exemples suivants, le mot est soumis au développement
du tilde, au remplacement des paramètres, à la substitution de comman‐
des, et à l'évaluation arithmétique. Bash vérifie si un paramètre
existe, et s'il n'est pas nul. L'omission du double point ne fournit
qu'un test d'existence.
${paramètre:-mot}
Utilisation d'une valeur par défaut. Si le paramètre est inex‐
istant ou nul, on substitue le développement du mot. Sinon,
c'est la valeur du paramètre qui est fournie.
${paramètre:=mot}
Attribution d'une valeur par défaut. Si le paramètre est inex‐
istant ou nul, le développement du mot lui est affecté. La
valeur du paramètre est alors renvoyée. Les paramètres position‐
nels, et spéciaux ne peuvent pas être affectés de cette façon.
${paramètre:?mot}
Affichage d'une erreur si inexistant ou nul. Si le paramètre
est inexistant, ou nul, le développement du mot (ou un message
approprié si aucun mot n'est fourni) est affiché sur la sortie
d'erreur standard, et l'interpréteur se termine, s'il n'est pas
interactif. Autrement, la valeur du paramètre est utilisée.
${paramètre:+mot}
Utilisation d'une valeur différente. Si le paramètre est nul,
ou inexistant, rien n'est substitué. Sinon le développement du
mot est renvoyé.
${paramètre:début}
${paramètre:début:longueur}
Extraction de sous-chaîne Se développe pour fournir la sous-
chaîne de la longueur indiquée (en caractères) commençant au
début.D offset. Si la longueur est omise, fournit la sous-
chaîne commençant au caractère de début et s'étendant jusqu'à la
fin du paramètre. La longueur et le début sont des expressions
arithmétiques (voir ÉVALUATION ARITHMÉTIQUE plus bas). La
longueur doit être positive ou nulle. Si le début est négatif,
sa valeur est considérée à partir de la fin du contenu du
paramètre. Si le paramètre est @, le résultat correspond aux
longueur paramètres positionnels commençant au début. Si le
paramètre est un nom de tableau indexé par @ ou *, le résultat
est les longueur membres du tableau commençant à
${paramètre[début]}. L'indexation des sous-chaînes débute à
zéro, sauf pour les paramètres positionnels qui débute en 1.
${#paramètre}
Est remplacé par la longueur, en caractères, de la valeur du
paramètre. Si le paramètre est * ou @, la valeur est le nombre
de paramètres positionnels. Si le paramètre est un nom de
tableau indexé par * ou @, la valeur est le nombre d'éléments
dans le tableau.
${paramètre#mot}
${paramètre##mot}
Le mot est développé pour fournir un motif, comme dans l'expan‐
sion des noms de fichiers. Si le motif correspond au début de la
valeur du paramètre, alors le développement prend la valeur du
paramètre après suppression du plus petit motif commun (cas
``#''), ou du plus long motif (cas ``##''). Si le paramètre est
@ ou *, l'opération de suppression de motif est appliquée à
chaque paramètre positionnel successivement, et le développement
donne la liste finale. Si le paramètre est une variable tableau
indexée par @ ou *, l'opération de suppression de motif est
appliquée à chaque membre du tableau successivement, et le
développement donne la liste finale.
${paramètre%mot}
${paramètre%%mot}
est développé pour fournir un motif, comme dans l'expansion des
noms de fichiers. Si le motif correspond à une portion finale de
la valeur du paramètre, alors le développement prend la valeur
du paramètre après suppression du plus petit motif commun (cas
``%''), ou du plus long motif (cas ``%%''). Si le paramètre est
@ ou *, l'opération de suppression de motif est appliquée à
chaque paramètre positionnel successivement, et le développement
donne la liste finale. Si le paramètre est une variable tableau
indexée par @ ou *, l'opération de suppression de motif est
appliquée à chaque membre du tableau successivement, et le
développement donne la liste finale.
${paramètre/motif/chaîne}
${paramètre//motif/chaîne}
Le motif est développé comme dans le traitement des noms de
fichiers. Le paramètre est développé et la plus longue portion
correspondant au motif est remplacée par la chaîneg. Dans la
première forme, seule la première correspondance est remplacée,
dans la seconde toutes les portions correspondant au motif sont
remplacées par la chaîne. Si le motif commence par #, il doit
correspondre au début de la valeur développée du paramètre. Si
le motif commence par %, il doit correspondre à la fin du
développement du paramètre. Si la chaîne est nulle, les por‐
tions correspondant au motif sont supprimées et le / après le
motif peut être omis. Si le paramètre est @ ou *, l'opération
de substitution est appliquée à chacun des paramètres position‐
nels successivement, et le résultat est la liste finale. Si le
paramètre est une variable tableau indexée par @ ou *,
l'opération de substitution s'applique à chaque membre du
tableau successivement, et le résultat est la liste finale.
Substitution de commandes
La substitution de commandes permet de remplacer le nom d'une commande
par son résultat. Il en existe deux formes :
$(commande)
ou
`commande`
Bash effectue la substitution en exécutant la commande et en la rem‐
plaçant par sa sortie standard, dont les derniers sauts de lignes sont
supprimés. Les sauts de lignes internes ne sont pas supprimés mais
peuvent disparaître lors du découpage en mots. La substitution de com‐
mande $(cat fichier) peut être remplacée par l'équivalent plus rapide
$(< fichier).
Quand l'ancienne forme de substitution avec les backquotes ` est
utilisée, le caractère antislash garde sa signification littérale, sauf
s'il est suivi de $, `, ou \. La première backquote non protégée par
un antislash termine la substitution de commande. Quand on utilise la
forme $(commande), tous les caractères entre parenthèses gardent leurs
valeurs littérales. Aucun n'est traité spécialement.
Les substitutions de commandes peuvent être imbriquées. Avec l'ancienne
forme, il faut protéger les backquotes internes avec un backslash.
Si la substitution apparaît entre guillemets, le découpage des mots, et
l'expansion des noms de fichiers ne sont pas effectués.
Évaluation Arithmétique
L'évaluation arithmétique permet de remplacer une expression par le
résultat de son évaluation. Le format d'évaluation arithmétique est :
$((expression))
L'expression est manipulée de la même manière que si elle se trouvait
entre guillemets, mais un guillemet se trouvant entre les parenthèses
n'est pas traité spécifiquement. Tous les mots de l'expression subis‐
sent le développement des paramètres, la substitution des commandes et
la suppression des apostrophes et guillemets. Les évaluations
arithmétiques peuvent être imbriquées.
L'évaluation est effectuée en suivant les règles mentionnées dans le
paragraphe CALCUL ARITHMÉTIQUE. Si l'expression est invalide, bash
affiche un message indiquant l'erreur, et aucune substitution n'a lieu.
Substitution de Processus
La substitution de processus n'est disponible que sur les systèmes
acceptant le mécanisme des tubes nommés (FIFOs) ou la méthode /dev/fd
de noms de fichiers Elle prend la forme <(liste) ou >(liste). La
liste de processus est exécutée avec ses entrées et sorties connectée à
une FIFO ou à un fichier dans /dev/fd. Le nom de ce fichier est passé
en argument à la commande qui sera exécutée comme résultat de cette
substitution. Si on utilise la forme >(liste), l'écriture dans le
fichier fournira des entrées pour la liste. Si la forme <(liste) est
utilisée, le fichier passe en argument devra être lu pour obtenir la
sortie de la liste.
Sur les systèmes qui le permettent, la substitution de processus est
effectuée simultanément au remplacement des paramètres et variables, a
la substitution de commande, et à l'évaluation arithmétique.
Séparation des mots
Les résultats du remplacement des paramètres, de la substitution de
commandes, et de l'évaluation arithmétique, qui ne se trouvent pas
entre guillemets sont analysés par le shell afin d'appliquer le
découpage des mots.
L'interpréteur considère chaque caractère du paramètre IFS comme un
délimiteur, et redécoupe le résultat des transformations précédentes en
fonction de ceux-ci. Si la valeur du paramètre IFS est exactement
, (la valeur par défaut), alors
toute séquence de caractères IFS sert à délimiter les mots. Si IFS a
une valeur autre que celle par défaut, alors les séquences de car‐
actères blancs espace et tabulation sont ignorées en début et fin de
mot, à condition que ces caractères blancs se trouvent dans la valeur
de IFS (un caractère de IFS blanc). Tout autre caractère de IFS se
trouvant à côté d'un caractère blanc de IFS, sert à délimiter un champ.
Une séquence de caractères blancs de IFS est également traitée comme un
séparateur. Si la valeur de IFS est nulle, aucun découpage de mot n'a
lieu.
Les arguments nuls explicites ("" ou '') sont conservés. Les arguments
nuls implicites, résultant du développement des paramètres n'ayant pas
de valeurs, sont éliminés. Si un paramètre sans valeur est développé
entre guillemets, le résultat est un argument nul qui est conservé.
Notez que si aucun développement n'a lieu, le découpage des mots n'est
pas effectué.
Développement des noms de fichiers
Après le découpage des mots, et si l'option -f n'est pas indiquée, bash
recherche dans chaque mot les caractères *, ?, (, et [. Si l'un d'eux
apparaît, le mot est considéré comme un motif, et remplacé par une
liste, classée par ordre alphabétique, des noms de fichiers correspon‐
dant à ce motif. Si aucun nom de fichiers ne correspond, et si
l'option shell nullglob n'est pas active, le mot reste inchangé. Si
l'option nullglob est active, et si aucune correspondance n'est
trouvée, le mot est supprimé. Si l'option shell nocaseglob est
activée, la correspondance a lieu sans tenir compte des différences
majuscules / minuscules. Quand un motif est utilisé pour créer des
chemins d'accès, le caractère ``.'' au début d'un nom, ou immédiate‐
ment à la suite d'un slash doit être explicitement mis en correspon‐
dance, à moins que l'option shell dotglob ne soit active. Le caractère
slash doit toujours être mis en correspondance explicitement. Dans
tous les autres cas, le caractère ``.'' n'est pas traité spécifique‐
ment. Voyez la description de la commande shopt dans COMMANDES
INTERNES DU SHELL pour une description des options shell nocaseglob,
nullglob, et dotglob.
la variable shell GLOBIGNORE peut servir à restreindre l'ensemble des
noms de fichiers correspondant à un motif. Si GLOBIGNORE est remplie,
chaque nom de fichier qui correspond aussi à un motif de GLOBIGNORE est
supprimé de la liste des correspondances. Les noms de fichiers ``.''
et ``..'' sont toujours ignorés, même quand GLOBIGNORE est remplie.
Toutefois, configurer GLOBIGNORE a pour effet d'activer l'option shell
dotglob, ainsi tous les autres noms de fichiers commençant par ``.''
correspondront. Pour obtenir l'ancien comportement ignorant les noms
commençant par ``.'', placez ``.*'' dans l'un des motifs de GLOBIG‐
NORE. L'option dotglob est désactivée si la variable GLOBIGNORE
n'existe pas.
Motifs génériques
Tout caractère apparaissant dans un motif, hormis les caractères
spéciaux décrits ci-après correspond à lui-même. Le caractère NUL ne
peut pas se trouver dans un motif. Les caractères spéciaux doivent être
protégés si ils doivent se correspondre littéralement.
Les caractères spéciaux ont les significations suivantes :
* Correspond à n'importe quelle chaîne, y compris la chaîne vide.
? Correspond à n'importe quel caractère.
[...] Correspond à l'un des caractères entre crochets. Une paire de
caractères séparés par un signe "moins" indique un intervalle;
qui correspond à n'importe quel caractère situé entre les deux
bornes incluses. Si le premier caractère suivant le [ est un !
ou un ^ alors la correspondance se fait sur les caractères non-
inclus. Un - peut être mis en correspondance en l'incluant en
premier ou dernier caractère de l'ensemble. Un ] peut être mis
en correspondance en l'incluant en premier caractère de l'ensem‐
ble.
Entre [ et ], on peut indiquer une classe de caractère en util‐
isant la syntaxe [:classe:], où classe est l'une des classes
suivantes, définies dans le standard POSIX.2 :
alnum alpha ascii blank cntrl digit graph lower print punct
space upper xdigit
Une classe correspond à un caractère quelconque qui s'y trouve.
Entre [ et ], on peut indiquer une classe d'équivalence en util‐
isant la syntaxe [=c=], qui correspond à n'importe quel car‐
actère ayant le même ordre (comme indiqué dans la localisation
en cours) que le caractère c.
Entre [ et ], la syntaxe [.symbole.] correspond au symbole de
classement symbole.
Si l'option extglob du shell option est activée par la commande shopt
plusieurs opérateurs de correspondance étendue sont reconnus. Dans la
description suivante, une liste-motif est une liste d'un ou plusieurs
motifs séparés par des |. Les motifs composés sont formés en utilisant
un ou plusieurs sous-motifs comme suit :
?(liste-motif)
Correspond à zéro ou une occurrence des motifs indiqués
*(liste-motif)
Correspond à zéro ou plusieurs occurrences des motifs
indiqués
+(liste-motif)
Correspond à une ou plusieurs occurrences des motifs
indiqués
@(liste-motif)
Correspond à une occurrence exactement des motifs
indiqués
!(liste-motif)
Correspond à tout sauf les motifs indiqués
Suppression des protections
Après les développements précédents, toutes les occurrences non-
protégées des caractères \, `, et " qui ne résultent pas d'un
développement sont supprimées.
REDIRECTION
Avant qu'une commande ne soit exécutée, il est possible de rediriger
son entrée et sa sortie en utilisant une notation spéciale interprétée
par le shell. Les redirections peuvent également servir à ouvrir ou
fermer des fichiers dans l'environnement actuel du shell. Les
opérateurs de redirection décrits ci-dessous peuvent apparaître avant,
ou au sein d'une commande simple ou suivre une commande. Les redirec‐
tions sont traitées dans l'ordre d'apparition de gauche à droite.
Dans les descriptions suivantes, si le numéro de descripteur de fichier
est omis, et si le premier caractère de l'opérateur de redirection est
<, celui-ci correspondra à l'entrée standard (descripteur de fichier
0). Si le premier caractère de l'opérateur est >, la redirection
s'appliquera à la sortie standard (descripteur de fichier 1).
Le mot qui suit l'opérateur de redirection dans les descriptions suiv‐
antes est soumis à l'expansion des accolades, du tilde, des paramètres,
à la substitution de commandes, à l'évaluation arithmétique, à la sup‐
pression des protections, et au développement des noms de fichiers.
S'il se modifie pour donner plusieurs mots, bash détectera une erreur.
Remarquez que l'ordre des redirections est important. Par exemple, la
commande
ls > liste_répertoires 2>&1
redirige a la fois la sortie standard et la sortie d'erreur vers le
fichier liste_répertoires, alors que la commande
ls 2>&1 > liste_répertoires
ne redirige que la sortie standard vers le fichier liste_répertoires,
car la sortie d'erreur a été renvoyée vers la sortie standard avant que
celle-ci ne soit redirigée vers liste_répertoires.
Une erreur d'ouverture ou de création de fichier peut déclencher un
échec.
Redirection d'entrée
Lorsque l'on applique une redirection d'entrée, le fichier dont le nom
résulte du développement du mot sera ouvert en lecture avec le descrip‐
teur de fichier numéro n, ou en tant qu'entrée standard (descripteur de
fichier 0) si n n'est pas mentionné.
Le format général des redirections d'entrée est le suivant :
[n]mot
Si l'opérateur de redirection est >, et si l'option noclobber de la
commande interne set est activée, la redirection échouera si le fichier
dont le nom résulte du développement du mot existe et est un fichier
régulier. Si l'opérateur de redirection est >|, ou l'opérateur > avec
l'option noclobber de la commande interne set n'est pas activée, la re‐
direction sera tentée même si le fichier dont le nom résulte du
développement du mot existe.
Redirection pour Ajout en Sortie
Lorsqu'on redirige ainsi la sortie, le fichier dont le nom résulte du
développement du mot est ouvert pour ajout en fin de fichier, avec le
descripteur n, ou en tant que sortie standard (descripteur 1) si n
n'est pas mentionné. Si le fichier n'existe pas, il est créé.
Le format général pour la redirection de sortie avec ajout est :
[n]>>mot
Redirection de la sortie standard et de la sortie d'erreur
Bash permet la redirection simultanée de la sortie standard (descrip‐
teur 1) et de la sortie d'erreur (descripteur 2), dans un fichier dont
le nom est le résultat du développement du mot avec cette construction.
Il y a deux formes pour effectuer cette double redirection :
&>mot
et
>&mot
On préfère généralement la première. Elle est sémantiquement équiva‐
lente à
>mot 2>&1
Document en ligne
Avec ce type de redirection, le shell va lire son entrée standard
jusqu'à ce qu'il atteigne une ligne contenant uniquement le mot prévu
(sans espaces à la suite), nommée étiquette. Une fois cette étiquette
atteinte, il exécutera la commande demandée en lui fournissant en
entrée le texte lu avant l'étiquette, que l'on appelle document en
ligne.
Le format des documents en ligne est le suivant :
<<[-]mot
document en ligne
étiquette
Il n'y a ni remplacement de paramètre, ni substitution de commande, ni
développement de chemin d'accès, ni évaluation arithmétique sur le mot.
Si l'un des caractères du mot est protégé, l' étiquette est obtenue
après suppression des protections dans le mot, et les lignes du docu‐
ment ne sont pas développées. Sinon, toutes les lignes du document sont
soumises au remplacement des paramètres, à la substitution de comman‐
des, et à l'évaluation arithmétique. Dans ce dernier cas, les couples
\ sont ignorés, et \ doit être utilisé pour protéger
les caractères \, $, et `.
Si l'opérateur de redirection est <<-, alors les tabulations en tête de
chaque ligne sont supprimées, y compris dans la ligne contenant
étiquette. Ceci permet d'indenter de manière naturelle les documents
en ligne au sein des scripts.
Dédoublement de descripteur de fichier
L'opérateur de redirection
[n]<&mot
permet de dupliquer les descripteurs de fichiers en entrée. Si le mot
se transforme en un ou plusieurs chiffres, le descripteur de fichier n
devient une copie de ce descripteur. Si les chiffres du mot ne corre‐
spondent pas à un descripteur en lecture, une erreur se produit. Si le
mot prend la forme -, le descripteur n est fermé. Si n n'est pas men‐
tionné, on utilise l'entrée standard (descripteur 0).
L'opérateur
[n]>&mot
est utilisé de manière similaire pour dupliquer les descripteurs de
sortie. Si n n'est pas précisé, on considère la sortie standard
(descripteur 1). Si les chiffres du mot ne correspondent pas à un
descripteur en écriture, une erreur se produit. Un cas particulier se
produit si n est omis, et si mot ne se développe pas sous forme de
chiffres. Alors, les sorties standard et d'erreurs sont toutes deux
redirigées comme précédemment.
Ouverture en Lecture/Écriture d'un descripteur de fichier
L'opérateur de redirection
[n]<>mot
ouvre le fichier dont le nom résulte du développement du mot, à la fois
en lecture et en écriture et lui affecte le descripteur de fichier n,
ou bien le descripteur 0 si n n'est pas mentionné. Si le fichier
n'existe pas, il est créé.
ALIAS
Les alias permettent de substituer une chaîne à un mot lorsqu'il est
utilisé comme premier mot d'une commande simple. L'interpréteur gère
une liste d'alias qui peuvent être créés et détruits avec les commandes
internes alias et unalias (voir le paragraphe COMMANDES INTERNES DU
SHELL plus bas). Le shell vérifie si le premier mot de chaque commande
(s'il n'est pas protégé) est un alias. Si tel est le cas, ce mot est
remplacé par le texte de l'alias. Le nom de l'alias, ainsi que le
texte de remplacement, peuvent contenir n'importe quels caractères
valides pour le shell, y compris les méta-caractères présentés plus
haut. Une exception toutefois, le nom de l'alias ne peut pas contenir
de caractère =. Le shell vérifie si le premier mot du texte de rem‐
placement est à son tour le nom d'un alias, mais s'il est identique au
nom de l'alias il ne sera pas remplacé à nouveau. Ceci permet de créer
un alias ls valant ls -F, par exemeple, que bash n'essaiera pas de
développer récursivement. Si le dernier caractère du texte de rem‐
placement est un blanc, alors on vérifiera également si le mot suivant
l'alias est lui aussi un alias.
Les alias sont créés et affichés avec la commande alias, et supprimés
avec la commande unalias.
Il n'existe pas de mécanisme permettant d'utiliser des arguments dans
le texte de remplacement. Si on en a besoin, il faut utiliser une fonc‐
tion du shell.
Les alias ne sont développés qu'avec les shells interactifs sauf si
l'option expand_aliases du shell est activée par la commande shopt
(voir la description de shopt au paragraphe COMMANDES INTERNES DU SHELL
plus bas)
Les règles concernant la définition et l'utilisation des alias sont un
peu confuses. Bash lit toujours au moins une ligne d'entrée
complètement avant d'exécuter une commande de cette ligne. Les alias
sont traités lorsque la commande est lue, et non pas lorsqu'elle est
exécutée. Ainsi, une définition d'alias apparaissant sur la même ligne
qu'une autre commande ne prend pas effet avant la lecture de la
prochaine ligne d'entrée. Autrement dit, une commande placée à la
suite d'une définition d'alias, sur la même ligne ne sera pas affectée
par cet alias. Ce comportement est également important lors de
l'exécution des fonctions. Les alias sont traités lorsque la défini‐
tion de la fonction est lue, et non pas lors de l'exécution de cette
fonction. Ainsi des alias définis dans une fonction ne sont pas actifs
avant la fin de l'exécution de la fonction. Pour plus de tranquillité,
placez toujours les définitions d'alias sur des lignes isolées, et
n'utilisez jamais la commande alias dans les commandes composées.
Notez enfin que la plupart du temps les alias sont avantageusement rem‐
placés par des fonctions du shell.
FONCTIONS
Une fonction du shell mémorise une série de commandes pour permettre
une exécution ultérieure. Leurs definition est décrite plus haut, dans
GRAMMAIRE DU SHELL. Les fonctions sont exécutées dans le contexte de
l'interpréteur en cours. On ne crée pas de nouveau processus pour
interpréter une fonction, contrairement à l'exécution d'un script. Les
arguments d'une fonction sont placés dans les paramètres positionnels
durant son exécution. Le paramètre spécial # est mis a jour. Le
paramètre positionnel 0 n'est pas modifié. Les autres aspects de
l'environnement d'exécution du shell sont identiques entre l'intérieur
de la fonction et le corps appelant du programme, à l'exception de la
gestion de DEBUG (voir la description de la commande interne trap au
paragraphe SHELL BUILTIN COMMANDS plus bas) qui n'est pas héritée.
Les variables locales d'une fonction peuvent être déclarées avec la
commande local. Autrement, les variables et leurs valeurs sont
partagées entre la fonction et son appelant.
Si la commande interne return est exécutée dans une fonction, celle-ci
se termine et l'exécution reprend avec la commande suivant l'appel de
fonction. Quand une fonction se termine, les paramètres positionnels
et le paramètre spécial # reprennent les valeurs qu'ils avaient avant
l'appel de fonction.
Les noms des fonctions et leurs définitions sont affichés avec l'option
-f des commandes internes declare ou typeset. Les options -F de
declare ou typeset n'afficheront que les noms des fonctions. Les fonc‐
tions peuvent être exportées automatiquement avec l'option -f de la
commande interne export, afin de rester définies dans les sous-shells.
Les fonctions peuvent être récursives. Aucune limite n'est imposée
quant au nombre d'appels récursifs.
CALCUL ARITHMÉTIQUE
Le shell permet, dans certaines circonstances, l'évaluation d'expres‐
sions arithmétiques (voir la commande interne let ainsi que le para‐
graphe Évaluation Arithmétique). L'évaluation est effectuée en util‐
isant des entiers longs, sans vérification du débordement. Néanmoins
la division par 0 est détectée et renvoie une erreur. La liste des
opérateurs ci-dessous est constituée par des groupes de précédence
identique. Les niveaux sont classés en ordre de précédence décrois‐
sante.
- + plus et moins unaire
! ~ négations logique et binaire
** exponentiation
* / % multiplication, division, reste
+ - addition, soustraction
<< >> décalage arithmétique à gauche et à droite
<= >= < >
comparaisons
== != égalité et différence
& ET binaire
^ OU exclusif binaire
| OU binaire
&& ET logique
|| OU logique
expr?expr:expr
évaluation conditionnelle
= *= /= %= += -= <<= >>= &= ^= |=
assignations
On peut utiliser les variables du shell comme opérandes, le développe‐
ment des paramètres étant effectué avant l'évaluation arithmétique.
Les valeurs des paramètres sont converties en entiers longs dans les
expressions. Une variable shell n'a donc pas besoin d'avoir l'attribut
"entier" pour être utilisable dans un calcul.
Les constantes commençant par un 0 sont interprétées comme des nombres
octaux. Un entête 0x ou 0X indique une valeur hexadécimale. Sinon, les
nombres ont la forme [base#]n, ou la base arithmétique est un nombre
décimal entre 2 et 36, et n le nombre lui-même exprimé dans cette base.
Si la base n'est pas mentionnée, le nombre est considéré comme décimal.
Les chiffre supérieurs à 9 sont représentés par les lettres minuscules,
les lettres majuscules, le _ et le @, dans cet ordre. Si la base est
inférieure ou égale à 36 les minuscules et les majuscules peuvent être
utilisées de manière interchangeable pour représenter les nombres entre
10 et 35.
Les opérateurs sont évalués dans l'ordre de précédence. Les sous-
expressions entre parenthèses sont évaluées en premier, ce qui permet
de surpasser les règles de précédence.
EXPRESSIONS CONDITIONNELLES
Les expressions conditionnelles sont utilisées par la commande composée
[[ et les commandes internes test et [ pour vérifier l'état d'un
fichier et assurer des comparaisons arithmétiques ou sur des chaînes.
Les expressions se forment à partir des opérateurs unaires ou binaires
suivants. Si un argument fichier est de la forme /dev/fd/n, alors il
représente le descritpeur de fichier n.
-a fichier
Vrai si le fichier existe.
-b fichier
Vrai si le fichier existe et est un fichier spécial bloc.
-c fichier
Vrai si le fichier existe et est un fichier spécial caractère.
-d fichier
Vrai si le fichier existe et est un répertoire
-e fichier
Vrai si le fichier existe.
-f fichier
Vrai si le fichier existe et est un fichier régulier.
-g fichier
Vrai si le fichier existe et a son bit Set-GID positionné.
-h fichier
Vrai si le fichier existe et est un lien symbolique.
-k fichier
Vrai si le fichier existe et a son bit ``sticky'' positionné.
-p fichier
Vrai si le fichier existe et est un tube nommé (FIFO).
-r fichier
Vrai si le fichier existe et est accessible en lecture.
-s fichier
Vrai si le fichier existe et a une taille non nulle.
-t fd Vrai si fd est ouvert sur un terminal.
-u fichier
Vrai si le fichier existe et a son bit Set-UID positionné.
-w fichier
Vrai si le fichier existe et est accessible en écriture.
-x fichier
Vrai si le fichier existe et est exécutable.
-O fichier
Vrai si le fichier existe et appartient à l'ID effectif de
l'utilisateur.
-G fichier
Vrai si le fichier existe et appartient au groupe effectif de
l'utilisateur.
-L fichier
Vrai si le fichier existe et est un lien symbolique.
-S fichier
Vrai si le fichier existe et est une socket
-N fichier
Vrai si le fichier existe et a été modifié depuis sa dernière
lecture.
fichier_1 -nt fichier_2
Vrai si le fichier_1 est plus récent que le fichier_2, d'après
les dates de modification.
fichier_1 -ot fichier_2
Vrai si le fichier_1 est plus vieux que le fichier_2.
fichier_1 -ef fichier_2
Vrai si lefichier_1 et le fichier_2 sont sur le même
périphérique et ont les mêmes numéros d'i-noeuds.
-o nom_opt
Vrai si l'option shell nom_opt est active. Cosulter la liste
des options dans la description de l'argument -o de la commande
interne set plus bas.
-z chaîne
Vrai si la longueur de la chaîne est nulle.
-n chaîne
chaîne Vrai si la longueur de la chaîne est non-nulle.
chaîne_1 == chaîne_2
Vrai si les deux chaînes sont égales. Le symbole = peut servir à
remplacer ==
chaîne_1 != chaîne_2
Vrai si les deux chaînes sont différentes.
chaîne_1 < chaîne_2
Vrai si chaîne_1 se trouve avant chaîne_2 dans l'ordre lexi‐
cographique de la localisation en cours.
chaîne_1 > chaîne_2
Vrai si chaîne_1 se trouve après chaîne_2 dans l'ordre lexi‐
cographique de la localisation en cours.
arg1 OP arg2
OP est l'un des opérateurs suivants -eq, -ne, -lt, -le, -gt, ou
-ge. Ces opérateurs arithmétiques binaires renvoient la valeur
vraie si arg_1 est respectivement égal, différent, inférieur,
inférieur ou égal, supérieur, supérieur ou égal à arg2. Arg1 et
arg2 peuvent être des entiers positifs ou négatifs.
DÉVELOPPEMENT DES COMMANDES SIMPLES
Lors de l'exécution d'une commande simple, le shell effectue les
développements affectations, et redirections de gauche à droite, suiv‐
ants.
1. Les mots que l'analyser a repéré comme affectation de variables
(ceux qui précèdent le nom de la commande) et les redirections
sont mémorisés pour une mise en place ultérieure.
2. Les autres mots sont développés. S'il reste des mots après le
développement, le premier est considéré comme le nom d'une com‐
mande et les suivants comme ses arguments.
3. Les redirections sont mises en place, comme décrit plus-haut au
paragraphe REDIRECTION.
4. Le texte suivant le = dans chaque affectation est soumis au
dévelopement du tilde, des paramètres, à la substitution de com‐
mande, à l'évaluation arithmétique et à la suppression des pro‐
tection avant de remplir la variable.
Si aucun nom de commande ne résulte des précédentes opérations, les
assignations de variable modifie l'environnement en cours. Sinon elles
sont ajoutées à celui de la commande exécutée et ne modifient pas
l'environnement du shell. Si l'une des tentatives d'affectation con‐
cerne une variable en lecture seule, une erreur se produit, et la com‐
mande se termine sur un code non-nul.
Si aucun nom de commande n'est obtenu, les redirections sont réalisées
mais ne modifient pas l'environnement du shell en cours. Une erreur de
redirection renvoie un code de retour non-nul.
S'il reste un nom de commande après l'expansion, l'exécution a lieu
comme décrit ci-dessous. Sinon la commande se termine. Si l'un des
développement contient une substitution de commande, le code de retour
est celui de la dernière substitution de commande réalisée. S'il n'y en
a pas, la commande se termine avec un code de retour nul.
EXÉCUTION DES COMMANDES
Après le découpage de la ligne de commande en mots, si le résultat est
une commande simple suivie d'une éventuelle liste d'arguments, les
actions suivantes sont effectuées.
Si le nom de la commande ne contient pas de slash, le shell tente de la
trouver. S'il existe une fonction shell de ce nom, elle est appelée
comme nous l'avons vu dans le paragraphe FONCTIONS plus haut. Si le nom
n'est pas celui d'une fonction, l'interpréteur le recherche dans la
liste des fonctions internes. Si une équivalence est trouvée, la fonc‐
tion interne est invoquée.
Si le nom n'est ni celui d'une fonction shell, ni celui d'une commande
interne, et s'il ne contient pas de slash, bash va chercher dans chacun
des membres de PATH un répertoire contenant un fichier exécutable du
nom désiré. Bash utilise une table de hachage pour mémoriser les noms
d'accès complets des fichiers (voir la commande hash au paragraphe COM‐
MANDES INTERNES DU SHELL plus bas). Une recherche complète dans les
répertoires du PATH n'est entreprise que si la commande ne se trouve
pas dans la table de hachage. Si la recherche est infructueuse,
l'interpréteur affiche un message d'erreur et renvoie un code de retour
valant 127.
Si la recherche réussit, ou si le nom de la commande contient au moins
un slash, le shell exécute le programme voulu dans un environnement
distinct. L'argument 0 est rempli avec le nom fourni, et les autres
arguments seront éventuellement remplis avec le reste de la ligne de
commande.
Si l'exécution échoue parce que le programme n'est pas un exécutable,
et si le fichier n'est pas un répertoire, on le considère alors comme
un script shell, un fichier contenant une série de commandes. Un sous-
shell est alors créé pour exécuter ce script. Ce sous-shell se réini‐
tialisera lui-même, comme si un nouveau shell avait été invoqué pour
exécuter le script, à la différence qu'il continuera à mémoriser
l'emplacement des commandes connues de son parent (voir hash dans le
paragraphe COMMANDES INTERNES DU SHELL plus bas).
Si le programme est un fichier commençant par #!, le reste de la
première ligne indique un interpréteur pour ce programme. Le shell se
chargera d'exécuter cet interpréteur, si le système d'exploitation ne
gère pas lui-même ce format d'exécutable. Les arguments de
l'interpréteur consistent en un premier argument éventuel fourni sur la
première ligne du fichier à la suite du nom de l'interpréteur, suivi du
nom du programme, suivi des arguments de la commande s'il y en a.
ENVIRONNEMENT D'EXÉCUTION DES COMMANDES
Le shell fournit un environnement d'exécution consistant en l'ensemble
des éléments suivants :
· les fichiers ouverts hérités par le shell à son lancement, et
modifiés par les redirections de la commande interne exec ;
· le répertoire de travail configuré par cd, pushd, ou popd, ou
hérité par le shell son démarrage ;
· le masque de création de fichier fixé par umask ou hérité du
père du shell ;
· la gestion des signaux configurée avec trap ;
· les paramètres du shemm fixés par des affectation de variables
ou avec la commande interne set ou hérité de l'environnement du
père du shell ;
· les fonctions du shell définies lors de l'exécution ou héritées
de l'environnement du père du shell ;
· les options fournies au démarrage (par défaut ou sur la ligne de
commandes) ou par la commande interne set ;
· les options activées par la commande interne shopt ;
· les alias du shell définies par la commande alias ;
· les ID des divers processus, y compris ceux à l'arrière-plan, la
valeur de $$, et la valeur de $PPID.
Lorsqu'une commande autre qu'une fonction interne ou une fonction du
shell doit être exécutée, elle est invoquée dans un environnement
d'exécution séparé constitué de ce qui suit. Sauf indication con‐
traire, les valeurs sont héritées de l'environnement du shell.
· les fichier ouverts du shell, auxquels s'ajoutent les modifica‐
tion indiquées par le redirections apportées à la commande ;
· le répertoire de travail en cours ;
· le masque de création de fichiers ;
· les variables du shell marquées pour l'exportation, ainsi que
les variables exportées spécialement pour la commande ;
· les signaux capturés par le shell reprennent le comportement
hérité du père du shell, et les signaux ignorés par le shell
restent ignorés.
Une commande invoquée dans un environnement distinct ne peut pas
affecter l'environnement d'exécution du shell.
Les substitutions de commandes et les commandes asynchrones sont
invoquées dans un environnement de sous-shell qui est une copie de
celui du shell, sauf que les signaux capturés par le shell reprennent
le comportement qu'ils avaient au lancement du shell. Les fonctions
internes invoquées dans un pipeline sont aussi exécutées dans un envi‐
ronnement de sous-shell. Les modifications apportées à l'environnement
d'un sous-shell n'affectent aucunement l'environnement du shell.
ENVIRONNEMENT
Quand un programme est invoqué, il reçoit un tableau de chaînes que
l'on appelle environnement. Il s'agit d'une liste de paires
nom-valeur, de la forme nom=valeur.
Le shell permet de manipuler l'environnement de plusieurs façons. Au
démarrage, le shell analyse son propre environnement, et crée un
paramètre pour chaque nom trouvé, en le marquant comme exportable vers
les processus fils. Les commandes exécutées héritent de cet environ‐
nement. Les commandes export et declare -x permettent d'ajouter ou de
supprimer des paramètres ou des fonctions de l'environnement. Si la
valeur d'un paramètre de l'environnement est modifiée, la nouvelle
valeur devient une partie de l'environnement, et elle remplace l'anci‐
enne. L'environnement hérité par les commandes exécutées est l'environ‐
nement initial du shell (dont les valeurs peuvent être modifiées),
moins les éléments supprimés par la commande unset, plus les éléments
ajoutés par les commandes export et declare -x.
L'environnement d'une commande simple ou d'une fonction peut être aug‐
menté temporairement en la faisant précéder d'une affectation de
paramètre, comme nous l'avons vu au paragraphe PARAMÈTRES. Ces affec‐
tations ne concernent que l'environnement vu par cette commande ou
fonction.
Si l'option -k est utilisée (voir la commande interne set plus bas),
alors toutes les affectations de paramètres sont placées dans l'envi‐
ronnement d'une commande exécutée, pas seulement celles qui précèdent
son nom.
Quand bash invoque une commande externe, la variable _ contient le
chemin d'accès complet à cette commande, et elle est transmise dans
l'environnement.
CODE DE RETOUR
Au niveau du shell, une commande qui se termine avec un code de retour
nul est considérée comme réussie. Le zéro indique le succès. Un code de
retour non-nul indique un échec. Quand une commande se termine à cause
d'un signal fatal, bash utilise la valeur 128+signal comme code de
retour.
Si une commande n'est pas trouvée, le processus fils créé pour
l'exécuter renvoie la valeur 127. Si la commande est trouvée mais pas
exécutable, la valeur renvoyée est 126.
Si une commande échoue à cause d'une erreur survenue lors du développe‐
ment ou de la mise en place des redirections, le code de retour est
supérieur à zéro.
Les fonctions interne renvoient zéro (vrai) si elles réussissent et une
valeur non nulle (faux) si une erreur se produit durant leur exécution.
Toutes les fonctions internes renvoient 2 en cas d'erreur de syntaxe.
Bash lui-même renvoie le code de retour de la dernière commande
exécutée, à moins qu'une erreur de syntaxe ne se produise, auquel cas
il renvoie une valeur non-nulle. Voir également la commande interne
exit plus bas.
SIGNAUX
Quand bash fonctionne de manière interactive, il ignore le signal
SIGTERM (c'est pourquoi kill 0 ne tue pas un shell interactif), et le
signal SIGINT est intercepté et géré (c'est pourquoi la commande
interne wait n'est pas interruptible). Dans tous les cas, bash ignore
le signal SIGQUIT. Si le contrôle de jobs est disponible, bash ignore
les signaux SIGTTIN, SIGTTOU, et SIGTSTP.
Les jobs synchrones lancés par bash reçoivent les valeurs des signaux
héritées par le shell de leur parent. Quand le contrôle de job n'est
pas actif, les jobs en arrière-plan ignorent les signaux SIGINT et
SIGQUIT également. Les commandes exécutées en tant que résultat de la
substitution de commandes ignorent les signaux de contrôle de jobs émis
par le clavier SIGTTIN, SIGTTOU, et SIGTSTP.
Par défaut, le shell se termine à la réception de SIGHUP. Avant de se
terminer, il renvoie SIGHUP à tous les jobs en cours ou arrêtés. Les
jobs arrêtés reçoivent aussi SIGCONT pour s'assurer qu'il recevront
bien le SIGHUP. Pour empêcher le shell d'envoyer ce signal à un job
particulier, il faut le retirer de la table des jobs à l'aide de la
commande interne disown (voir FONCTIONS INTERNES DU SHELL plus bas) ou
le marquer comme exempté de SIGHUP avec disown -h.
Si l'option du shell huponexit a été activée avec la fonction shopt,
bash envoie un signal SIGHUP à tous les jobs lorsqu'un shell de login
interactif se termine.
Lorsque bash reçoit un signal qu'il doit capturer, et qu'il attend la
fin d'une commande, le gestionnaire de signal ne sera pas exécuté avant
que la commande soit finie. Lorsque bash attend la fin d'une commande
asynchrone avec wait la réception d'un signal capturé causera la fin
immédiate de la commande wait avec un code de retour supérieur à 128, à
la suite de quoi le gestionnaire de signal sera exécuté.
CONTRÔLE DES JOBS
Le contrôle des jobs permet d'arrêter (suspend) sélectivement
l'exécution d'un processus, et de la reprendre (resume) ultérieurement.
L'utilisateur bénéficie généralement de cette possibilité grâce à
l'action conjointe du pilote de terminal et de bash.
L'interpréteur associe un job à chaque tube. Il maintient une table des
jobs en cours d'exécution, cette table pouvant être affichée avec la
commande jobs. Quand bash lance un job de manière asynchrone (en
arrière-plan), il affiche une ligne du genre :
[1] 25647
Cette ligne indique que le job est associé au numéro 1, et que le PID
du dernier processus dans le tube est 25647. Tous les processus dans
un tube simple font partie du même job. Bash utilise la notion de job
comme une abstraction pour aider à les contrôler.
Pour faciliter l'implémentation d'une interface utilisateur pour le
contrôle de job, le système introduit la notion d'ID de groupe de pro‐
cessus associés à un terminal. Les membre de ce groupe de processus
(ceux dont le GID est égal au Process Group ID du terminal) reçoivent
les signaux déclenchés par le clavier, comme SIGINT. Ces processus
sont dits en avant-plan. Les processus en arrière-plan sont ceux dont
le Process-GID diffère de celui du terminal ; ils ne reçoivent pas les
signaux déclenchés par le clavier. Seuls les processus en avant-plan
peuvent lire depuis le terminal ou écrire dessus. Les processus en
arrière-plan qui tentent une lecture (ou une écriture) sur le terminal
reçoivent les signaux SIGTTIN (SIGTTOU) émis par le pilote de
périphérique du terminal, lesquels signaux suspendent l'exécution du
processus (sauf interception du signal).
Si le système d'exploitation sur lequel bash fonctionne permet le
contrôle des jobs, bash vous y donne accès. La frappe d'un caractère
suspension (généralement ^Z, Contrôle-Z) pendant l'exécution d'un pro‐
cessus arrête celui-ci, et redonne la main à bash. La frappe d'un car‐
actère suspension différée (généralement ^Y, Contrôle-Y) arrêtera le
processus au moment où il tentera de lire depuis le terminal, et la
main reviendra à bash. Il est possible de manipuler ces jobs en util‐
isant la commande bg (background = arrière-plan) pour continuer
l'exécution en arrière-plan, fg (foreground) pour la reprendre en
avant-plan, ou encore la commande kill pour tuer le processus. Un ^Z
prend effet immédiatement, et élimine les sorties en attente.
Il y a plusieurs manières de faire référence à un job. Le caractère %
introduit un nom de job. Le job numéro n peut être noté %n. On peut
également faire référence à un job en utilisant un préfixe du nom
utilise pour le lancer, ou une partie de la ligne de commande. Par
exemple, %ce se réfère à un job arrêté nomme ce. Si ce préfixe corre‐
spond à plusieurs jobs, bash renverra une erreur. D'autre part, %?ce,
fait référence à n'importe quel job contenant la chaîne ce dans sa
ligne de commande. Si la sous-chaîne correspond à plusieurs jobs, bash
renverra une erreur. Les symboles %% et %+ référencent le job courant
du shell, c'est à dire le dernier job arrêté alors qu'il se trouvait en
avant-plan. Le job précédent peut être mentionné en utilisant %-.
Dans les affichages se rapportant aux jobs (par exemple ceux de la com‐
mande jobs le job courant est toujours indiqué par un +, et le job
précédent avec un -.
Il suffit de nommer un job pour le ramener en avant-plan : %1 est syn‐
onyme de ``fg %1'', et ramène le job 1 depuis l'arrière-plan vers
l'avant-plan. De même, ``%1 &'' relance le job 1, mais en arrière-plan
cette fois, de manière équivalente à ``bg %1''.
Le shell est immédiatement prévenu lorsqu'un job change d'état. Nor‐
malement bash attend d'être prêt à afficher son symbole d'accueil avant
de fournir un rapport sur les changements dans les statut des jobs,
afin de ne pas perturber les autres affichages. Si l'option -b de la
commande interne set est active bash affichera les modifications
immédiatement.
Si vous essayez de quitter bash avec des jobs suspendus, le shell
affichera un avertissement. La commande jobs permet de vérifier leurs
états. Une fois cette commande invoquée, ou si vous essayez à nouveau
de quitter le shell immédiatement, il n'y aura plus d'avertissement, et
les jobs suspendus seront définitivement terminés.
SYMBOLE D'ACCUEIL (PROMPT)
Quand il est exécuté de manière interactive, bash affiche le symbole
d'accueil principal PS1 dès qu'il est prêt à lire une commande, et le
symbole d'accueil secondaire PS2 quand il a besoin de plus de données
pour exécuter une commande. Bash permet de personnaliser ces chaînes
d'accueil, avec des séquences d'échappement ayant les significations
suivantes :
\a le caractère d'alarme ASCII 07
\d la date au format "Jour_de_la_semaine Mois Quantième" (ex
: "Tue May 26")
\e le caractère d'échappement ASCII 033
\h le nom d'hôte de la machine, juqu'au premier point `.'
\H le nom d'hôte complet de la machine
\n un saut de ligne
\r un retour-chariot
\s le nom du shell, c'est à dire le nom de base de $0 (la
portion suivant le dernier slash)
\t l'heure actuelle au format HH:MM:SS sur 24 heures
\T l'heure actuelle au format HH:MM:SS sur 12 heures
\@ l'heure actuelle sur 12 heures au format HH:MM am/pm
\u le nom de l'utilisateur
\v la version de bash (par exemple 2.04)
\V le numéro de version complet de bash par exemple (2.04.0)
\w le répertoire de travail en cours
\W le nom de base du répertoire de travail en cours
\! le numéro d'historique de la commande
\# le numéro de la commande
\$ # si l'UID effectif est 0, $ sinon
\nnn le caractère de code octal nnn
\\ le caractère antislash
\[ débute une série de caractères non-imprimables, qui per‐
mettent d'inclure des séquences de contrôle de terminal
dans une chaîne d'accueil
\] fin d'une série 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 correspond à sa
position dans la liste d'historique qui peut contenir des commandes
relues depuis cette liste (voir le paragraphe HISTORIQUE plus bas),
alors que le numéro de commande est simplement une position dans la
séquence de commandes exécutées depuis le début de la session shell
actuelle. Après que la chaîne d'invite ait été décodée, elle est
soumise à l'expansion des paramètres, substitution de commandes, évalu‐
ation arithmétique et découpage des mots, sous condition de l'option
shell promptvars (voir la description de shopt au paragraphe FONCTIONS
INTERNES DU SHELL plus bas).
BIBLIOTHÈQUE READLINE
Il s'agit de la bibliothèque qui gère la saisie lors des sessions
interactives du shell, à moins que l'option -nolineediting n'ait été
choisie. Par défaut les commandes d'édition de ligne sont similaires à
celles d'emacs. Il est également possible de disposer d'une interface
d'édition du style vi. Pour arrêter l'édition de ligne, utiliser
l'option +o emacs ou +o vi de la commande set (voir FONCTIONS INTERNES
DU SHELL plus bas).
Notation Readline
Dans ce paragraphe on utilisera la notation "à la emacs" pour indiquer
les séquences de touches. Les touches Contrôle sont notées C-touche,
par exemple C-n signifie Contrôle-N. De même, les touches Méta sont
notées par M-touche, ainsi M-x signifie Méta-X. (Sur les claviers sans
touches Méta, M-x signifie ESC x (sur les claviers français ESC est
noté Échappement), autrement dit presser la touche Échappement puis la
touche x. On dit alors qu'ESC est le préfixe méta. La séquence M-C-x
signifie ESC-Contrôle-x, ou encore Presser la touche Échappement puis
maintenez la touche Contrôle enfoncée tout en pressant la touche x.
Les commandes readline peuvent recevoir des arguments numériques, qui
fonctionnent en règle générale comme compteurs de répétitions. Par‐
fois, néanmoins le signe de l'argument est significatif. L'utilisation
d'un argument négatif pour une commande agissant dans un sens donné
(par ex. kill-line) fait agir la commande en sens inverse. Les comman‐
des ayant un comportement différent sont indiqués plus bas.
Lorsqu'une commande est indiquée comme détruisant du texte, le texte
effacé est en fait disponible pour une récupération ultérieure. Il est
sauvé dans un tampon circulaire. Les suppressions successives accumu‐
lent les textes en un seul bloc qui peut être récupéré en une fois.
Les commandes non destructrices séparent les blocs de textes dans le
buffer circulaire.
Initialisation de Readline
L'affectation par défaut des touches peut être modifiée dans un fichier
d'initialisation (inputrc). Le nom de ce fichier est lu dans la vari‐
able shell INPUTRC. Si la variable n'existe pas, le nom par défaut est
~/.inputrc. Quand un programme utilisant la bibliothèque readline
démarre, les fichiers d'initialisation sont lus, et les affectations de
touches et de variables sont mises en place. Il n'y a que peu d' con‐
structions possibles dans les fichiers d'initialisation de Readline.
Les lignes blanches sont ignorées. Les lignes commençant par # sont
des commentaires. Les lignes commençant par $ indiquent des construc‐
tions conditionnelles. Les autres lignes sont des affectations de
touches ou de variables.
Les affectations par défaut des touches peuvent être modifiés par un
fichier inputrc d'initialisation. D'autres programmes qui utilisent
cette bibliothèque peuvent ajouter leurs propres affectations de
touches.
Par exemple, en plaçant
M-Control-u: universal-argument
ou
C-Meta-u: universal-argument
dans le fichier ~/.inputrc, on affectera à la séquence de touche M-C-u
la commande readline universal-argument.
Les caractères symboliques suivants sont acceptés : RUBOUT, DEL, ESC,
LFD, NEWLINE, RET, RETURN, SPC, SPACE, et TAB. En plus des noms de
commandes, readline permet d'affecter à une touche une chaîne de car‐
actères qui sera insérée lors de la pression (macro).
Affectation des touches de Readline
La syntaxe des affectations de touches dans le fichier ~/.inputrc est
simple. Les seules choses nécessaires sont le nom d'une commande, ou
le texte d'une macro, et la séquence de touches à laquelle il faut
l'affecter. Les touches peuvent être indiquées de deux manières : sous
forme de nom symbolique, éventuellement précédé de Meta- ou Control-,
ou sous forme de séquence de touches. Avec la forme
touche:nom_de_fonction ou macro, touche est le nom de la séquence de
touches épelée en Anglais. Par exemple :
Control-u: universal-argument
Meta-Rubout: backward-kill-word
Control-o: "> sortie"
Dans ces exemples, C-u est assigné à la fonction universal-argument, M-
DEL à la fonction backward-kill-word, et C-o est affecté à la macro
exprimée dans la partie gauche (c'est à dire insérera > sortie sur la
ligne).
Avec la seconde forme, "touches":nom_de_fonction ou macro, touches
n'est plus un nom symbolique, mais décrit une séquence complète de
touches entre guillemets. Certaines séquences d'échappement dans le
style GNU Emacs peuvent être utilisée, comme dans l'exemple suivant :
"\C-u": universal-argument
"\C-x\C-r": re-read-init-file
"\e[11~": "Touche Fonction 1"
Dans cet exemple, C-u est à nouveau assigné à la fonction univer‐
sal-argument, C-x C-r à la fonction re-read-init-file, et ESC [ 1 1 ~
insérera le texte Touche Fonction 1. L'ensemble complet des séquences
d'échappement est le suivant :
\C- préfixe Contrôle
\M- préfixe Méta
\e caractère d'échappement
\\ backslash
\" un guillemet " littéral
\' une apostrophe ' littéral
En plus des séquences dans le style Gnu Emacs, un second jeu de
séquences d'échappement est disponible
\a alerte (sonnerie)
\b backspace
\d effacement
\f saut de page
\n saut de ligne
\r retour-chariot
\t tabulation horizontale
\v tabulation verticale
\nnn le caractère de code ASCII nnn en octal (de un à trois
chiffres)
\xnnn le caractère de code ASCII nnn en hexadécimal (un à trois
chiffres)
Lorsque l'on saisit le texte d'une macro, il faut utiliser des apostro‐
phes ou des guillemets pour indiquer la définition de la macro. Les
textes non protégés sont considérés comme des noms de fonctions. Le
backslash protégera n'importe quel caractère dans la définition d'une
macro, y compris " et '.
Bash permet d'afficher ou de modifier les affectations des touches avec
la commande interne bind. On peut changer de mode d'édition durant une
session interactive en utilisant l'option -o de la commande interne set
(voir le paragraphe COMMANDES INTERNES DU SHELL plus bas).
Variables de Readline
Readline dispose de variables permettant de personnaliser encore plus
son comportement. Une variable peut être configurée dans le fichier
inputrc avec une déclaration de la forme
set nom_de_variable valeur
Sauf contre-indication, les variables de readline prennent les valeurs
On ou Off. Les variables, et leurs valeurs par défaut, sont :
bell-style (audible)
Cette variable commande readline lorsqu'il faut déclencher le
signal sonore du terminal. Si cette variable contient la valeur
none, readline n'utilise pas de signal, si elle contient visi‐
ble, on utilise un avertisseur visuel, si elle contient audible,
readline essaie le signal sonore du terminal.
comment-begin (``#'')
Cette chaîne est insérée quand la commande readline insert-com‐
ment est exécutée. Elle est affectée à M-en mode emacs, et # en
mode vi.
completion-ignore-case (Off)
Sur On, Readline effectue les comparaisons et complétions de
noms de fichiers en différenciant les majuscules et minuscules.
completion-query-items (100)
Lors de la complétion de commandes, si le nombre de possibilités
est supérieur à cette valeur, on demandera confirmation à
l'utilisateur avant d'afficher la liste des possibilités. Le
nombre de complétions possibles est déterminé par la commande
possible-completions. Il peut s'agir de n'importe quelle valeur
entière supérieure ou égale à zéro
convert-meta (On)
Si cette variable contient la valeur On, readline transformera
en séquences ASCII les caractères ayant leur huitième bit à 1.
Il supprimera ce huitième bit, et insérera comme préfixe le car‐
actère d'échappement (en utilisant ce caractère d'échappement
comme préfixe méta).
disable-completion (Off)
Si cette variable contient On, Readline désactivera la
complétion des mots. Les caractères de complétion seront
insérés sur la ligne comme s'ils avaient été associé à self-
insert.
editing-mode (emacs)
Cette variable indique si readline doit démarrer avec des affec‐
tations de touches similaires à emacs ou à vi. editing-mode
peut prendre les valeurs emacs ou vi.
enable-keypad (Off)
Sur On, Readline essayera d'activer le clavier de l'application
lorsqu'elle sera invoquée. Sur certains systèmes, cela est
nécessaire pour utiliser les touches flèchées.
expand-tilde (Off)
Si cette variable contient la valeur on, le développement du
tilde est effectué lorsque readline tente une complétion de com‐
mandes.
horizontal-scroll-mode (Off)
Si cette variable contient la valeur On, readline utilisera une
seule ligne d'affichage, et la fera défiler horizontalement si
elle devient plus longue que la largeur de l'écran, plutôt que
de basculer sur une nouvelle ligne.
input-meta (Off)
Si cette variable contient la valeur On, readline acceptera des
saisies sur huit bits (autrement dit il ne supprimera pas le
huitième bit), quelque soit le terminal utilisé. Le nom
meta-flag est un synonyme pour cette variable.
isearch-terminators (``C-[C-J'')
La chaîne de caractères qui doivent terminer une recherche
incrémentale sans que le caractère ne soit exécuté comme une
commande. Si cette variable n'a pas de valeur, les caractères
ESC et C-J termineront une recherche incrémentale.
keymap (emacs)
Configure l'affectation des touches. Les jeux d'affectations
disponibles sont 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; notez que la configuration de la variable editing-mode
modifie aussi l'affectation par défaut.
mark-directories (On)
Sur On, les noms de répertoires sont complétés par un slash.
mark-modified-lines (Off)
Sur On, les lignes d'historique qui ont été modifiées seront
précédées à l'affichage d'un astérisque (*).
output-meta (Off)
Si cette variable contient la valeur On, readline affichera
directement les caractères ayant leur huitième bit à 1, plutôt
que d'utiliser une séquence d'échappement avec le préfixe méta.
print-completions-horizontally (Off)
Sur On, Readline affichera les possibilités de complétions triés
horizontalement dans l'ordre alphabétique plutôt que verticale‐
ment.
show-all-if-ambiguous (Off)
Cette variable agit sur la complétion des commandes. Lorsqu'elle
contient la valeur on, toutes les complétions possibles sont
affichées immédiatement plutôt que de déclencher l'avertisseur
sonore.
visible-stats (Off)
Sur On, un caractère indiquant le type de fichier, comme fourni
par l'appel-système stat(2) sera ajouté aux noms de fichiers
lors de l'affichage des complétions possibles.
Constructions conditionnelles de Readine
Readline propose un mécanisme inspiré des possibilités de compilation
conditionnelle en C, qui permet d'effectuer certaines assignations de
variables, ou affectations de touches en fonction du résultat d'un
test. Il y a quatre directives utilisables.
$if La structure $if permet d'affecter les touches en fonction du
mode d'édition, du terminal de saisie, ou de l'application qui
utilise la bibliothèque readline. Le texte du test se trouve à
la suite du $if, jusqu'à la fin de la ligne.
mode La forme mode= de la structure $if permet de vérifier si
readline est en mode emacs ou en mode vi. Ceci peut être
utilisé conjointement à la commande set keymap, par exem‐
ple pour ne configurer les jeux de touches emacs-standard
et emacs-ctlx que si readline démarre en mode emacs.
term La forme term= peut être utilisée pour ajouter des affec‐
tations de touches spécifiques au terminal, par exemple
sur des touches de fonction. Le mot à droite du signe =
est comparé au nom complet du terminal, et à la portion
du nom qui précède un éventuel signe -. Ceci permet, par
exemple, de faire correspondre le mot sun aussi bien au
terminal sun qu'au terminal sun-cmd.
application
La forme application permet d'inclure des configurations
spécifiques à l'application. Chaque programme utilisant
la bibliothèque readline configure un nom d'application,
et un fichier d'initialisation peut dépendre de ce nom.
Ceci est utile pour des affecter des touches intéressant
un programme spécifique. Ainsi, les commandes suivantes
ajoutent une séquence de touches protégeant par des
guillemets le mot courant ou le mot précédent, sous Bash
:
$if Bash
# Protéger le mot actuel ou le précédent
"\C-xq": "\eb\"\ef\""
$endif
$endif Cette commande, comme on l'a vu dans l'exemple ci-dessus, ter‐
mine une commande $if.
$else Permet d'ajouter des commandes qui seront exécutées si un $if
échoue.
$include
Cette directive prend un simple nom de fichier en argument et y
lit les commandes et les affectations. Par exemple, la directive
suivante lit le fichier /etc/inputrc:
$include /etc/inputrc
Recherche
Readline propose des commandes de recherche au sein de l'historique de
commandes (voir HISTORIQUE plus bas) des lignes contenant une chaîne
donnée. Il y a deux modes de recherche : incrémental et non-incrémen‐
tal.
Les recherches incrémentales commencent avant même que l'utilisateur
ait terminé de saisir la chaîne recherchée. À chaque caractère saisi,
Readline affiche l'entrée suivante de l'historique qui corresponde à la
chaîne déjà entrée. Une recherche incrémentale nécessite seulement le
nombre de caractères indispensable pour retrouver l'entrée d'historique
désirée. Les caractères se trouvant dans la variable isearch-termina‐
tors servent à terminer une recherche incrémentale. Si cette variable
n'a pas de valeur, les caractères Escape et Contrôle-J terminent une
recherche incrémentale. Contrôle-G permet d'interrompre une recherche
incrémentale de reprendre la ligne originale. Lorsque la recherche est
finie, l'entrée d'historique contenant la chaîne désirée devient la
ligne en cours. Poue trouver une autre entrée d'historique correspon‐
dant aussi, il faut taper Contrôle-S ou Contrôle-R. Cela recherchera
en avant ou en arrière l'entrée d'historique suivante qui corresponde à
la chaîne saisie jusque là. Toute séquence de touche affectée à une
commande Readline terminera la recherche et exécutera la commande. Par
exemple, un newline terminera la recherche et validera la ligne, ce qui
exécute la commande de la ligne d'historique.
Les recherches non-incrémentales lisent la chaîne désirée en entier
avant de démarrer la recherche de correspondance dans la liste d'his‐
torique. La chaîne peut être saisie par l'utilisateur ou se trouver sur
la ligne en cours.
Noms des commandes Readline
Voici une liste des noms de commandes, ainsi que les séquences de
touches auxquelles elles sont attribuées par défaut. Les commandes
sans séquence indiquée n'ont pas d'affectation par défaut.
Commandes de déplacement
beginning-of-line (C-a)
Saut au début de la ligne en cours.
end-of-line (C-e)
Saut à la fin de la ligne.
forward-char (C-f)
Avancer d'un caractère.
backward-char (C-b)
Reculer d'un caractère.
forward-word (M-f)
Avancer jusqu'à la fin du mot suivant. Les mots sont composés de
caractères alphanumériques (lettres et chiffres).
backward-word (M-b)
Reculer jusqu'au début du mot courant, ou du précédent. Les mots
sont composés de caractères alphanumériques (lettres et
chiffres).
clear-screen (C-l)
Effacer l'écran, en laissant la ligne courante en haut de
l'écran. S'il y a un argument, rafraîchir la ligne en cours sans
effacer l'écran.
redraw-current-line
Rafraîchir la ligne en cours. Par défaut pas d'affectation de
touche.
Commandes de manipulation de l'historique
accept-line (Retour-Chariot)
Valider la ligne, sans se soucier de l'emplacement du curseur.
Si la ligne n'est pas vide, l'ajouter à la liste d'historique,
sous contrôle de la variable HISTCONTROL. Si cette ligne est
une modification d'une ligne de l'historique, restaurer cette
dernière.
previous-history (C-p)
Récupérer la commande précédente de la liste d'historique.
next-history (C-n)
Récupérer la commande suivante dans la liste d'historique.
beginning-of-history (M-<)
Récupérer la première ligne de l'historique.
end-of-history (M->)
Retourner à la fin de l'historique, c'est à dire à la ligne en
cours d'édition.
reverse-search-history (C-r)
Rechercher en arrière dans l'historique, en remontant. C'est une
recherche incrémentale.
forward-search-history (C-s)
Rechercher en avant dans l'historique, en descendant. C'est une
recherche incrémentale.
non-incremental-reverse-search-history (M-p)
Rechercher une chaîne en arrière dans l'historique, en remontant
depuis la ligne actuelle, utiliser une recherche non-incrémen‐
tale.
non-incremental-forward-search-history (M-n)
Rechercher une chaîne en avant dans l'historique, utiliser une
recherche non-incrémentale.
history-search-forward
Rechercher en avant dans l'historique la chaîne comprise entre
le début de la ligne actuelle, et la position du curseur. Par
défaut cette commande n'est affectée à aucune touche. Cette une
recherche non-incrémentale.
history-search-backward
Rechercher en arrière dans l'historique la chaîne comprise entre
le début de la ligne actuelle, et la position du curseur. Cette
une recherche non-incrémentale.
yank-nth-arg (M-C-y)
Insérer, à l'emplacement du curseur, le premier argument de la
commande précédente. Généralement il s'agit du second mot de la
ligne précédente. Avec un argument n, insérer le nième mot de
la commande précédente (les mots sont numérotés à partir de 0).
Un argument négatif insère le nième mot en partant de la fin de
la commande précédente.
yank-last-arg (M-., M-_)
Insérer à la position du curseur le dernier argument de la com‐
mande précédente (le dernier mot de la ligne précédente). Avec
un argument, se comporte exactement comme yank-nth-arg. Les
appels successifs à yank-last-arg reviennent en arrière dans
l'historique en insérant le dernier argument de chaque ligne à
chaque fois.
shell-expand-line (M-C-e)
Développer, comme le fait le shell, la ligne en cours. Ceci
inclut le remplacement des alias et des directives d'historique,
aussi bien que l'ensemble des expansions effectuées par le
shell. Voir EXPANSION DE L'HISTORIQUE plus bas, pour une
description détaillée.
history-expand-line (M-^)
Effectuer l'expansion d'historique sur la ligne en cours. Voir
le paragraphe EXPANSION DE L'HISTORIQUE plus bas, pour une
description détaillée.
magic-space
Effectuer l'expansion de l'historique sur la ligne en cours et
insérer une espace. Voir EXPANSION DE L'HISTORIQUE plus bas,
pour une description détaillée.
alias-expand-line
Effectuer l'expansion des alias sur la ligne en cours. Voir
ALIAS plus bas pour une description des expansions d'alias.
history-and-alias-expand-line
Effectuer l'expansion de l'historique et des alias sur la ligne
en cours.
insert-last-argument (M-., M-_)
un synonyme de yank-last-arg.
operate-and-get-next (C-o)
Valider la ligne en cours, et récupérer la ligne suivante de
l'historique pour l'édition. Tout argument est ignoré.
Commande d'édition de texte
delete-char (C-d)
Effacer le caractère sous le curseur. Si le curseur est au début
de la ligne, si celle-ci est vide, et si le dernier caractère
frappé n'était pas delete-char, alors la valeur renvoyée est
EOF.
backward-delete-char (Rubout)
Effacer le caractère derrière le curseur. Lorsque un argument
est fourni, le texte effacé est sauvegardé dans le buffer circu‐
laire.
forward-backward-delete-char
Effacer le caractère sous le curseur, sauf s'il est en fin de
ligne, auquel cas le caractère derrière le curseur est effacé.
Par défaut cette action n'est associée à aucune touche.
quoted-insert (C-q, C-v)
Ajouter littéralement sur la ligne le caractère frappé suivant.
Ceci permet d'insérer des caractères comme C-q, par exemple.
tab-insert (C-v TAB)
Insérer un caractère de tabulation.
self-insert (a, b, A, 1, !, ...)
Insérer le caractère mentionné.
transpose-chars (C-t)
Échanger les caractères se trouvant devant et sous le curseur.
Le curseur est avancé d'un caractère. À la fin d'une ligne, les
caractères échangés sont les deux précédents. Les arguments
négatifs ne sont pas acceptés.
transpose-words (M-t)
Échanger le mot où se trouve le curseur et le mot précédent,
puis avancer le curseur après ce mot.
upcase-word (M-u)
Transformer le mot en cours (ou le suivant) en majuscules. Avec
un argument négatif, agir sur le mot précédent mais ne pas
déplacer le curseur.
downcase-word (M-l)
Transformer le mot en cours (ou le suivant) en minuscules. Avec
un argument négatif, agir sur le mot précédent mais ne pas
déplacer le curseur.
capitalize-word (M-c)
Passer en majuscule l'initiale du mot en cours (ou du suivant).
Avec un argument négatif, agir sur le mot précédent mais ne pas
déplacer le curseur.
Effacement et récupération
kill-line (C-k)
Effacer le texte depuis l'emplacement du curseur jusqu'à la fin
de la ligne.
backward-kill-line (C-x C-Rubout)
Effacer en arrière jusqu'au début de ligne.
unix-line-discard (C-u)
Effacer le texte entre le début de la ligne et l'emplacement du
curseur. Le texte est sauvegardé dans le buffer circulaire.
kill-whole-line
Effacer toute la ligne sans tenir compte de la position du
curseur.
kill-word (M-d)
Effacer le texte entre l'emplacement du curseur et la fin du mot
en cours, ou jusqu'à la fin du mot suivant si le curseur est
entre deux mots. Les séparations de mots sont les mêmes que
celles de forward-word.
backward-kill-word (M-Rubout)
Effacer le mot sous le curseur Les séparations de mots sont les
mêmes que celles de backward-word.
unix-word-rubout (C-w)
Effacer le mot derrière le curseur, en utilisant l'espace blanc
comme limite de mot. Cette limite est différente de celle de
backward-kill-word.
delete-horizontal-space (M-\)
Effacer tous les espaces blancs et les tabulations autour du
curseur.
kill-region
Détruire le texte entre le curseur et la marque (position du
curseur sauvegardée précédemment). On appelle ceci une région.
copy-region-as-kill
Copier le texte de la région vers le buffer circulaire.
copy-backward-word
Copier le mot précédant le curseur dans le buffer circulaire.
Les séparations de mots sont les mêmes que celles de back‐
ward-word.
copy-forward-word
Copier le mot suivant le curseur dans le buffer circulaire. Les
séparations de mots sont les mêmes que celles de backward-word.
yank (C-y)
Récupérer le texte au sommet du tampon circulaire.
yank-pop (M-y)
Exécuter une rotation du tampon circulaire, et récupérer le nou‐
veau texte situé à son sommet. Ceci ne fonctionne qu'après yank
ou yank-pop.
Arguments numériques
digit-argument (M-0, M-1, ..., M--)
Ajouter le chiffre aux arguments déjà présents, ou créer un nou‐
vel argument. M-- crée un argument négatif.
universal-argument
Il s'agit d'une autre manière d'indiquer un argument. Si cette
commande est suivie d'un ou plusieurs chiffres éventuellement
précédés d'un signe moins, ces chiffres consituent un argument.
Si la commande est suivie de chiffres, une nouvelle exécution de
universal-argument termine l'argument numérique, mais est
ignorée dans les autres cas. De plus, si la commande est suivie
immédiatement par un caractère autre qu'un chiffre ou le signe
moins, le compteur d'argument de la commande suivante est multi‐
plié par 4. Le compteur d'argument est initialement à un, ainsi
la première exécution de cette commande l'amène à quatre, la
seconde à seize, et ainsi de suite.
Complétion
complete (TAB)
Essayer d'effectuer une complétion du texte situé avant le
curseur. Bash effectue la complétion en considérant successive‐
ment le texte comme une variable (s'il commence par $), un nom
d'utilisateur (s'il commence par ~), un nom d'hôte (s'il com‐
mence par @), ou une commande (y compris les alias et les fonc‐
tions). Si rien ne fonctionne, il essaye la complétion en nom
de fichier.
possible-completions (M-?)
Affiche la liste des complétions possibles pour le texte situé
avant le curseur.
insert-completions (M-*)
Insérer avant le curseur l'ensemble des complétions qui seraient
fournies par possible-completions.
menu-complete
Comme complete, mais en remplaçant le mot à compléter par une
seule correspondance de la liste des complétions possibles. Des
exécutions répétées de menu-complete parcourrent la liste des
complétions possibles, en insérant une correspondance à chaque
fois. À la fin de la liste des complétions, l'alarme sonore est
déclenchée et le texte initial est récupéré. Un argument n
déplace de n positions dans la liste de correspondances. Un
argument négatif peut être utilisé pour revenir en arrière dans
la liste. Cette commande est prévue pour être associée à la
touche TAB, mais n'est pas affectée par défaut.
delete-char-or-list
Effacer le caractère sous le curseur sauf au début ou en fin de
ligne (comme delete-char). En fin de ligne, se comporte comme
possible-completions. Cette commande n'est associée à aucune
touche par défaut.
complete-filename (M-/)
Essayer la complétion des noms de fichiers sur le texte situé
avant le curseur.
possible-filename-completions (C-x /)
Affiche la liste des complétions possibles en noms de fichiers
pour le texte situé avant le curseur.
complete-username (M-~)
Essayer la complétion des noms d'utilisateurs sur le texte situé
avant le curseur.
possible-username-completions (C-x ~)
Affiche la liste des complétions possibles en noms d'utilisa‐
teurs pour le texte situé avant le curseur.
complete-variable (M-$)
Essayer la complétion des noms de variables shell sur le texte
situé avant le curseur.
possible-variable-completions (C-x $)
Affiche la liste des complétions possibles en noms de variables
shell pour le texte situé avant le curseur.
complete-hostname (M-@)
Essayer la complétion des noms d'hôtes sur le texte situé avant
le curseur.
possible-hostname-completions (C-x @)
Affiche la liste des complétions possibles en noms d'hôtes pour
le texte situé avant le curseur.
complete-command (M-!)
Essayer la complétion des commandes sur le texte situé avant le
curseur. La complétion des commandes inclut les alias, les mots
réservés, les fonctions shell, les fonctions internes, et
finalement les exécutables, dans cet ordre.
possible-command-completions (C-x !)
Affiche la liste des complétions possibles en noms de commandes
pour le texte situé avant le curseur.
dynamic-complete-history (M-TAB)
Essayer la complétion du texte situé avant le curseur, en
recherchant dans la liste d'historique.
complete-into-braces (M-{)
Renvoie entre accolades la liste des complétions possibles en
noms de fichiers du texte avant le curseur, afin qu'elle soit
utilisable par le shell (voir Expansion des Accolades plus
haut).
Macros Claviers
start-kbd-macro (C-x ()
Démarre la mémorisation dans la macro en cours des caractères
tapés.
end-kbd-macro (C-x ))
Arrête la mémorisation dans la macro en cours des caractères
tapés, et sauvegarde la définition.
call-last-kbd-macro (C-x e)
Ré-exécute la dernière macro définie, en agissant comme si les
caractères contenus dans cette macro étaient tapés au clavier.
Divers
re-read-init-file (C-x C-r)
Lire le contenu du fichier d'initialisation personnalisée, en
incorporant les assignations de variables, ou les affectations
de touches qui s'y trouvent.
abort (C-g)
Abandonner l'édition en cours et déclencher l'avertisseur sonore
(soumis à la configuration de la variable bell-style).
do-uppercase-version (M-a, M-b, M-x, ..)
Si le caractère précédé de Méta x est en minuscule, exécuter la
commande correspondant aux caractères majuscules indiqués.
prefix-meta (ESC)
Considérer le prochain caractère tapé comme une séquence Meta.
ESC f est équivalent à Meta-f.
undo (C-_, C-x C-u)
Fonction d'annulation incrémentale, chaque ligne étant mémorisée
séparément.
revert-line (M-r)
Annuler toutes les modifications sur cette ligne. Ceci est
équivalent à répéter undo en nombre suffisant pour ramener la
ligne à son état initial.
tilde-expand (M-~)
Effectuer le développement du tilde sur le mot en cours.
set-mark (C-@, M-)
Placer une marque à la position actuelle. Si un argument
numérique est fourni, la marque est posée à l'emplacement corre‐
spondant.
exchange-point-and-mark (C-x C-x)
Échanger le curseur et la marque. Le curseur est placée à la
position sauvegardée précédemment, et l'ancien curseur est
mémorisé par la marque.
character-search (C-])
Un caractère est lu et le curseur déplacé à l'occurrence suiv‐
ante de ce caractère. Un argument négatif recherche les occur‐
rences précédentes.
character-search-backward (M-C-])
Un caractère est lu et le curseur déplacé à l'occurrence
précédente de ce caractère. Un argument négatif recherche les
occurrences suivantes.
insert-comment (M-#)
La de la variable readline comment-begin est insérée au début de
la ligne en cours, et la ligne est validée comme si on avait
tappé Newline. Ceci sert à transformer la ligne en cours en com‐
mentaire du shell.
glob-expand-word (C-x *)
Le mot précédant le curseur est considéré comme un motif
d'expansion de nom de fichier et la liste des possibilités est
insérée à sa place.
glob-list-expansions (C-x g)
Le liste des expansions qui aurait été produite pa
glob-expand-word est affichée et la ligne est rafraîchie.
dump-functions
Afficher toutes les fonctions et leurs assignations de touches
sur le flux de sortie de readline. Si un argument numérique est
présent, la sortie est mise en forme pour être compatible avec
le format d'un fichier inputrc.
dump-variables
Afficher toutes les variables Readline modifiables et leurs
valeurs sur le flux de sortie. Si un argument numérique est
fournie, la sortie est formatée pour pouvoir être acceptée comme
contenu d'un fichier inputrc.
dump-macros
Afficher toutes les séquences de touches associées à des macros
et les chaînes auxquelles elles correspondent. Un argument
numérique réclame que la sortie soit mise en forme pour être
compatible avec le format d'un fichier inputrc.
display-shell-version (C-x C-v)
Afficher des informations sur la version en cours de bash.
HISTORIQUE
Quand l'option -o history de la commande set est active, l'interpréteur
donne accès à un historique des commandes, c'est à dire la liste des
commandes précédemment utilisées. Le texte des HISTSIZE dernières com‐
mandes (par défaut 500) est mémorisé dans l'historique. Le shell les
enregistre avant expansion des paramètres et variables (voir le para‐
graphe EXPANSION plus haut) mais après avoir effectué l'expansion his‐
torique, sous contrôle des variables HISTIGNORE et HISTCONTROL. Au
démarrage, l'historique est initialisé avec le fichier dont le nom est
contenu dans la variable HISTFILE (par défaut ~/.bash_history). HIST‐
FILE est tronqué si nécessaire, pour ne pas dépasser HISTFILESIZE
lignes. Lorsqu'un shell interactif se termine, les HISTSIZE dernières
lignes de l'historique sont copiées dans le fichier HISTFILE. Si
l'option shell histappend (voir la description de shopt dans COMMANDES
INTERNES DU SHELL plus bas) est active, les lignes sont ajoutées au
fichier d'historique, sinon le fichier est écrasé. Si la variable
HISTFILE n'existe pas, ou si le fichier n'est pas accessible en écrit‐
ure, l'historique n'est pas enregistré. Après la sauvegarder, le
fichier d'historique est tronqué pour ne pas contenir plus de HISTFILE‐
SIZE lignes. Si HISTFILESIZE n'est pas configurée, aucune troncature
n'a lieu.
La commande interne fc (voir le paragraphe COMMANDES INTERNES DU SHELL
plus bas) permet d'afficher, d'éditer, ou de ré-exécuter une partie de
l'historique. La commande interne history permet d'afficher l'his‐
torique et de manipuler le fichier d'historique. Quelque soit le mode
d'édition en ligne de commande, des commandes de recherche sont
disponibles pour accéder à l'historique.
Le shell permet de configurer quelles commandes seront sauvées dans la
liste d'historique. Les variables HISTCONTROL et HISTIGNORE peuvent
demander au shell de ne sauvegarder qu'une partie des commandes
saisies. L'option shell cmdhist si elle est active, demande au shell
d'essayer de sauver chaque ligne d'une commande multiligne dans la même
entrée de la liste, en ajoutant des points-virgules si nécessaire pour
préserver l'exactitude de la syntaxe. L'option shell lithist demande
de sauvegarder les commandes avec des sauts de lignes incorporés plutôt
que des points-virgules. Voir la description de la commande shopt dans
COMMANDES INTERNES DU SHELL pour des détails sur la configuration des
options shell.
EXPANSION DE L'HISTORIQUE
Le shell propose des possibilités d'expansion de l'historique qui sont
semblables à celles de csh. Ce paragraphe décrit la syntaxe de ces
commandes. Elles sont utilisables par défaut dans les shells interact‐
ifs, il est toutefois possible de les désactiver en utilisant l'option
+H de la commande interne set (voir le paragraphe COMMANDES INTERNES DU
SHELL plus bas). Les shells non-interactifs n'effectuent pas d'expan‐
sion d'historique par défaut.
L'expansion de l'historique permet d'insérer des mots de l'historique
dans le flux d'entrée, facilitant la répétition de commande, l'inser‐
tion des arguments d'une ligne antérieure dans la saisie en cours, ou
la correction rapide d'erreur de frappe dans une commande précécente.
Le développement de l'historique est fait immédiatement après la lec‐
ture d'une ligne complète, avant que le shell ne fasse la séparation
des mots. Il se déroule en deux parties. La première consiste à
déterminer la ligne de l'historique à utiliser pour les substitutions,
la seconde permet de sélectionner les parties de la lignes à inclure
dans la nouvelle ligne. La ligne sélectionnée dans l'historique est
l'événement, et les parties de cette ligne à réutiliser sont des mots.
Plusieurs modificateurs permettent de manipuler les mots sélectionnés.
La ligne est découpée en mots de la même manière que lors d'une saisie,
ainsi plusieurs mots séparés par des méta-caractères, et protégés par
des guillemets sont considérés comme un unique mot. L'expansion de
l'historique est introduite par l'apparition du caractère d'expansion,
qui se trouve être ! par défaut. Seul le backslash (\) et les apos‐
trophes permettent de protéger le caractère d'échappement de l'his‐
torique, par défaut !.
Plusieurs options shell, configurables aved la commande interne shopt
permettent d'ajuster le comportement de l'expansion de l'historique.
Si l'option shell histverify est activée (voir la description de la
commande interne shopt) et si readline est utilisée, les substitutions
d'historiques ne sont pas transmises tout de suite à l'analyseur du
shell. A la place, la ligne développée est rechargée dans la mémoire
tampon de readline pour permettre des modifications ultérieures. Si
readline est utilisée et si l'option histreedit est activée, une sub‐
stitution d'historique qui échoue est rechargée dans la mémoire tampon
de readline pour correction. L'option -p de la commande interne his‐
tory peut servir à examiner ce qu'une substituion donnera avant de
l'employer réellement. L'option -s de la commande interne history per‐
met d'ajouter des commandes à la fin de la liste d'historique sans les
les invoquer effectivement, afin qu'elles soient disponibles pour des
rappels ultérieurs.
Le shell offre le contrôle des divers caractères utilisés par le mécan‐
isme d'expansion de l'historique (voir la description de histchars plus
haut dans le paragraphe Variables du Shell).
Indicateur d'événement
Un indicateur d'événement est une référence à une ligne de commande
dans la liste d'historique.
! Débute une substitution de l'historique, sauf s'il est suivi par
un blanc, retour-chariot, = ou (.
!n Se réfère à la ligne de commande n.
!-n Se réfère à la ligne de commande actuelle moins n.
!! Est une référence à la commande précédente. C'est un synonyme de
`!-1'.
!chaîne
Référence la plus récente commande commençant par la chaîne.
!?chaîne[?]
Se réfère à la plus récente commande contenant la chaîne. Le ?
final peut être omis si la chaîne est suivie immédiatement d'un
retour-chariot.
^chaîne_1^chaîne_2^
Substitution rapide. Répéter la dernière commande en remplaçant
la chaîne_1 par la chaîne_2. Équivalent à
``!!:s/chaîne_1/chaîne_2/'' (voir Modificateurs plus bas).
!# La ligne entière tapée jusqu'à présent.
Indicateurs de mots
Ces indicateurs servent à sélectionner les mots désirés dans un
événement. Un : sépare l'indicateur d'événements de l'indicateur de
mot. On peut l'omettre si l'indicateur de mot commence par ^, $, *, -,
ou %. Les mots sont numérotés depuis le début de la ligne, le premier
étant note 0 (zéro). Les mots sont insérés dans la ligne courante,
séparés par des espaces.
0 (zéro)
Le zéro-ième mot. Pour le shell, c'est le nom de la commande.
n Le n-ième mot.
^ Le premier argument, c'est à dire le mot 1.
$ Le dernier argument.
% Le mot correspondant à la recherche la plus récente `?chaîne?'.
x-y Un intervalle de mots, `-y' permet d'abréger `0-y'.
* Tous les mots sauf le zéro-ième. C'est un synonyme pour `1-$'.
Même s'il n'y a qu'un mot, * ne déclenche pas d'erreur, simple‐
ment la chaîne vide est renvoyée.
x* Abréviation de x-$.
x- Abréviation de x-$ comme x*, mais sans le dernier mot.
Si un indicateur de mot est founi sans indication d'événement, la
dernière commande est utilisée.
Modificateurs
Après l'éventuel indicateur de mot, vous pouvez ajouter une séquence de
modificateurs, chacun précédé par un `:'.
h Élimine la fin du chemin d'accès, ne laissant que son début.
t Supprimer tout le début d'un chemin d'accès, en ne laissant que
la fin.
r Supprime un suffixe final de la forme .xxx, en ne laissant que
le nom de base.
e Tout supprimer sauf le suffixe final.
p Afficher la nouvelle commande sans l'exécuter.
q Protéger les mots substitués, pour éviter les substitutions
futures.
x Protéger les mots substitués, comme avec q, mais en faisant la
séparation des mots sur les blancs et les retour-chariots.
s/ancien/nouveau/
Remplacer par nouveau la première occurrence de ancien sur la
ligne d'événement. N'importe quel délimiteur peut être utilisé à
la place de /. Le dernier délimiteur est facultatif si c'est le
dernier caractère de la ligne d'événement. Le délimiteur peut
être protégé dans ancien et nouveau par un simple backslash. Si
& apparaît dans nouveau, il est remplacé par ancien. Un simple
backslash protégera le &. Si ancien est nul, il est remplacé par
le dernier ancien substitué, ou si aucune substitution n'a eu
lieu précédemment, la dernière chaîne dans une recherche
!?chaîne[?].
& Répéter la substitution précédente.
g Appliquer les changements sur la ligne d'événement entière. On
utilise ceci conjointement à `:s' (par exemple `:gs/ancien/nou‐
veau/') ou `:&'. S'il est utilisé avec `:s', n'importe quel
délimiteur peut être utilisé à la place de /, et le dernier
délimiteur est facultatif si c'est le dernier caractère de la
ligne d'événement.
COMMANDES INTERNES DU SHELL
Sauf indication contraire, toute commande décrite comme acceptant des
options précédées de - accepte également la notation -- pour signifier
la fin de la liste d'options.
: [arguments]
Pas d'effet. Cette commande ne fait rien d'autre que l'expansion
des arguments et la mise en place des redirections. Le code de
retour est nul.
. fichier [arguments]
source fichier [arguments]
Lire et exécuter les commandes contenues dans le fichier avec
l'environnement du shell en cours, puis renvoyer le code de
retour de la dernière commande exécutée dans le fichier. Si le
nom du fichier ne contient pas de slash, les chemins d'accès
contenus dans PATH sont parcourus pour rechercher le répertoire
contenant le fichier. Lorsqu'il est recherché dans le PATH le
fichier n'a pas besoin d'être exécutable. Le répertoire de tra‐
vail en cours est finalement examiné si aucun fichier n'est
trouvé dans le PATH. Si l'option sourcepath de la commande
interne shopt est désactivée, le PATH n'est pas parcouru. Si
des arguments sont fournis, ils sont transmis dans les
paramètres positionnels lorsque le fichier est exécuté. Sinon
les paramètres positionnel ne sont pas modifiés. Le code de
retour est celui de la dernière commande exécutée au sein du
script (0 si aucune commande n'est exécutée), et faux si le
fichier n'est pas trouvé.
alias [-p] [nom[=valeur] ...]
La commande alias, sans argument ou avec l'option -p affiche sur
la sortie standard la liste des alias actuellement définis, sous
la forme nom=valeur. Lorsque l'on fournit des arguments, un
alias est créé pour chaque nom auquel on a donné une valeur. Un
espace final dans une valeur forcera la recherche d'alias dans
le mot suivant lors de l'expansion de l'alias. Pour chacun des
noms pour lesquels aucune valeur n'est fournie dans la liste
d'arguments, le nom et la valeur de l'alias sont affichés. La
commande Alias renvoie vrai, sauf si l'on indique un nom pour
lequel aucun alias n'a été défini.
bg [job]
Relance en arrière-plan le job suspendu, comme s'il avait été
lancé avec &. Si aucun job n'est précisé, le job en cours est
basculé en arrière-plan. bg job renvoie 0 si le contrôle des
jobs est désactivé, ou si le job n'existe pas, ou encore s'il a
été lancé sans contrôle de jobs.
bind [-m jeu_de_touches] [-lpsvPSV]
bind [-m jeu_de_touches] [-q nom] [-u fonction] [-r séquence]
bind [-m jeu_de_touches] -f fichier
bind [-m jeu_de_touches] séquence:fonction
Affiche les affectations de touches readline pour une fonction,
ou affecte une séquence de touches à une fonction ou une macro
readline. La syntaxe d'affectation est identique à celle des
fichiers .inputrc, mais chaque affectation doit être fournie
sous forme d'argument indépendant, par exemple '"\C-x\C-r":
re-read-init-file'. Les éventuelles options ont les significa‐
tions suivantes :
-m jeu_de_touches
Modifier la configuration du jeu_de_touches indiqué. Les
noms des jeux_de_touches acceptés sont emacs, emacs-stan‐
dard, emacs-meta, emacs-ctlx, vi, vi-move, vi-command, et
vi-insert. vi est équivalent à vi-command; emacs est
équivalent à emacs-standard.
-l Afficher la liste des noms de toutes les fonctions read‐
line
-p Affiche les noms des fonctions readline et leurs affecta‐
tions de manière à pouvoir les relire.
-P Affiche les noms des fonctions readline et leurs affecta‐
tions.
-v Affiche les noms des variables readline et leurs valeurs
de manière à pouvoir les relire.
-V Affiche les noms des variables readline et leurs valeurs.
-s Affiche les séquences de touches readline affectées aux
macros et les chaînes correspondantes, de manière à pou‐
voir les relire.
-S Affiche les séquences de touches readline affectées aux
macros et les chaînes correspondantes.
-f fichier
Lire les affectations dans le fichier
-q fonction
Rechercher la touche permettant d'invoquer la fonction
indiquée
-u fonction
Désaffecter toutes les touches correspondant à la fonc‐
tion.
-r séquence
Supprimer les affectations pour la séquence de touches.
La valeur de retour est nulle, sauf si une option invalide est
fournie, ou si une erreur se produit.
break [n]
Sortir d'une boucle for, while, ou until. Si n est fourni, sor‐
tir de n niveaux de boucles. n doit être ≥ 1. Si n est
supérieur au nombre de boucles imbriquées, on sort de l'ensemble
d'entre elles. La valeur de retour est nulle, sauf si le shell
n'exécute pas de boucle lorsque le break est atteint.
builtin commande_interne [arguments]
Exécuter la commande interne du shell indiquée, en lui passant
les arguments, puis renvoyer son code de retour. Ceci est utile
lorsque l'on veut définir une fonction ayant le même nom qu'une
commande interne, mais que l'on a besoin d'invoquer cette com‐
mande depuis l'intérieur de la fonction. On redéfinit souvent
la commande interne cd ainsi. Le code de retour est faux si la
commande_interne n'existe pas.
cd [rep]
Remplacer le répertoire de travail en cours par rép. La variable
HOME est la valeur par défaut de rep. La variable CDPATH
définit des chemins de recherche pour trouver le répertoire con‐
tenant rép. Les répertoires possibles y sont fournis dans une
liste séparées par des doubles-points (:). Un nom de répertoire
nul dans CDPATH est équivalent au répertoire en cours, c'est à
dire ``.''. Si rép commence par un slash (/), alors CDPATH n'est
pas utilisé. L'option -P demande de n'employer que
l'enchaînement réel des répertoires sans suivre les liens sym‐
boliques (voir aussi l'option -P de la commande interne set plus
bas). L'option -L force le suivi des liens symboliques. Un argu‐
ment - est équivalent à $OLDPWD. La valeur de retour est vraie
si l'on a pu changer le répertoire de travail, et fausse sinon.
command [-pVv] commande [arguments ...]
Lancer la commande avec les arguments indiqués, mais en simpli‐
fiant le processus habituel de recherche des commandes. Seules
les commandes internes, et les commandes disque trouvées dans le
PATH seront exécutées. Si l'option -p est fournie, la recherche
de la commande utilisera une valeur par défaut du PATH garantis‐
sant de trouver tous les utilitaires standards. Si l'option -V
ou l'option -v sont fournies, une description de la commande est
affichée. L'option -v n'affiche qu'un simple mot indiquant la
commande interne, ou le chemin d'accès utilisé pour invoquer la
commande. L'option -V fournit une description plus volubile.
Si les options -V ou -v sont fournies, le code de retour est 0
si la commande est trouvée, et 1 sinon. Si aucune option n'est
fournie, et si une erreur se produit, ou si la commande est
introuvable, le code de retour est 127. Sinon, le code de retour
de cette commande interne est celui de la commande invoquée.
continue [n]
Reprendre l'exécution à l'itération suivante d'une boucle for,
while, until, ou encore select. Si n est indiqué, reprendre
l'exécution à la n-ième boucle imbriquée. n doit être ≥ 1. Si
n est supérieur au nombre de boucles imbriquées, l'exécution
reprend à la boucle la plus externe (`top-level'). La valeur de
retour est 0 sauf si le shell n'exécutait pas de boucle quand il
a rencontré l'instruction continue.
declare [-afFirx] [-p] [nom[=valeur]]
typeset [-afFirx] [-p] [nom[=valeur]]
Déclarer des variables et/ou leur fournir des attributs. Si
aucun nom n'est mentionné, les valeurs des variables sont
affichées. L'option -p affichera les attributs et les valeurs
de chaque nom. Quand -p est utilisée, les autres options sont
ignorées. L'option -F évite l'affichage des définitions de
fonctions, seuls les noms des fonctions et leurs attributs sont
affichés. L'option -F implique l'usage de -f . Les options
suivantes permettent de restreindre l'affichage aux variables
dotées de certains attributs, ou de fixer les attributs.
-a Chaque nom est une variable de type tableau (voir le
paragraphe Tableaux plus haut).
-f Seulement les noms de fonctions
-i La variable est traitée comme un entier. L'évaluation
arithmétique (voir ÉVALUATION ARITHMÉTIQUE ) est
effectuée lorsque la variable reçoit une valeur.
-r Rend les noms accessibles en lecture seulement. On ne
pourra plus modifier les valeurs de ces noms lors
d'assignations ultérieures.
-x Marquer le nom pour qu'il soit exporté dans l'environ‐
nement.
En utilisant `+' a la place de `-', l'attribut correspondant est
désactivé. Dans une fonction, chacun des noms devient local,
comme avec la commande local. La valeur de retour est 0 sauf si
une option illégale est rencontrée, si on essaye de définir une
fonction en utilisant "-f foo=bar", si on tente d'écrire dans
une variable en lecture seule, si on essaye d'affecter une
valeur a une variable tableau sans employer la syntaxe composée
(voir Tableaux plus haut), si l'un des noms n'est pas un nom
légal pour le shell, si on essaye de supprimer l'attribut lec‐
ture-seule d'une variable, si on essaye de supprimer l'attribut
tableau d'une variable, ou si on essaye d'afficher avec -f une
fonction inexistante.
dirs [-clpv] [+/-n]
Affiche la liste des répertoires actuellement mémorisés.
L'affichage par défaut se fait sur une seule ligne, les noms de
répertoires étant séparés par des espaces. On ajoute des réper‐
toires dans cette liste avec la commande pushd, et on peut en
supprimer avec la commande popd.
+ n affiche le n-ième élément de la liste fournie par dirs
sans options, en comptant à partir de la gauche en com‐
mençant à zéro.
- n affiche le n-ième élément de la liste fournie par dirs
sans options, en comptant à partir de la droite en com‐
mençant à zéro.
-c Effacer la liste des répertoires en les supprimant tous.
-l affiche une liste longue, le format par défaut utilisant
le tilde pour représenter le répertoire personnel.
-p Afficher la liste des répertoires avec un élément par
ligne.
-v Afficher la liste des répertoires avec un élément par
ligne, en préfixant chaque entrée avec son numméro
d'index dans la liste.
La valeur de retour est 0 sauf si une option illégale a été
trouvée, ou si l'index n dépasse la longueur de la pile des
répertoires.
disown [-ar] [-h] [job ...]
Sans options, chaque job est supprimé de la table des jobs act‐
ifs. Si l'option -h est fournie, chaque job n'est pas supprimé
mais est marqué pour que le signal SIGHUP ne lui soit pas envoyé
si le shell reçoit un signal SIGHUP. Si aucune job n'est
indiqué, et si ni l'option -a ni l'option -r ne sont fournies,
le job en cours est concerné. Si aucun job n'est indiqué,
l'option -a signifie la suppression ou le marquage de tous les
jobs ; l'option -r sans spécification de job restreint les
opérations au job en cours. La valeur renvoyée est zéro sauf si
un job indiqué n'est pas valide.
echo [-neE] [arguments ...]
Affiche ses argumentss, séparés par des espaces. La valeur de
retour est toujours nulle. Avec l'option -n, le retour-chariot
final est supprimé. Avec l'option -e l'interprétation des
séquences d'échappement est activée. L'option -E désactive
l'interprétation des séquences d'échappement, même sur les
systèmes où elles sont interprétées par défaut. echo
n'interprète pas la séquence -- comme une marque de fin des
options. echo reconnaît les séquences d'échappement suivantes :
\a alerte (avertisseur sonore)
\b backspace
\c suppression du retour-chariot final
\e caractère d'échappement
\f saut de page
\n nouvelle ligne
\r retour-chariot
\t tabulation horizontale
\v tabulation verticale
\\ backslash
\nnn le caractère dont le code ASCII octal vaut nnn (un à
trois chiffres)
\xnnn le caractère dont le code ASCII hexadécimal vaut nnn (un
à trois chiffres)
enable [-adnps] [-f fichier] [nom ...]
Active ou inhibe les commandes internes du shell. Ceci permet
d'exécuter une commande disque ayant le même nom qu'une commande
interne du shell, sans avoir besoin d'indiquer le chemin d'accès
complet. Avec l'option -n, chaque nom indiqué est inhibé, sinon
ils sont activés. Par exemple, pour utiliser le programme
binaire test qui se trouve dans le PATH plutôt que la commande
interne, utilisez enable -n test. L'option -f demande de
charger la commande interne avec le nom indiqué depuis le
fichier objet partagé sur les systèmes qui le permettent.
L'option -d permet de supprimer une commande interne chargée
précédemment avec -f. Si aucun nom n'est fourni, ou si l'option
-p est indiquée, la liste des commandes internes du shell est
affichée. Sans autre option, la liste des commandes actives est
imprimée. Avec l'option -n, seules les commandes désactivées
sont affichées. Si l'option -a est fournie, la liste de toutes
les commandes est affichée, avec une indication des activations
et inhibitions. Si on indique -s, la sortie est limitée aux
commandes internes spéciales POSIX. La valeur de retour est 0,
sauf si nom n'est pas une commande interne, ou s'il y a un
problème avec le chargement d'une nouvelle commande.
eval [arguments ...]
Les arguments sont lus et regroupés en une seule commande sim‐
ple. Cette commande est alors lue et exécutée par le shell, et
son code de retour est renvoyée comme valeur de la commande
eval. S'il n'y a pas d'arguments, ou uniquement des arguments
nuls, eval renvoie vrai.
exec [-cl] [-a nom] [commande [arguments]]
Si une commande est indiquée, elle remplace le shell. Aucun
nouveau processus n'est créé. Les arguments deviennent ceux de
la commande. Si l'option -l est fournie, l'interpréteur place
un tiret en guise de zéro-ième argument fourni a la commande.
C'est ce que fait login. L'option -c permet d'exécuter la com‐
mande avec un environnement vide. Si l'option -a est indiquée,
le shell transmet le nom comme zéro-ième argument. Si la com‐
mande Si la commande ne peut être exécutée, quelqu'en soit la
raison, un shell non-interactif se termine, sauf si l'option
shell execfail est active, auquel cas une erreur est renvoyée.
Un shell interactif renvoie l'erreur si le fichier ne peut pas
être exécuté. Si aucune commande n'est indiquée, les
éventuelles redirections sont mises en place dans le shell en
cours, et le code de retour est 0. S'il y a un problème de redi‐
rection, le code de retour est 1.
exit [n]
Termine le shell avec le code de retour n. Si n est omis, le
code de retour sera celui de la dernière commande exécutée. Un
éventuel gestionnaire installé sur EXIT sera exécuté avant la
fin du shell.
export [-nf] [nom[=mot]] ...
export -p
Les noms indiqués sont marqués pour être exportés automatique‐
ment dans l'environnement des commandes exécutées par la suite.
Si l'option -f est fournie, les noms sont ceux de fonctions. Si
aucun nom n'est mentionné, ou si l'option -p est fournie, une
liste est affichée indiquant l'ensemble des noms exportables par
ce shell. L'option -n supprime l'attribut d'exportation des
variables mentionnées. export renvoie un code de retour nul,
sauf si une option illégale est rencontrée, ou si l'un des noms
n'est pas un nom de variable légal, ou si l'option -f est
fournie avec un nom qui ne soit pas une fonction.
fc [-e éditeur] [-nlr] [premier] [dernier]
fc -s [motif=nouveau] [commande]
(Fix Command). Avec la première forme, un intervalle de comman‐
des, entre la première et la dernière, est sélectionné dans la
liste d'historique. La première et la dernière peuvent être
indiquées sous forme de chaînes (la dernière commande commençant
par la chaîne indiquée), ou sous forme numérique (un index dans
la liste d'historique, ou un nombre négatif indiquant un
décalage par rapport à la position actuelle dans cette liste).
Si la dernière n'est pas indiquée, on considère qu'il s'agit de
la commande en cours si l'on veut afficher la liste (ainsi fc -l
-10 affiche les 10 dernières commandes), et qu'il s'agit de la
même que la première sinon. Si la première n'est pas indiquée,
on considère qu'il s'agit de la commande précédente pour une
édition, et de la commande -16 pour l'affichage de liste.
L'option -n supprime l'affichage des numéros dans la liste.
L'option -r inverse l'ordre des commandes Avec l'option -l les
commandes sont affichées sur la sortie standard. Sinon,
l'éditeur est invoqué avec un fichier contenant les commandes
sélectionnées. Si aucun éditeur n'est précisé, on utilise la
valeur de la variable FCEDIT, ou la valeur de EDITOR si FCEDIT
n'existe pas. Si aucune variable n'existe, vi est invoqué.
Lorsque l'édition se termine, les commandes sont affichées puis
exécutées.
Dans la seconde forme, la commande est ré-exécutée après avoir
remplacé chaque instance du motif par nouveau. Un alias utile
pour ceci est ``r=fc -s'', ainsi en tapant ``r cc'' on relance
la dernière commande commençant par ``cc'' et en tapant ``r''
``r'' on ré-exécute la commande précédente.
Lorsque la première forme est utilisée, la valeur renvoyée est
0, sauf si une option illégale est trouvée, ou si première ou
dernière indiquent des lignes d'historique inexistantes. Avec
l'option -e, la valeur de retour est celle de la dernière com‐
mande exécutée, ou un échec si une erreur s'est produite avec le
fichier temporaire des commandes. Avec la seconde forme, le code
de retour est celui de la commande ré-exécutée, à moins que com‐
mande ne soit pas une ligne valide de l'historique, auquel cas
fc renvoie un échec.
fg [job]
Placer le job en avant-plan, et en faire le job en cours. Si
aucun job n'est mentionné, le shell considèrera qu'il faut
ramener le job en cours en avant-plan. La valeur de retour est
celle de la commande placée en avant-plan, ou un échec si le
contrôle des jobs n'est pas actif, ou encore si le job n'existe
pas ou a été lancé sans contrôle des jobs.
getopts chaîne_d_options nom [arguments]
getopts est utilise par les scripts shell pour analyser les
paramètres positionnels. La chaîne_d_options contient l'ensemble
des lettres d'options à reconnaître. Si une lettre est suivie
par un deux-points (:), l'option est censée comprendre un argu‐
ment, qui peut en être séparé par une espace. A chaque invoca‐
tion, getopts place l'option suivante dans la variable shell
dont le nom est fourni, en la créant si elle n'existe pas. Il
place également l'index de l'argument suivant à analyser dans la
variable OPTIND. OPTIND est initialisé à 1 à chaque lancement
d'un shell ou d'un script. Quand une option nécessite un argu‐
ment, getopts place celui-ci dans la variable OPTARG. Le shell
ne réinitialise pas OPTIND automatiquement, il faut le faire
manuellement si des appels multiples à getopts au sein du même
shell utilisent des ensembles différents de paramètres.
Lorsque la fin des options est atteinte, getopts se termine avec
un code de retour supérieur à zéro. OPTIND est rempli avec le
rang du premier argument non-option, et nom contient '?'.
getopts analyse en principe les paramètres positionnels, mais si
d'autres arguments lui sont transmis, getopts analysera ces
derniers.
getopts peut renvoyer des erreurs de deux manières. Si le pre‐
mier caractère de la chaîne_d_options est un deux-points, les
erreurs sont renvoyées de manière silencieuse. Lors d'un fonc‐
tionnement normal, des messages de diagnostique sont affichés si
une option est illégale, ou s'il manque un argument d'option.
Si la variable OPTERR vaut 0, aucun message d'erreur ne sera
affiché, même si le premier caractère de la chaîne_d_options
n'est pas un deux-points.
Si une option illégale est rencontrée, getopts met un point
d'interrogation ? dans la variable nom, affiche un message
d'erreur (s'il n'est pas en mode silencieux), et détruit la
variable OPTARG. Si getopts fonctionne en mode silencieux, le
caractère d'option est placé dans OPTARG et aucun message de
diagnostique n'est affiché.
Lorsqu'un argument d'option est manquant, et si getopts n'est
pas silencieux, un point d'interrogation (?) est placé dans la
variable nom, OPTARG est détruit, et un message de diagnostique
est affiché. Si getopts est silencieux, un deux-points (:) est
placé dans la variable nom et OPTARG est rempli avec le car‐
actère d'option trouvé.
getopts renvoie la valeur Vrai si une option, prévue ou
imprévue, est trouvée. Il renvoie Faux si la fin des options
est atteinte, ou si une erreur se produit.
hash [-r] [-p fichier] [nom]
Pour chaque nom fourni, le chemin d'accès complet de la commande
est déterminé, en examinant les répertoires de $PATH et
mémorisé. Si l'option -r est fournie, aucune recherche de
chemin d'accès n'a lieu, et le fichier est utilisé comme chemin
complet pour la commande. L'option -r force le shell à oublier
tous les emplacements mémorisés. Sans arguments, hash affiche
des informations sur les commandes mémorisées. La valeur de
retour est Vrai, sauf si nom n'est pas trouvé, ou si une option
est illégale.
help [motif]
Affiche des informations d'aide au sujet des commandes internes.
Si un motif est indiqué, help fournit de l'aide sur toutes les
commandes correspondant à ce motif, sinon, une liste des comman‐
des internes est affichée. Le code de retour est 0, sauf si
aucune commande ne peut correspondre au motif.
history [-c] [n]
history -anrw [fichier]
history -p arg [argument ...]
history -s arg [argument ...]
Sans options, affiche la liste des commandes de l'historique,
avec des numéros de ligne. Les lignes marquées avec un
astérisque * ont été modifiées. Un argument n permet de ne lis‐
ter que les n dernières lignes. Si un argument est fourni, il
est utilisé comme nom de fichier historique, sinon on utilise la
valeur de la variable HISTFILE. Les options ont les significa‐
tions suivantes :
-a Ajouter les ``nouvelles'' lignes d'historiques (celles
créées depuis le début de la session actuelle de bash)
dans le fichier.
-n Lire dans le fichier, et ajouter à la liste d'historique,
les lignes non encore lues. Il s'agit des lignes qui ont
été ajoutées dans le fichier depuis le début de la ses‐
sion actuelle de bash.
-r Lire le contenu du fichier, et l'utiliser comme his‐
torique courant.
-w Écrire dans le fichier l'historique actuel, en écrasant
le contenu precedent.
-c Effacer le fichier d'historique en détruisant toutes ses
entrées.
-p Effectuer la substitution sur les arguments suivants, et
afficher le résultat sur la sortie standard. Ne pas
mémoriser les résultats dans la liste d'historique.
Chaque argument doit être protégé pour éviter le
développement normal.
-s Enregistrer les arguments dans la liste d'historique
comme entrée unique. La dernière commande de la liste
d'historique est supprimée avant que les arguments soient
ajoutés.
La valeur de retour est 0, sauf si une option illégale est
fournie, ou si une erreur se produit durant la lecture ou
l'écriture du fichier.
jobs [-lnprs] [ job ... ]
jobs -x commande [ arguments ... ]
La première forme affiche la liste de jobs actifs. Les options
ont les significations suivantes :
-l Affiche les PIDs, en plus des informations normales.
-p N'affiche que le PID du leader du groupe de processus du
job.
-n N'affiche que les jobs dont le statut a varié depuis le
dernier affichage.
-r N'affiche que les jobs en cours d'exécution (running).
-s N'affiche que les jobs arrêtés (stopped).
Si une spécification de job est fournie, l'affichage ne comporte
que les informations à propos de ce job. Le code de retour est
0, à moins qu'une option illégale soit transmise, ou que le job
n'existe pas.
Si l'option -x est indiquée, jobs va remplacer toutes les
spécifications de jobs rencontrées dans la commande ou dans ses
arguments avec les Process Group ID correspondant, puis il
exécutera la commande en lui transmettant les arguments, et en
renvoyant son code de retour.
kill [-s sigspec | -n num-signal | -sigspec] [pid | job] ...
kill -l [sigspec | exit_status]
Envoyer le signal indiqué par sigspec ou num-signal aux proces‐
sus spécifiés par pid ou par job. On peut fournir sigspec sous
forme numérique, ou sous forme de nom de signal, comme SIGKILL.
Si sigspec est un nom de signal, il n'y a pas de différenciation
majuscules/minuscules, et le préfixe SIG est facultatif. S'il
n'y a pas d'indication de sigspec, le signal envoyé est SIGTERM.
Un argument -l fournit la liste des noms de signaux. S'il y a
des arguments avec l'option -l, les noms des signaux indiqués
sont affichés, et le code de retour est nul. L'argument
exit_status de l'option -l est un nombre correspondant soit à un
numéro de signal soit au code de retour renvoyé par un processus
tué par un signal. kill renvoie Vrai si au moins un signal a
été envoyé, ou Faux si une erreur s'est produite, ou si une
option illégale a été trouvée.
let argument [argument ...]
Chaque argument est une expression arithmétique à évaluer (voir
plus haut le paragraphe ÉVALUATION ARITHMÉTIQUE). Si l'évalua‐
tion du dernier argument donne 0, let renvoie 1, sinon elle ren‐
voie 0.
local [nom[=valeur] ...]
Pour chaque argument, on crée une variable locale ayant le nom
indiqué, et à laquelle on affecte la valeur fournie. Quand local
est utilisée dans une fonction, le nom de la variable n'est vis‐
ible que dans la fonction, et ses descendantes. Sans opérandes,
local affiche la liste des variables locales sur la sortie stan‐
dard. Il ne faut pas utiliser local en dehors des fonctions. La
valeur de retour est 0, sauf si local est invoqué en dehors
d'une fonction, ou si un nom illégal est fourni.
logout Quitter un shell de login.
popd [-n] [+n] [-n]
Enlève des éléments de la pile des répertoires. Sans arguments,
seul le répertoire du sommet de la pile est éliminé, et un cd
est effectué en direction du nouveau répertoire au sommet. Les
arguments éventuels ont la signification suivante
+n supprime le n-ième élément de la liste affichée par dirs,
en comptant depuis la gauche à partir de 0. Par exemple
: ``popd +0'' enlève le premier répertoire, ``popd +1''
le second.
-n supprime le n-ième élément de la liste affichée par dirs,
en comptant depuis la droite à partir de 0. Par exemple:
``popd -0'' supprimer le dernier répertoire, et ``popd
-1'' l'avant-dernier.
-n Empêche le changement normal de répertoire lors de la
suppression d'un répertoire de la pile. On ne fait que
manipuler la pile.
Si la commande popd réussit, un dirs est effectué, et le code de
retour est nul. popd renvoie Faux si une option illégale est
trouvée, si la pile de répertoires est vide, si on a indiqué un
répertoire absent de la pile, ou si le changement de répertoire
a échoué.
printf format [arguments]
Ecrit sur la sortie standards les arguments fournis, sous
contrôle du format. Ce format est une chaîne contenant trois
types de caractères : normaux, qui sont simplement copiés sur la
sortie standard, les caractères d'échappement qui sont convertis
puis copiés sur la sortie standard, et les spécifications de
format qui permettent d'afficher les argument. En plus des for‐
mats standards de printf(1), %b demande à printf de développer
les séquences d'échappement se trouvant dans l'argument corre‐
spondant , et %q demande l'affichage dans un format réutilisable
en entrée d'un script shell.
Le format est réutilisé jusqu'à consommer tous les arguments.
Si le format demande plus d'arguments que fournis, les spécifi‐
cations supplémentaires seront alimentées avec des valeurs
nulles ou des chaînes vides.
pushd [-n] [rép]
pushd [-n] [+n] [-n]
Ajoute un répertoire au sommet de la pile des répertoires, ou
effectue une rotation dans la pile, en ramenant le répertoire en
cours au sommet. Sans argument, cette commande échange les deux
répertoires au sommet, et renvoie 0, sauf si la pile est vide.
Les arguments éventuels ont les significations suivantes :
+n Effectue une rotation dans la pile, de manière à amener
au sommet le n-ième répertoire de la liste affichée par
dirs (en comptant à
partir de la gauche).
-n Effectue une rotation dans la pile, de manière à amener
au sommet le n-ième répertoire de la liste affichée par
dirs (en comptant à partir de la droite).
-n Empêche le changement normal de répertoire lors d'un
ajout dans la pile. Seule la pile est manipulée.
rép Ajoute le répertoire rép au sommet de la pile, et en fait
le nouveau répertoire de travail.
Si la commande pushd réussit, elle effectue un dirs. Si on
utilise la première forme, pushd renvoie 0 sauf si le déplace‐
ment vers rep échoue. Avec la seconde forme, pushd renvoie 0
sauf si la pile est vide, si on a réclamé un élément inexistant
de la pile, ou si le changement de répertoire a échoué.
pwd [-LP]
Affiche le chemin d'accès complet au répertoire de travail
actuel. Le chemin ne contiendra pas de liens symboliques si
l'option -P est fournie, ou si l'option -o physical de la com‐
mande interne set est active. Si l'option -L est utilisée, les
liens symboliques sont suivis. Le code de retour est nul, sauf
si une erreur s'est produite durant la lecture du chemin d'accès
au répertoire courant ou si une option invalide est transmise.
read [-er] [-a nom_a] [-p msg] [nom ...]
Une ligne est lue depuis l'entrée standard, puis le premier mot
de cette ligne est affecté au premier nom, le second mot au sec‐
ond nom, et ainsi de suite. Les mots restants sont affectés au
dernier nom. S'il y a moins de mots que de variables, celles
restantes sont remplies avec des valeurs vides. Les caractères
contenus dans la variables IFS sont utilisés comme délimiteurs
de mots. Le caractère backslash (\) permet de supprimer toute
signification spécial pour le caractère suivant, et autorise la
continuation de lignes. Les options éventuelles ont les signi‐
fications suivantes :
-r Le basckslash n'est pas un caractère d'échappement. Il
est considéré comme faisant partie de la ligne. En par‐
ticulier la paire backslash/retour-chariot ne permet pas
de faire une continuation de ligne.
-p Afficher le message msg, sans retour-chariot final avant
la lecture. Le message n'est affiché que si la lecture a
lieu depuis un terminal.
-a Les mots sont affectés aux rangs successifs d'une vari‐
able tableau de nom nom_a, en commençant à 0. nom_a est
détruit avant d'affecter de nouvelles valeurs. Les
autres nom sont ignorés.
-e Si l'entrée standard provient d'un terminal, la bib‐
liothèque readline (voir READLINE plus bas) est utilisée
pour obtenir la ligne.
Si aucun nom n'est fourni, la ligne lue est affectée entièrement
à la variable REPLY. Le code de retour est nul, sauf si une
fin-de-fichier est rencontrée.
readonly [-afp] [nom ...]
Les noms indiqués reçoivent un attribut lecture-seule. Les
valeurs affectées à ces noms ne pourront plus être modifiées.
Si l'option -f est fournie, on considère les fonctions corre‐
spondant à ces noms. L'option -a restreint l'action aux vari‐
ables tableaux. Si aucun nom n'est fourni, ou si l'option -p
est utilisée, on affiche la liste des noms en lecture-seule.
L'option -p demande l'affichage dans un format susceptible
d'être réutilisé en entrée. Le code de retour est nul, sauf si
une option illégale a été trouvée, si l'un des noms n'est pas un
nom légal de variables shell, ou si l'option -f est fournie avec
un nom qui ne soit pas une fonction.
return [n]
La fonction shell en cours d'exécution se termine en renvoyant
la valeur n. Si n est omis, la valeur renvoyée est celle de la
dernière commande exécutée dans le corps de la fonction. Si
cette commande est exécutée en dehors d'une fonction, mais
durant l'exécution d'un script avec la commande . (source) ce
script s'arrête, et la valeur renvoyée est n ou celle de la
dernière commande exécutée. Si elle est utilisée en dehors
d'une fonction ou d'un script exécuté par ., le code retour est
Faux.
set [--abefhkmnptuvxBCHP] [-o option] [arg ...]
Sans options, le nom et la valeur de chacune des variables shell
sont affichés dans un format susceptible d'être réutilisé en
entrée. La sortie est triée en fonction de la localisation en
cours. Lorsque des options sont fournies, elles activent ou
inhibent des attributs du shell. Tous les arguments restant
après traitement des options sont considérés comme des valeurs
affectées dans l'ordre aux paramètres : $1, $2, ... $n. Les
options éventuelles ont les significations suivantes :
-a Marquage automatique des variables modifiées ou créées
pour qu'elles soient exportées dans l'environnement des
commandes exécutées ultérieurement.
-b Affichage immédiat des statuts des jobs en arrière-plan
qui se terminent, plutôt que d'attendre l'affichage du
prochain symbole d'accueil. N'a d'utilité que si le
contrôle des jobs est activés.
-e Sortie immédiate lorsqu'une commande simple (voir GRAM‐
MAIRE DU SHELL plus haut) se termine avec un code non
nul. Le shell ne se termine pas si la commande échoue
dans une boucle until ou while, dans un test if, dans
une liste && ou ⎪⎪, ou si le code de retour est inversé
par !.
-f Désactivation du développement des noms de fichiers.
-h Mémorisation de l'emplacement des commandes lors de leur
exécution. Activé par défaut.
-k Tous les arguments du type affectation sont placés dans
l'environnement des commandes, pas uniquement ceux sai‐
sis avant le nom de la commande.
-m Mode supervision. Activation du contrôle des jobs. Ce
mode est actif par défaut pour les shells interactifs
qui le supportent (voir le paragraphe CONTRÔLE DES JOBS
plus haut). Les processus en arrière-plan sont exécutés
dans des groupes de processus séparés, et une ligne
indiquant leur statuts est affichée lorsqu'ils se termi‐
nent.
-n Lecture de commandes sans exécution. Ceci peut être
utilisé pour rechercher les erreurs de syntaxe dans un
script. Cette option est ignorée par les shells interac‐
tifs.
-o nom__d_option
Le nom_d_option est l'un des suivants :
allexport
Identique à -a.
braceexpand
Comme -B.
emacs Utiliser une interface "à la emacs" pour les
lignes de commande. C'est le comportement par
défaut pour un shell interactif, sauf s'il est
lance avec l'option -nolineediting.
errexit Identique à -e.
hashall Comme -h.
histexpand
Identique à -H.
history activer l'historique des commandes, comme décrit
plus haut au paragraphe HISTORY. Cette option
est validée par défaut pour un shell interactif.
ignoreeof
Identique à l'exécution d'une commande shell
`IGNOREEOF=10'. (voir le paragraphe Variables
du Shell plus haut)
keyword Comme -k.
monitor Identique à -m.
noclobber
Identique à -C.
noexec Identique à -n.
noglob Identique à -f.
notify Identique à -b.
nounset Identique à -u.
onecmd Identique à -t.
physical
Identique à -P.
posix Modifier le comportement de bash lorsque les
opérations par défaut s'éloigne de Posix 1003.2
afin d'être conforme au standard.
privileged
Identique à -p.
verbose Identique à -v.
vi Utiliser une interface d'édition des lignes de
commande "à la vi".
xtrace Identique à -x.
Si -o est invoqué sans nom_d_option, les valeurs
actuelles des options sont affichées. Si +o est fourni
sans nom_d_option, la série de commande set permettant
de recréer la configuration courante est affichée sur la
sortie standard.
-p Basculer en mode privilégié. Dans ce mode, le fichier
$ENV et $BASH_ENV ne sont pas traités, les fonctions
shells ne sont pas héritées de l'environnement, et la
variable SHELLOPTS, si elle est dans l'environnement,
est ignorée. Si le shell démarre avec un UID (resp.
GID) effectif différent de son UID (GID) réel, et si
l'option -p n'est pas fournie, ce comportement est
appliqué, et l'UID (GID) effectif reprend la valeur de
l'UID (GID) réel. Si l'option -p est fournie au démar‐
rage l'UID (GID) effectif n'est pas modifié. Désactiver
cette option force la réinitialisation des UID et GID
effectifs à la valeur des UID et GID réels.
-t Sortie automatique après lecture et exécution d'une com‐
mande.
-u Considérer les variables inexistantes comme des erreurs
durant l'expansion des paramètres. Si on tente de
développer une variable inexistante, le shell affiche un
message d'erreur, et, s'il n'est pas interactif, se ter‐
mine avec un code de retour non-nul.
-v Affichage des lignes de commandes au fur et à mesure de
leur lecture.
-x Après l'expansion de chaque commande simple, bash
affiche la valeur de PS4, suivie par la commande et ses
arguments développés.
-B Le shell effectue l'expansion des accolades (voir plus
haut) Cette opriont est active par défaut.
-C Avec cette option, bash n'écrasera pas un fichier exis‐
tant avec les opérateurs >, >&, et <>. Ce comportement
peut être surchargé lors de la création d'un fichier de
sortie en utilisant l'opérateur de redirection >| à la
place de >.
-H Autoriser le style ! de substitution historique. C'est
le comportement par défaut lorsque le shell est interac‐
tif.
-P Ne pas suivre les liens symboliques lors d'une commande
comme cd qui modifie le répertoire de travail. Utiliser
à la place le répertoire physique. Par défaut bash suit
la chaîne logique des répertoires lors des commandes qui
modifient le répertoire en cours.
-- Si aucun argument ne suit ce drapeau, alors les
paramètres positionnels sont détruits. Sinon, les
paramètres positionnels sont remplis avec les arguments,
même si certains d'entre eux commencent par un -.
- Fin des options. Tous les arguments restants sont
affectés aux paramètres positionnels. Les attributs -x
et -v sont désactivés. S'il n'y a pas d'arguments, les
paramètres positionnels ne sont pas modifiés.
Par défaut les attributs sont désactivés, sauf indication con‐
traire. En utilisant + à la place de - on désactive explicite‐
ment un drapeau. Les attributs peuvent également être fournis
en argument lors de l'invocation du shell. Le jeu de drapeaux
actuellement actifs est disponible dans $-. La valeur de retour
est vraie sauf si une option invalide est rencontrée.
shift [n]
Les paramètres positionnels à partir de n+1 ... sont renommés en
$1 .... Les paramètres représentés par les nombres $# jusqu'à
$#-n+1 sont supprimés. n doit être un entier non-négatif
inférieur ou égal à $#. Si n vaut 0, aucun paramètres n'est
modifié. Si n est omis, on suppose qu'il vaut 1. Si n est
supérieur à $#, les paramètres positionnels ne sont pas mod‐
ifiés. Le code de retour est supérieur à 0 si n est supérieur à
$# ou inférieur à 0. Sinon le code de retour est nul.
shopt [-pqsu] [-o] [nom_opt ...]
Bascule la valeur des variables contrôlant le comportement
optionnel du shell. Sans option, ou avec l'option -p, une liste
de toutes les options configurables est affichée, avec l'indica‐
tion de l'état de chacune d'entre elles. L'option -p réclame un
affichage susceptible d'être réutilisé en entrée. Les autres
options ont les significations suivantes :
-s Activer chaque nom_opt indiqué.
-u Désactiver chaque nom_opt indiqué.
-q Supprimer la sortie normale (mode silencieux). Le code de
retour indique si l'option nom_opt est active ou non. Si
plusieurs nom_opt sont fournis en argument de l'option
-q, le code de retour est nul si tous les nom_opt sont
actifs, et non-nul sinon.
-o Restreindre les valeurs des nom_opts à celles définies
pour l'option -o de la commande set interne.
Si l'option -s ou -u est utilisé sans argument nom_opt,
l'affichage est limité aux options qui sont actives ou inac‐
tives, respectivement. sauf indication contraire, les options
shopt sont désactivés par défaut.
Le code de retour lors d'un affichage est zéro si tous les
nom_opt sont actifs, non-nul sinon. Lors d'une activation ou
inhibition, le code de retour est nul sauf si nom_opt n'est pas
une option valide du shell.
La liste des options shopt est :
cdable_vars
Si cette option est active, un argument de la commande
interne cd qui n'est pas un répertoire est supposé être
un nom de variable dont la valeur est le répertoire
visé.
cdspell Les erreurs minimes de frappe dans un composant du
répertoire en argument de la commande cd seront cor‐
rigées. Les erreurs corrigées sont les inversions d'un
caractère, un caractère manquant et un caractère en
trop. Si une correction est possible, le nom de réper‐
toire corrigé est affiché, et la commande est exécuté.
Cette option n'est utilisé que par les shells interact‐
ifs.
checkhash
bash vérifiera si 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, la recherche normale de
chemin est assurée.
checkwinsize
bash vérifiera la taille de la fenêtre après chaque com‐
mande et, au besoin, mettra à jour les valeurs des vari‐
ables LINES et COLUMNS.
cmdhist Lorsque cette option est active, bash essaiera de sauve‐
garder les commandes s'étendant sur plusieurs lignes en
une seule entrée d'historique. Ceci facilite l'édition
ultérieure de commandes multilignes.
dotglob Si cette option est active, bash inclut les noms de
fichiers commençant par un `.' dans les résultats des
développements de noms de fichiers.
execfail
Un shell non-interactif ne se terminera pas s'il ne peut
exécuter un fichier fourni en argument de la commande
interne exec. Un shell interactif ne se termine pas si
exec échoue.
expand_aliases
Les alias sont développés comme décrit plus haut, au
paragraphe ALIASES. Cette option est activée par défaut
pour les shells interactifs.
extglob Les fonctionnalités étendues de mise en correspondance
décrite au paragraphe Développement des noms de fichiers
sont activées.
histappend
La liste d'historique est ajoutée au fichier dont le nom
est contenu dans la variable HISTFILE lorsque le shell
se termine, plutôt que d'écraser ce fichier.
histreedit
Si la bibliothèque readline est en service, un utilisa‐
teur peut ré-éditer une substitution d'historique qui a
échoué.
histverify
Si la bibliothèque readline est en service, le résultat
de la substitution d'historique n'est pas transmise
immédiatement au shell. A la place, la ligne résultant
est chargée dans le tampon d'édition de readline permet‐
tant des modifications ultérieures.
hostcomplete
Si la bibliothèque readline est en service, bash essay‐
era d'assurer la complétion des noms d'hôtes lorsqu'un
mot contient un @ (voir Completion au paragraphe READ‐
LINE plus haut). Cette option est active par défaut.
huponexit
bash enverra un signal SIGHUP à tous les jobs lorsqu'un
shell de login interactif se termine.
interactive_comments
Un mot commençant par un # autorisera tous les autres
caractères de la ligne à être ignorés dans un shell
interactif (voir le paragraphe COMMENTAIRES plus haut).
Cette option est active par défaut.
lithist Si cette option, et l'option cmdhist sont actives, les
commandes multilignes sont sauvées dans l'historique
avec des sauts-de-ligne imbriqués plutôt que des points-
virgules.
mailwarn
Si cette option est active et si un fichier que bash
surveille pour les mails a été accédé depuis la dernière
vérification, le message "The mail in fichier has been
read" est affiché.
nocaseglob
Si cette option est active, bash traite les noms de
fichiers sans différences minuscules/majuscules lors du
développement des noms de fichiers (voir plus haut).
nullglob
Si cette option est active, bash autorise les motifs ne
correspondant à aucun fichiers (voir Développement des
noms de fichiers plus haut) à se développer en une
chaîne nulle plutôt qu'en une valeur littérale.
promptvars
If set, prompt strings undergo variable and parameter
expansion after being expanded as described in PROMPTING
above. This option is enabled by default.
restricted_shell
Le shell active cette option s'il est démarré en mode
restreint (voir SHELL RESTREINT plus bas). Cette valeur
ne peut pas être changée. Elle n'est pas réinitialisée
lorsque les fichiers de démarrage sont exécutés, ce qui
permet à ces fichiers de découvrir si un shell est
resteint ou non.
shift_verbose
La commande interne shift affiche un message d'erreur
lorsque le nombre de décalage dépasse le nombre de
paramètres positionnels.
sourcepath
La commande interne source (.) utilise la valeur de la
variable PATH pour trouver le répertoire contenant le
fichier fourni en argument. Cette option est active par
défaut.
suspend [-f]
Suspend l'exécution du shell jusqu'à la réception d'un signal
SIGCONT. L'option -f élimine le message d'erreur s'il s'agit
d'un shell de login, et force sa suspension. Le code de retour
est nul sauf si l'on utilise un shell de login et si l'option -f
n'est pas fournie, ou si le contrôle des jobs n'est pas
disponible.
test expr
[ expr ]
Renvoie la valeur 0 (vrai) ou 1 (faux) en fonction de l'évalua‐
tion de l'expression conditionnelle expr. Chaque opérateur et
opérande doit être représenté par un argument distinct. Les
expressions sont composées des unités élémentaires décrites plus
haut dans EXPRESSIONS CONDITIONNELLES
Les expressions peuvent être combinées avec les opérateurs suiv‐
ant, par ordre de précédence décroissante :
! expr Vrai si expr est fausse
( expr )
Renvoie la valeur de expr. Peut servir à surcharger la
précédence normale des opérateurs.
expr1 -a expr2
Vrai si expr1 et expr2 sont toutes deux vraies.
expr1 -o expr2
Vrai si expr1 ou expr2 est vraie.
test et [ évaluent les expresssions conditionnelles en fonction
d'un jeu de règles dépendant du nombre d'arguments.
0 argument
L'expression est fausse
1 argument
L'expression est vraie si et seulement si l'argument est
non nul.
2 arguments
Si le premier argument est !, l'expression est vraie si
et seulement si le second argument est nul. Si le pre‐
mier argument est l'un des opérateurs conditionnel
unaires décrits plus haut au paragraphe EXPRESSIONS CON‐
DITIONNELLES l'expression est vraie si le test unaire est
vrai. Si le premier argument n'est pas un opérateur con‐
ditionnel unaire; l'expression est fausse.
3 arguments
Si le second argument est l'un des opérateur condition‐
nels binaires décrits plus haut au paragraphe EXPRESSIONS
CONDITIONNELLES, le résultat de l'expression est le
résultat du test binaire utilisant le premier et le
troisième argument en tant qu'opérandes. Si le premier
argument est !, la valeur est la négation du test binaire
utilisant les deuxième et troisième arguments. Si le
premier argument est exactement ( et le troisième argu‐
ment est exactement ), le résultat est le test unaire du
second argument. Sinon l'expression est fausse. Les
opérateurs -a et -o sont considérés comme des opérateurs
binaires dans ce cas.
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 les règles de précédence décrites ci-dessus.
5 argument ou plus.
L'expression est analysée et évaluée selon les règles de
précédence décrites ci-dessus.
times Affiche les durées cumulées utilisateur et système pour le shell
et les processus lancés par ce shell. Le code de retour est nul.
trap [-lp] [cmd] [sigspec]
La commande cmd sera lue et exécutée lorsque le shell recevra
l'un des signaux sigspec. Si cmd est absent ou si elle vaut -,
tous les signaux indiqués reprennent leurs comportements origin‐
aux (qu'ils avaient au démarrage du shell). Si cmd est une
chaîne nulle, les signaux sigspec seront ignorés par le shell et
par les commandes qu'il invoque. Si cmd est -p alors le com‐
portement pour chacun des sigspec est affiché. Si aucun argument
n'est fourni, ou si l'option -p est seule, trap affiche les com‐
mandes associées avec chaque signaux. Les signaux sigspec peu‐
vent être spécifié en indiquant des noms de signaux définis dans
, ou les numéros des signaux. Si sigspec vaut EXIT
(0) la commande cmd sera exécutée au moment de quitter le shell.
Si sigspec est DEBUG, la commande cmd sera exécutée après chaque
commande simple (voir GRAMMAIRE DU SHELL plus haut). L'option
-l affiche la liste des noms de signaux, et leurs numéros corre‐
spondants. Les signaux ignorés lors de l'invocation du shell ne
peuvent pas être capturés ni reprendre leurs comportements par
défaut. Lors de la création d'un processus fils, les signaux
capturés reprennent leur comportement par défaut. Le code de
retour est faux si un nom ou un numéro de signal est invalide,
sinon trap renvoie une valeur vraie.
type [-atp] nom [nom ...]
sans option, indique comment chaque nom doit être interprété si
on l'utilise en nom de commande. Si l'attribut -t est utilisé,
type affiche une des phrases suivantes alias, keyword, function,
builtin, ou file selon que le nom est un alias, un mot-clé
réservé au shell, une fonction, une commande interne, ou un
fichier sur le disque. Si le nom n'est pas trouvé, rien n'est
affiché et le code de retour est faux. Si l'argument -p est
utilisé, type renvoie le nom du fichier qui sera exécuté si l'on
tape le nom en guise de commande, ou rien si type -t name ne
renverrait pas file. Si une commande est disponible dans la ta‐
ble de hachage, -p affiche la valeur de cette table, qui n'est
pas nécessairement le fichier apparaissant en premier dans le
PATH. Si l'option -a est invoquée, type affiche tous les
emplacements contenant un exécutable du nom indiqué. Ceci
inclut les alias et les fonctions, sauf si l'option -p est
également présente. La table de hachage des commandes n'est pas
consultée avec l'option -a. type renvoie vrai si l'un des argu‐
ments est trouvé, et faux si aucun n'a été trouvé.
ulimit [-SHacdflmnpstuv [limite]]
fournit, sur les systèmes qui le permettent, un mécanisme de
contrôle des ressources disponibles pour le shell et pour les
processus qu'il lance. La valeur de la limite peut être un nom‐
bre (utilisant les unités particulières de la ressources), ou la
valeur unlimited. Les options H et S précisent si la limite
doit être dure (Hard), ou souple (Soft). Une limite dure ne peut
pas être augmentée une fois qu'elle a été positionnée. Une lim‐
ite souple peut être augmentée jusqu'à la hauteur de la limite
dure correspondante. Par défaut, les limites fixées sont sou‐
ples. Si la limite est omise, on affiche la valeur de la limite
souple pour la ressource indiquée, sauf si l'option H est
fournie. Quand plusieurs ressources sont indiquées, leurs noms,
et leurs unités respectives sont affichés avant les valeurs. Les
options sont interprétées ainsi :
-a affichage de toutes les limites actuelles
-c la taille maximale pour la création d'un fichier core
-d la taille maximale du segment de données d'un processus
-f la taille maximale d'un fichier créé par le shell
-l la taille maximale que l'on peut verrouiller en mémoire
-m la taille maximale de la partie résidente d'un processus
-n le nombre maximal de descripteurs de fichiers ouverts (la
plupart des systèmes ne permettent pas de modification)
-p La taille d'un tuyau (pipe) en blocs de 512 octets (par‐
fois non modifiable)
-s la taille maximale de la pile
-t la durée maximale, en seconde, de temps CPU accordé à un
processus.
-u le nombre maximal de processus autorisés pour un seul
utilisateur
-v la quantité de mémoire virtuelle disponible pour le shell
Si une limite est fournie, la ressource correspondante recevra
cette limite (l'option -a ne permet que l'affichage). Si aucune
option n'est indiquée, la ressource -f est prise par défaut. Les
valeurs s'expriment en kilo-octets, sauf pour -t, ou elles
s'expriment en secondes, -p, qui utilise des unités de blocs de
512 octets, ainsi que -n et -u, qui n'ont pas d'unités. La
valeur renvoyée est 0 sauf si une option illégale est détectée,
si un argument non-numérique autre que unlimited est fourni
comme limite, ou si une erreur se produit durant la modification
de la limite.
umask [-p] [-S] [mode]
Le masque de création de fichier de l'utilisateur est fixé au
mode indiqué. Si mode commence par un chiffre, il est
interprété comme un nombre octal, sinon il est considéré comme
un masque symbolique, semblable à ceux acceptes par chmod(1).
Si mode est omis, ou si l'option -S est fournie, la valeur
courante du masque est affichée. L'option -S affiche le masque
sous forme symbolique, l'affichage par défaut étant en octal.
Si l'option -p est fournie, et si le mode est omis, la sortie a
lieu dans un format réutilisable en entrée. Le code de retour
est nul si le mode a pu être changé correctement, ou si on a
omis l'argument mode, et faux sinon.
unalias [-a] [nom ...]
Supprime le nom de la liste des alias définis. Si l'option -a
est demandée, toutes les définitions d'alias sont supprimées. La
valeur renvoyée est vraie sauf si un nom mentionné n'est pas un
alias défini.
unset [-fv] [nom ...]
Pour chaque nom indiqué, supprimer la variable ou la fonction
correspondante. Si aucune option n'est fournie, ou si l'option
-v est demandée, chaque nom se réfère à une variable shell. Les
variables en lecture-seule ne peuvent pas être détruites. Si
l'option -f est indiquée, chaque nom se réfère à une fonction
shell, et la définition de la fonction est supprimée. Chaque
variable ou fonction est supprimé de l'environnement transmis
aux commandes ultérieures. Si l'une des variables RANDOM, SEC‐
ONDS, LINENO, HISTCMD, ou DIRSTACK est supprimée, elle perd ses
propriétés spécifiques, même s'il elle est recréée ultérieure‐
ment. Le code de retour est vrai, à moins qu'un des noms
n'existe pas, ou ne soit pas supprimable.
wait [n]
Attend que le processus indique se termine, et renvoie son code
de retour. n peut indiquer un PID, ou un job. S'il s'agit d'un
indicateur de job, on attendra la fin de tous les processus du
tube de ce job. Si n est omis, on attend la fin de tous les
processus fils actuellement actifs, et le code de retour sera
zéro. Si n se rapporte à un processus ou un job inexistant, le
code de retour sera 127. Dans tous les autres cas, le code de
retour sera celui du dernier processus ou job attendu.
SHELL RESTREINT
Si bash démarre sous le nom rbash, ou si l'option -r est fournie lors
de son invocation, le shell devient restreint. Un shell restreint per‐
met de configurer un environnement plus contrôlé qu'un shell standard.
Il se comporte de même manière que bash à la différence des actions
suivantes qui sont désactivées ou non réalisées :
· changer de répertoire avec cd ;
· modifier ou détruire les valeurs de SHELL, PATH, ENV, ou
BASH_ENV ;
· indiquer des noms de commandes contenant un / ;
· indiquer un nom de fichier contenant un / comme argument de la
commande . interne ;
· importer une définition de fonction dans l'environnement au
démarrage ;
· analyser les valeurs de SHELLOPTS au démarrage ;
· rediriger la sortie en utilisant un opérateur >, >|, <>, >&, &>,
et >> " ;"
· utiliser la commande interne exec pour remplacer le shell par
une autre commande " ;"
· ajouter ou supprimer des commandes internes avec les options -f
et -d de la commande enable interne ;
· indiquer l'option -p de la commande command interne ;
· supprimer le mode restreint avec set +r ou set +o restricted.
Ces restrictions sont mises en place après la lecture des fichiers de
démarrage.
Lorsqu'ue commande trouvée dans un script shell est exécutée (voir le
paragraphe EXECUTION DES COMMANDES plus haut), rbash supprime les
restrictions dans le shell servant a exécuter le script.
VOIR AUSSI
Bash Features, Brian Fox et Chet Ramey
The Gnu Readline Library, Brian Fox et Chet Ramey
The Gnu History Library, Brian Fox et Chet Ramey
Portable Operating System Interface (POSIX) Part 2: Shell and Utili‐
ties, IEEE
sh(1), ksh(1), csh(1)
emacs(1), vi(1)
readline(3)
FICHIERS
/bin/bash2
L'exécutable bash.
/etc/profile
Le fichier d'initialisation globale, exécutée par les shells de
login.
~/.bash_profile
Le fichier d'initialisation personnalisée, exécutée par les
shells de login.
~/.bashrc
Le fichier de démarrage personnel, pour les shells interactifs.
~/.bash_logout
Le fichier de sortie des shells de login lors de la déconnexion.
~/.inputrc
Le fichier d'initialisation personnalisée de readline.
AUTEURS
Brian Fox, Free Software Foundation (auteur principal)
bfox@ai.MIT.Edu
Chet Ramey, Case Western Reserve University
chet@ins.CWRU.Edu
RAPPORT DE BOGUE
Si vous trouvez un bogue dans bash, vous êtes encouragés à nous en
faire part. Tout d'abord vous devez vous assurer qu'il s'agit réelle‐
ment d'un dysfonctionnement, et qu'il apparaît bien dans la dernière
version de bash disponible.
Une fois que vous êtes sûrs qu'il s'agit bien d'un bogue, utilisez la
commande bashbug pour nous envoyer un rapport. Si vous avez trouvé une
correction, n'hésitez pas à l'envoyer en même temps. Les simples sug‐
gestions, ou les remarques d'ordre `philosophique' peuvent être trans‐
mises à bug-bash@prep.ai.MIT.Edu ou postées dans le groupe Usenet
gnu.bash.bug.
TOUS les rapports de bogue doivent contenir :
Le numéro de version de bash
Le matériel et le système d'exploitation utilisés
La version du compilateur utilisé pour compiler bash.
Une description du comportement du bogue. [NDT : En anglais évidemment]
Un petit script, ou une manipulation qui met en évidence le bogue.
bashbug insère automatiquement les trois premiers éléments de cette
liste dans le formulaire qu'il fournit pour remplir le rapport de
bogue.
Les commentaires et rapports d'erreurs concernant la version originale
de cette page de manuel doivent être transmis à chet@ins.CWRU.Edu.
Ceux concernant la version française peuvent être envoyés à ccb@club-
internet.fr.
BOGUES
Cet interpréteur est volumineux et lent.
Il y a quelques différences subtiles de comportement entre bash et les
versions traditionnelles de sh, principalement à cause des spécifica‐
tions POSIX.
L'utilisation des alias peut avoir des conséquences inattendues.
Les commandes et les fonctions internes ne peuvent pas être
arrétées/relancées.
Les séquences de commandes de la forme `a ; b ; c' ne sont pas gérées
proprement lors d'une interruption de processus. En cas de suspension
d'une telle séquence, l'interpréteur exécute immédiatement la commande
suivante de la séquence. Il suffit de placer cette séquence entre par‐
enthèses pour la forcer à créer un sous-shell, qui, lui, sera inter‐
ruptible en bloc.
Les commandes à l'intérieur de $(...) ne sont pas analysées avant la
réalisation de la complétion. Cela peut retarder l'affichage de mes‐
sages d'erreurs pendant un certain temps après la frappe de la com‐
mande.
Les variables de type tableau ne peuvent pas (encore) être exportées.
TRADUCTION
Christophe Blaess 1997-2003.
GNU 20 Janvier 1999 BASH(1)