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 commandes lues depuis l'entrée standard, ou depuis un
fichier. Bash incopore également des fonctionnalités
provenant des interpréteurs Korn et C-shell (ksh et csh).
Bash est entièrement concu pour être conforme aux spécifi
cations 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 positionnels, en
commencant par $0.
-r Si l'option -r est présente, l'interpréteur est
restreint (voir les "SHELLS RESTREINTS").
-i Si l'option -i est présente, l'interpréteur est
interactif.
-s Si l'argument -s est présent, ou s'il n'y a que
des options sur la ligne de commande,
L'interprétation se fera depuis l'entrée stan
dard. 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 stan
darde. Ce sont les chaînes qui sont sujettes à
une traduction quand les locales ne sont ni
celles du C ni celles du standard POSIX. Cela
implique l'option -n ; aucune commande ne sera
executé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 reconnait également plusieurs options multi-
GNU 20 Janvier 1999 1
BASH(1) Manuel de l'utilisateur Linux BASH(1)
caractères. Ces options doivent apparaitre sur la ligne de
commande avant les options mono-caractère.
--dump-po-strings
Équivalent à -D, mais la sortie est dans le for
mat des fichiers po de GNU gettext (objet
portable).
--dump-strings
Équivalent à -D.
--help Affiche un message sur l'usage de bash sur la
sortie standard et quitte en renvoyant un code
de retour de succès.
--login Se comporter comme un shell de login. (Voir
INVOCATION).
--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
INVOCATION plus bas).
-norc Ne pas lire le fichier de configuration person
nalisée ~/.bashrc lorsque le shell est interac
tif. Cette option est activée par défaut
lorsque l'interpréteur 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 le comportement par défaut est différent de
ce standard.
--rcfile fichier
Executer les commandes contenues dans le fichier
mentionne, plutot que celles du fichier de con
figuration personnelle ~/.bashrc, si le shell
est interactif. (voir le paragraphe INVOCATION
plus bas).
--restricted
Le shell devient restreint (voir les SHELLS
RESTREINTS).
--verbose Équivalent à -v
--version Afficher le numéro de version de bash sur la
sortie standard et terminer en retournant 0.
ARGUMENTS
S'il reste des arguments sur la ligne de commande après le
traitement des options, et si ni l'option -c, ni l'option
-s ne sont présentes, le premier argument est supposé être
le nom du fichier dans lequel lire les commandes. Lorsque
bash est invoqué de cette maniere, $0 contient le nom du
fichier, et les autres paramètres positionnels contiennent
GNU 20 Janvier 1999 2
BASH(1) Manuel de l'utilisateur Linux BASH(1)
les arguments restants. Bash lit, et exécute, les comman
des depuis ce fichier, puis se termine. Le code de retour
de bash est celui de la derniere commande exécutée dans le
fichier script. Si aucune commande n'a été exécutée, le
code de retour est 0.
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 sor
tie standard sont toutes deux connectées à un terminal
(déterminé par la fonction isatty(3)), ou s'il est invoqué
avec l'option -i. Le paramètre PS1 est positionné, et le
paramètre $- contient la lettre i si bash est interactif,
ce qui permet à un script ou à un fichier de démarrage de
vérifier l'état du shell.
Le paragraphe suivant décrit comment bash éxécute ses
fichiers de d'initialisation. Si l'un de ces fichiers
existe mais n'est pas accessible en lecture, bash signale
une erreur. Les tildes sont remplacées par des noms de
fichiers comme décrit dans Développement du Tilde dans la
section Développement.
Les Shells de Login (interactifs ou non) :
Au login :
Si /etc/profile existe, il est exécuté.
Si ~/.bash_profile existe, il est exécuté,
Sinon Si ~/.bash_login existe, il est exécuté,
Sinon Si ~/.profile existe, il est exécuté.
L'option -noprofile permet d'empêcher la lecture de ces fichiers
A la sortie :
Si ~/.bash_logout existe, il est exécuté.
Shells interactifs, mais pas de Login :
Au démarrage :
Si ~/.bashrc existe, il est exécuté.
L'option -norc permet d'empêcher cette lecture. L'option -rcfile)
permet d'utiliser un autre fichier.
Shells non-interactifs:
Au démarrage:
Si la variable d'environnement BASH_ENV est non-nulle, elle est
développée, et le fichier dont elle contient le nom est exécuté,
comme si l'on appliquait la commande
if [ "$BASH_ENV" ]; then . $BASH_ENV; fi
mais on n'utilise pas PATH pour rechercher le chemin d'accès.
Si Bash est invoqué sous le nom sh, il essaye d'imiter au
GNU 20 Janvier 1999 3
BASH(1) Manuel de l'utilisateur Linux BASH(1)
maximum le comportement de la version "historique" de sh
autant que possible, tout en essayant de se conformer au
standard POSIX. Pour un shell de login, il n'essaye
d'exécuter que /etc/profile et ~/.profile, dans cet ordre.
L'option -noprofile peut toujours être utilisée pour
désactiver ce comportement. Quand il est invoqué en tant
que shell interactif sous le nom sh, bash consulte la
variable ENV, développe sa vakeur si elle est définie et
utilise son développement en tant que nom de fichier à
lire et exécuter. Comme un shell invoqué sous le nom sh
n'essaye pas d'exécuter aucun autre fichier de démarrage,
l'option --rcfile n'a aucun effet. Un shell non interac
tif 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 vari
able ENV est développée, et le fichier qui en résulte est
exécuté. On n'exécute pas d'autre fichier d'initialisa
tion.
Bash tente de déterminer s'il est exécuté par le démon
éxécutant des shells à distances (généralement appellé
rshd). Si bash se rend compte qu'il est exécuté par rshd
, il lit et exécute les commandes de ~/.bashrs , si ce
fichier existe et est accessible en lecture. Il ne fera
pas cela comme le ferait sh . L'option --norc peut être
utilisé pour interdire ce comportement, et l'option
--rcfile permet de forcer l'utilisation d'un autre
fichier, mais rshd n'utilise généralement pas ces options
ni n'autorise leur utilisation.
Si le shell est lancé avec un numéro de groupe effectif
différend du groupe réel de l'utilisateur (GID), et si
l'option -p n'est pas appliquée, aucun fichier d'initiali
sation n'est lu, les fonctions du shell ne sont pas
héritées de l'environnement, la variable SHELLOPTS est
ignorée si elle apparaît dans l'environnement, et le
numéro effectif de l'utilisateur (EUID) est remplacé par
l'UID. Si l'option -p est appliquée lors de cette invoca
tion, le comportement au démarrage est le même maie l'EUID
n'est pas réinitialisé.
Note du traducteur: Sous Linux, le paragraphe précédent
est inutile car pour des raisons de sécurités, le noyau
ignore les bits Set-User-Id et Set-Group-Id. Donc l'EUID
sera toujours égal à l'UID, de même pour le GID et l'EGID.
DÉFINITIONS
Les définitions suivantes sont utilisées tout au long de
ce document.
GNU 20 Janvier 1999 4
BASH(1) Manuel de l'utilisateur Linux BASH(1)
blanc Un espace ou une tabulation.
mot une séquence de caractères considerée comme une
unité élémentaire par le shell. On parle également
de token (jeton).
nom un mot ne contenant que des caractères alpha-
numériques, ou le caractère de soulignement (under
score), commençant par une lettre ou un souligne
ment. On s'y refère également sous le terme identi
ficateur.
méta-caractère
Un caractère qui, lorsqu'il n'est pas protégé,
sépare les mots. Un de ceux-ci :
| & ; ( ) < > espace tabulation
opérateur de contrôle
Un token ayant une fonction de contrôle. L'un des
symboles suivants :
|| & && ; ;; ( ) | <retour-chariot>
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 facultative, suivie de mots séparés par des
blancs et des redirections, et terminée par un opérateur
de controle. Le premier mot indique la commande à
exécuter. Les mots suivants sont transmis en argument à
cette commande.
La valeur de retour d'une commande simple est son code de
sortie, ou 128+n si la commande a été interrompue par le
signal n.
Tubes (Pipelines)
Un tube est une séquence d'une ou plusieurs commandes
séparées par le caractère |. Le format d'un tube est :
[ ! ] 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 tube, la valeur de sortie
GNU 20 Janvier 1999 5
BASH(1) Manuel de l'utilisateur Linux BASH(1)
de celui-ci sera la NÉGATION logique de la valeur de
retour de la dernière commande. Sinon, le code de retour
d'un tube sera celui de la dernière commande.
L'interpréteur attend la fin de toutes les commandes du
tube avant de renvoyer une valeur.
Si le mot réservé time précède le tube, les temps écoulés,
consommés par le programme et par le système pour le pro
gramme sont indiqués quand le tube se termine. L'option
-p change le format de sortie pour celui spécifié par
POSIX. La variable TIMEFORMAT peut être affectée avec une
chaîne de format indiquant comment les informations
doivent être affichées; consultez la descriptions de TIME
FORMAT dans Variables du Shell.
Chaque commande du tube 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 tubes séparés
par l'un des opérateurs ;, &, &&, ou ||, et terminée par
;, &, ou <retour-chariot>.
Dans cette liste d'operateurs, && et || ont une précédence
identique, suivis par ; et &, qui ont également une
précédence identique.
Si une commande se termine par l'opérateur de contrôle &,
l'interpréteur l'exécute en arrière-plan, dans un sous-
shell. L'interpréteur n'attend pas que la commande se
termine et retourne un code 0. Les commandes séparées par
un ; sont exécutées successivement, l'interpréteur attend
que chaque commande se termine avant de lancer la suiv
ante. Le code de retour est celui de la dernière commande
exécutée.
Les opérateurs de contrôle && et || indiquent respective
ment 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.
GNU 20 Janvier 1999 6
BASH(1) Manuel de l'utilisateur Linux BASH(1)
Commandes composées
Une commande composée est l'une des constructions suiv
antes :
(liste)
liste est exécutée dans un sous-shell. Les affecta
tions de variables, 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. Cette construction est connue
sous le nom de commandes groupées. Le code de
retour est celui de la liste. liste doit obliga
toirement se terminer par un caractère fin-de-ligne
ou un point-virgule.
L'expression est évaluaée selon les règles décrites dans
ÉVALUATION ARITHMÉTIQUES. Si la valeur de
l'expression n'est pas zéro, la valeur renvoyée est
zéro; sinon 1 est renvoyé. Cela est strictement
identique à "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 CON
DITIONELLES. Le coupage des mots et l'expansion
des chemins ne sont pas réalisés sur les mots 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 à la droite de l'opérateur est con
sidéré comme étant un motif et est recherché selon
les règles décrites dans Motifs Matching. La
valeur renvoyée est 0 si la recherche est
fructueuse 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éveloppe
ment).
Les expressions peuvent être combinées en utilisant
les opérateurs suivants, lisés par ordre décrois
sant de priorité :
( expression )
Retourne la value de expression. Cela peut
être utilisé pour outrepasser la priorité
normale des opérateurs.
GNU 20 Janvier 1999 7
BASH(1) Manuel de l'utilisateur Linux BASH(1)
! 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 est suffisante pour déterminer le
code de retour de l'expression conditionnelle 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
sucessivement 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 stan
dard, 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 est lue (EOF), la commande se termine.
Pour toutes les autres valeurs, la variable nom est
nulle. La ligne lue est stockée dans la variable
REPLY. La liste est exécutée après chaque sélec
tion, 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
GNU 20 Janvier 1999 8
BASH(1) Manuel de l'utilisateur Linux BASH(1)
le mot, puis essaye de le mettre en correspondance
successivement avec chacun des motifs en utilisant
les mêmes règles de correspondance que pour les
expansions de 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 de corre
spondance. Le code de retour est zéro si aucun
motif ne correspond, sinon il s'agit du code de la
liste exécutée.
if liste then liste [ elif liste then liste ] ... [ else
liste ] fi
La liste suivant le if est exécutée. Si son code de
retour est nul, la liste suivant le 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 suivant le do
tant que la dernière commande de la liste suivant
le while renvoie un code de retour nul. La com
mande 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 men
tionné. 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 com
mande interne shopt (voir COMMANDES INTERNES DU SHELL), un
mot commençant par # permettra d'ignorer tous les car
actères restants sur la ligne. Un shell interactif sans
l'option interactive-comments n'autorise pas les
GNU 20 Janvier 1999 9
BASH(1) Manuel de l'utilisateur Linux BASH(1)
commentaires. 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 cer
tains caractères ou mots. Les protections peuvent être
utilisées pour empêcher le traitement de certains car
actères spéciaux, pour éviter que des mots-réservés ne
soient reconnus comme tels, ou pour empcher le développe
ment des paramètres.
Tous les méta-caractères mentionnés dans le paragraphe
DÉFINITIONS ci-dessus ont des significations spéciales
pour le shell, et doivent être protégés pour garder leur
propre valeur. Il y a trois mécanismes de protection : Le
caractère d'échappement, les apostrophes (quote) et les
guillemets (double-quote).
Un caractère backslash (\), quand il n'est pas protégé,
représente le caractère d'échapement. Il préserve la
valeur littérale du caractère qui le suit, à l'exception
du <retour-chariot>. Si une séquence \<retour-chariot>
apparaît, et si le backslash n'est pas protégé, l'ensemble
\<retour-chariot> est considéré comme une continuation de
ligne (autrement dit, il est ignoré).
Encadrer des caractères entre des apostrophes simples
préserve la valeur littérale de chacun des caractères. Une
apostrophe ne peut pas être placée entre deux apostrophes,
même si elle est précédée d'un backslash.
Encadrer des caractères entre des guillemets préserve la
valeur littérale de chacun des caractères sauf $, `, et \.
Les caractères $ et ` conservent leurs significations
spéciales, même entre guillemets. Le backslash ne conserve
sa signification que lorsqu'il est suivi par $, `, ", \,
ou <fin-de-ligne>. Un guillemet peut etre 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
GNU 20 Janvier 1999 10
BASH(1) Manuel de l'utilisateur Linux BASH(1)
\r retour chariot
\t tabulation horizontale
\v tabulation verticale
\\ anti-slash
\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 apostro
phes comme si le symbole dollar n'avait pas été présent.
Une chaîne entre guillemets précédée d'un symbole dollar
($) sera traduite selon les locales en vigueur. Si la
locale courante est C [Ndt: valeur par défaut] ou POSIX,
le symbole dollar est ignoré. Si la chaîne a subi une
traduction ou des remplacements, le résultat est protégé
par des guillemets.
PARAMÈTRES
Un paramètre est une entité permettant de stocker des
valeurs, un peu comme les variables dans les langages de
programmation courants. Un paramètre peut se présenter
sous forme d'un nom, d'un nombre, ou d'un des caractères
spéciaux décrits plus bas, dans le paragraphe Paramètres
Spéciaux. Au niveau du shell, une variable est un
paramètre muni d'un nom.
Un paramètre existe dès qu'on lui attribue une valeur. Une
chaîne vide est une valeur valide. Une fois qu'une vari
able existe, elle ne peut etre 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. Si une
variable a son attribut -i activé (voir declare plus bas,
dans le paragraphe COMMANDES INTERNES DU SHELL) alors la
valeur est soumise à l'évaluation arithmétique, même si la
syntaxe $[...] n'apparaît pas. Les mots ne sont pas
tronqués, sauf avec la séquence "$@" comme cela est
expliqué dans le paragraphe Paramètres Spéciaux ci-
dessous. Le développement des noms de fichiers n'est pas
effectué.
GNU 20 Janvier 1999 11
BASH(1) Manuel de l'utilisateur Linux BASH(1)
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 argu
ments du shell lors de son invocation. Ils peuvent être
modifiés avec la commande interne set. On ne peut pas
utiliser d'assignation pour modifier le contenu d'un
paramètre positionnel.
Les paramètres positionnels sont temporairement modifiés
lors de l'exécution d'une fonction du shell (voir le para
graphe FONCTIONS plus bas).
Un paramètre positionnel constitué de plusieurs chiffres
doit être encadré par des accolades lors de son développe
ment (voir le paragraphe EXPANSION plus bas).
Paramètres Spéciaux
Il existe plusieurs paramètres de l'interpréteur ayant un
comportement particulier. Ces paramètres peuvent unique
ment être consultés, on ne peut pas les modifier.
* Se développe en l'ensemble des paramètres position
nels, en commençant par 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 premier
caractère de la variable spéciale IFS. Ceci signi
fie que ``$*'' est équivalent à ``$1c$2c...'', dans
laquelle c est le premier caractère de la valeur de
la variable IFS. Si IFS est nulle ou inexistante,
les paramètres sont séparés par des espaces.
@ Se développe en l'ensemble des paramètres position
nels, en commençant par 1. Quand le développement
se produit entre des 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.
# Se développe pour fournir le nombre de paramètres
positionnels, en base décimale.
? Fournit le code de retour du tube exécuté en
arrière-plan le plus récemment.
- Est remplacé par la liste des options du shell
indiquées durant l'invocation, configurées avec la
commande interne set ou positionnées par le shell
lui-même (comme le drapeau -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'initiali
sation de l'interpréteur. Si bash est invoqué avec
GNU 20 Janvier 1999 12
BASH(1) Manuel de l'utilisateur Linux BASH(1)
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 argument zéro.
_ Au lancement du shell, contient le chemin absolu du
shell ou du script en cours d'exécution passé sur
la ligne de commande. Devient le dernier argument
de la commande précédente, apres 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érifica
tion [Ndt: généralement /var/mail/nom_de_l_utilisa
teur].
Variables du Shell
Les variables suivantes sont assignées 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'U-ID de l'utilisateur, initialisé au
démarrage du shell.
EUID Contient l'UID effectif de l'utilisateur, ini
tialisé au démarrage du shell [Ndt: sous Linux, il
ne devrait jamais être différent de l'UID car le
Set-User-Bit est inactif sur les scripts et inutile
voire dangereux sur un shell (i.e: imaginer une
redirection sur /etc/passwd) ]
GROUPS Variable de type tableau contenant la liste des
groupes dont l'utilisateur courant est membre.
Cette variables est protégée en écriture.
BASH Se développe en chemin d'accès complet utilisé pour
invoquer l'instance de bash en cours d'exécution.
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
nombres représentent la version de cette instance
de bash. Cette valeur est renseignée de la manière
suivante:
BASH_VERSINFO[0] Le nombre majeur de la ver
sion (release).
BASH_VERSINFO[1] Le nombre mineur de la
GNU 20 Janvier 1999 13
BASH(1) Manuel de l'utilisateur Linux BASH(1)
version (version).
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).
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 est engendré. Cette séquence de
nombres aléatoires peut être initialisée en assig
nant 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'assignation, 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ésen
tant le numéro de la ligne actuelle (commençant à
1), au sein du script ou de la fonction. Quand on
n'est ni dans un script, ni dans une fonction, la
valeur renvoyée n'a pas nécéssairement de sens.
Dans une fonction, la valeur n'est pas le numéro de
ligne dans le fichier source (cette valeur a déjà
été perdue lorsque la fonction est exécutée), mais
une approximation du nombre de commandes simples
exécutées dans le corps de cette fonction. 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 comporte
ment spécial, même s'il est recréé plus tard.
DIRSTACK
Une variable-tableau (voir Arrays) représentant le
contenu courant de la pile de répertoire. Les
répertoires apparaissent dans la pile dans l'ordre
dans lequel la commande interne dirs les affiche.
GNU 20 Janvier 1999 14
BASH(1) Manuel de l'utilisateur Linux BASH(1)
Il est possible de modifier directement cette vari
ables mais les commandes internes pushd et popd
doivent être utilisées pour ajouter et enlever des
répertoires. Modifier cette variable ne modifiera
pas le répertoire courant. Si DIRSTACK n'est pas
assignée, elle perd ses propriétés spéciales, même
si elle est recréée.
PIPESTATUS
Une variable-tableau (voir Arrays) 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 com
mande getopts (voir le paragraphe COMMANDES
INTERNES DU SHELL plus bas).
HOSTNAME
Automatiquement affectée avec le nom de l'ordina
teur.
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 lequelle 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'éxé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 argu
ment 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 vari
able est dans l'environnement au lancement de bash,
chaque option de la liste est activée avant de lire
les fichiers d'initialisation. Cette variable est
protégée en écriture.
GNU 20 Janvier 1999 15
BASH(1) Manuel de l'utilisateur Linux BASH(1)
Les variables suivantes sont utilisées par l'interpréteur.
Dans certains cas, bash affecte des valeurs par défaut aux
variables, ces cas sont décrits plus bas.
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 decouper les
lignes en mots avec la commande interne read. La
valeur par défaut est ``<espace><tabula
tion><retour-chariot>''.
PATH Le chemin de recherche des commandes à exécuter. Il
s'agit d'une liste de répertoires, séparés par des
doubles-points (`:') que l'interpréteur consulte
lorsqu'il recherche une commande (voir le para
graphe ÉXÉCUTION DES COMMANDES plus bas). Le chemin
par défaut dépend du système, et de la configura
tion choisie par la personne installant bash. Une
configuration fréquente est
``/bin:/usr/bin:/usr/local/bin:/usr/gnu/bin:.''.
HOME Le répertoire personnel de l'utilisateur. C'est
l'argument par défaut de la commande interne cd.
CDPATH Le chemin de recherche de la commande interne cd.
Il s'agit d'une liste de répertoires, séparés par
des doubles-points (`:') que l'interpréteur con
sulte lorsqu'il cherche un sous-répertoire destina
tion de la commande cd. Voici une configuration
possible ``.:~:/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, à la substitution de commandes, et à
l'évaluation arithmétique avant d'être interprétée
comme un nom de fichier. Le chemin d'acccès PATH
n'est pas utilisé pour rechercher le fichier
obtenu.
MAIL Si ce paramètre correspond à un nom de fichier, et
si la variable MAILPATH n'est pas configurée, bash
informera l'utilisateur si un courrier arrive dans
le fichier indiqué.
MAILCHECK
Indique une fréquence (en secondes) à laquelle bash
vérifiera si un nouveau courrier est arrivé. La
valeur par défaut est 60 secondes. Lorsque le délai
est ecoulé, le shell vérifiera la présence d'un
courrier avant d'afficher son symbole d'accueil.
Si cette variable est détruite (unset), le shell
cessera de vérifier le courrier.
MAILPATH
Il s'agit d'une liste de fichiers séparés par des
doubles-points (`:'), dans lesquels on verifiera
l'arrivée de courrier. Le nom d'un fichier peut
GNU 20 Janvier 1999 16
BASH(1) Manuel de l'utilisateur Linux BASH(1)
ê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. Exem
ple:
MAILPATH='/usr/spool/mail/bfox?"Tu as du cour
rier":~/shell-mail?"$_ a du courrier"'
Bash fournit une valeur par defaut pour cette vari
able, mais l'emplacement du fichier boîte à lettres
depend 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 ``bash\$ ''.
PS2 La valeur de ce paramètre est développée puis
utilisée comme symbole d'accueil secondaire. Par
défaut il s'agit de ``> ''.
PS3 La valeur de ce paramètre est développée puis
utilisée comme symbole d'accueil pour la commande
select (voir GRAMMAIRE DU SHELL plus haut).
PS4 La valeur de ce paramètre est développée 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écéssaire 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 tubes 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 acco
lades 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 util
isateur en secondes.
%[p][l]S Le temps processeur écoulé en mode
système en secondes.
%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 vir
gule. Une valeur de 0 provoque l'affichage de nom
bre 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
GNU 20 Janvier 1999 17
BASH(1) Manuel de l'utilisateur Linux BASH(1)
é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 informa
tion 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'his
torique (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 commandes(voir le paragraphe HISTORIQUE plus
bas). Par défaut, il s'agit de ~/.bash_history. Si
cette variable est détruite (commande unset),
l'historique n'est pas enregistré lors de la fin
d'un shell interactif.
HISTFILESIZE
Le nombre maximal de lignes contenues dans le
fichier historique. 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é quand un shell interactif existe.
OPTERR Si cette variable contient la valeur 1, bash
affiche les messages d'erreurs déclenchés par la
commande interne getopts (voir le paragraphe COM
MANDES 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 commencant par LC_.
LC_ALL Cette variable surcharge LANG et toute autre vari
able LC_.
LC_COLLATE
Cette variable détermine l'ordre lors du tri des
chemins ainsi que le comportement des expressions
des intervalles, des classes d'équivalences, et de
la comparaison de chaînes lors de la recherche de
motifs et le développement des chemins.
GNU 20 Janvier 1999 18
BASH(1) Manuel de l'utilisateur Linux BASH(1)
LC_CTYPE
Cette variable détermine l'interprétation des car
actères et le comportement des classes de car
actè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 de chacun des symboles d'accueil prin
cipaux.
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 nombre d' EOF
consécutifs apparaissant comme caractère initial
d'une ligne, que bash ignore 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 defaut 10 EOF consécutifs avant de se
terminer. Si elle n'existe pas, EOF est considéré
comme un terminateur de saisie pour le shell.
Seuls les shells interactifs sont concernés.
TMOUT Si cette variable contient une valeur supérieure a
zero, celle-ci est considérée comme un delai 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 doubles-
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 suffixe cor
respond à 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 double-
points,définissant la liste des noms de fichiers à
ignorer lors du développement des chemins. Si un
nom de fichier correspondant à un motif
GNU 20 Janvier 1999 19
BASH(1) Manuel de l'utilisateur Linux BASH(1)
d'expansion, correspond également à un motif dans
GLOBIGNORE, il est supprimé de la liste des corre
spondances.
INPUTRC
Le nom du fichier de configuration de readline, par
défaut ~/.inputrc (voir le paragraphe READLINE plus
bas).
notify Si cette variable existe, bash affichera un rapport
dès qu'un travail en arrière-plan se termine.
Sinon, il attendra d'avoir à presenter un symbole
d'accueil principal pour afficher son rapport (voir
également l'option -b de la commande interne set).
history_control
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 cor
respondant 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 (com
mande 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.
command_oriented_history
Lorsque cette variable existe, bash essaye de
sauver en une seule entrée d'historique toutes les
lignes d'une même commande. Ceci facilite la
ré-édition des commandes s'étendant sur plusieurs
lignes.
glob_dot_filenames
Lorsque cette variable est positionnée, bash inclut
les fichiers dont le nom commence par un `.' lors
du développement des paramètres.
allow_null_glob_expansion
Si cette variable existe, bash développe les motifs
des noms de fichiers n'ayant aucune correspondance
en une chaîne nulle, plutot que de conserver leur
propre valeur (voir le paragraphe Développement des
noms de fichiers plus bas).
histchars
Cette variable contient deux ou trois caractères
contrôlant le développement de l'historique, et le
découpage en token (voir le paragraphe EXPANSION DE
L'HISTORIQUE plus bas). Le premier caractère est le
caractère de développement de l'historique, c'est à
GNU 20 Janvier 1999 20
BASH(1) Manuel de l'utilisateur Linux BASH(1)
dire celui qui indique le début d'un développement
d'historique (normalement `!'). Le second car
actère est celui de subsitution rapide, utilise
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 car
actère `#'. Ce caractère de commentaire empêche
l'expansion de l'historique pour tous les mots
restants sur la ligne. Par contre, il ne s'agit pas
obligatoirement du caractère indiquant un commen
taire pour l'interpréteur.
nolinks
Si cette variable existe, le shell ne suit pas les
liens symboliques lorsqu'il exécute une commande
modifiant le répertoire de travail. Il utilise la
structure physique des répertoires à la place. Par
défaut, bash suit la chaîne logique des répertoires
lorsqu'il exécute des commandes modifiant le réper
toire en cours, comme cd. Voir aussi la descrip
tion de l'option -P de la commande interne set (
COMMANDES INTERNES DU SHELL plus bas).
hostname_completion_file
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 prochaîne
tentative pour compléter un nom d'hôte, bash
ajoutera le nouveau fichier à sa base de données
déjà existantes.
noclobber
Si cette variable existe, bash n'écrasera pas un
fichier existant avec les opérateurs de redirection
>, >&, et <>. Cette variable peut être contournée
lorsqu'on crée un fichier de sortie en utilisant
l'opérateur >| à la place de > (voir également
l'option -C de la commande interne set).
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
GNU 20 Janvier 1999 21
BASH(1) Manuel de l'utilisateur Linux BASH(1)
lancer. Si cette variable contient la valeur
exact, la chaîne fournie doit correspondre exacte
ment au nom d'un job arrêté. Si elle contient la
valeur substring, la chaîne fournie doit correspon
dre à une sous-chaîne du nom du job arrêté. La
valeur substring 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 fonction
nement du job id %.
no_exit_on_failed_exec
Si cette variable existe, un shell non-interactif
ne se terminera pas immédiatement si il ne peut pas
exécuter un fichier avec la commande interne exec.
Un shell interactif ne se termine pas si un exec
échoue.
cdable_vars
Si cette variable existe, un argument de la com
mande interne cd qui ne soit pas un répertoire, est
supposé être un nom de variable dont le contenu
indique le répertoire destination désiré.
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 suppportent, un développement
supplémentaire a lieu : la substitution de processus.
Seuls l'expansion des accolades, le découpage des mots, et
le développement des noms de fichiers peuvent modifier le
nombre de mots. Les autres développement transforment un
mot unique en un autre mot unique. La seule exception à
cette règle est l'expansion de ``$@'' comme on l'a vu plus
haut (voir le paragraphe PARAMÈTRES).
Expansion des 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écessairement. Les motifs
GNU 20 Janvier 1999 22
BASH(1) Manuel de l'utilisateur Linux BASH(1)
qui seront développes prennent la forme d'un préambule
facultatif, suivi d'une série de chaînes séparées par des
virgules, encadrée par des accolades. Un postambule peut
éventuellement suivre la série de chaînes. Le préambule
est inséré devant chacune des chaînes contenues entre les
accolades, et le postambule est ajouté à la fin de chacune
des chaînes résultantes, le développement se faisant de
gauche à droite.
Plusieurs développements d'accolades peuvent être
imbriqués les uns dans les autres. Les chaînes résultant
de chaque développement ne sont pas triées, l'ordre gauche
à droite est conservé. Par exemple a{d,c,b}e se développe
en `ade ace abe'.
L'expansion des accolades est effectuée avant tout autre
type de développement, et tous les caractères ayant une
signification spéciale pour les autres développement sont
conservés dans le résultat. Il s'agit d'une modification
purement littérale. Bash n'effectue aucune interprétation
syntaxique du texte entre les accolades.
Une formule correcte pour le développement doit contenir
des accolades ouvrantes et fermantes non protégées, et au
moins une virgule non protégée. Toute formule incorrecte
n'est pas développée et reste inchangée.
Cette construction est généralement utilisée comme rac
courci 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 incompat
ibilité avec les versions traditionnelles de sh,
l'interpréteur Bourne. sh n'effectue aucun traitement sur
les accolades ouvrantes et fermantes lorsqu'elles appa
raissent dans un mot, et les laisse inchangées. Bash
suppprime les accolades dans les mots, après développe
ment. Par exemple si l'on fournit à sh le mot file{1,2},
il reste inchangé en sortie. Par contre, il est tranformé
en file1 file2 par bash. Si une compatibilité stricte
avec sh est nécessaire, lancez bash avec l'attribut
-nobraceexpansion (voir OPTIONS plus haut) ou désactivez
le développement des accolades avec l'option +o braceex
pand de la commande 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 (voire tous les car
actères s'il n'y a pas de slash), sont considérés comme un
GNU 20 Janvier 1999 23
BASH(1) Manuel de l'utilisateur Linux BASH(1)
nom de login possible. Si ce nom de login est une chaîne
nulle, le tilde est remplacé par la valeur du paramètre
HOME. Si HOME n'existe pas, le tilde est remplacé par le
répertoire de connexion de l'utilisateur exécutant le
shell.
Si un `+' suit le tilde, ils seront remplacés par la
valeur du paramètre PWD. Si un `-' suit, ils seront rem
placés par la valeur de OLDPWD. Si la valeur suivant le
tilde est un nom de login valide, le tilde, ainsi que ce
nom seront remplacés par le répertoire personnel associé à
ce nom. Si le nom est invalide, ou si le développement du
tilde échoue, le mot est inchangé.
Chaque affectation de variable est soumis au développement
du tilde s'il suit le : ou le =. On peut donc utiliser
des chemins d'accès avec un tilde pour remplir les vari
ables PATH, MAILPATH, 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 accolades, afin
d'éviter que les caractères suivants ne soient considérés
comme appartenant au nom de la variable.
${paramètre}
est remplacé par la valeur du paramètre. Les acco
lades sont nécessaire quand le paramètre est un
paramètre positionnel ayant plusieurs chifres, ou
si le paramètre est suivi de caractères n'appar
tenant pas à son nom.
Dans chacun des exemples suivants, le mot est soumis au
développement du tilde, au remplacement des paramètres, à
la substitution de commandes, et à l'évaluation
arithmétique. Bash vérifie si un paramètre existe, et
s'il n'est pas nul. L'omission du double point ne fournit
qu'un test d'existence.
${paramètre:-mot}
Utilisation d'une valeur par défaut. Si le
paramètre est inexistant 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 inexistant ou nul, le développement
du mot lui est affecté. La valeur du paramètre est
alors renvoyée. Les paramètres positionnels, et
spéciaux ne peuvent pas être affectés de cette
façon.
GNU 20 Janvier 1999 24
BASH(1) Manuel de l'utilisateur Linux BASH(1)
${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 stan
dard, 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 sub
stitué. Sinon le développement du mot est renvoyé.
${#paramètre}
Est remplacé par la longueur, en caractères, de la
valeur du paramètre. Si le paramètre est * ou @,
la longueur fournie est celle du paramètre *
développé entre guillemets.
${paramètre#mot}
${paramètre##mot}
Le mot est développé pour fournir un motif, comme
dans l'expansion des noms de fichiers. Si le motif
correspond au debut 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 ``##'').
${paramètre%mot}
${paramètre%%mot}
est développé pour fournir un motif, comme dans
l'expansion des noms de fichiers. Si le motif cor
respond à 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
``%%'').
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 remplaçant par sa sortie standard, dont les derniers
sauts de lignes sont supprimés.
Quand l'ancienne forme de substitution -avec les back
quotes `- est utilisée, le caractère backslash garde sa
signification littérale, sauf s'il est suivi de $, `, ou
\. Quand on utilise la forme $(commande), tous les
GNU 20 Janvier 1999 25
BASH(1) Manuel de l'utilisateur Linux BASH(1)
caractères entre parenthèses gardent leurs valeurs
littérales. Aucun n'est traité spécifiquement.
Les substitutions de commandes peuvent être imbriquées.
Avec l'ancienne forme, il faut protéger les backquotes
internes avec un backslash.
Si la substitution apparaît entre guillemets, le découpage
des mots, et l'expansion des noms de fichiers ne sont pas
effectués.
Évaluation Arithmétique
L'évaluation arithmétique permet de remplacer une expres
sion par le résultat de son évaluation. Il existe deux
formats d'évaluation arithmétique :
$[expression]
$((expression))
L'expression est manipulée de la même manière que si elle
se trouvait entre guillemets, mais un guillemet se trou
vant entre les crochets ou les parenthèses n'est pas
traité spécifiquement. Tous les mots de l'expression
subissent le développement des paramètres, la substitution
des commandes et la suppression des apostrophes et
guillemets. Les évaluations arithmétiques peuvent être
imbriquées.
L'évaluation est effectuée en suivant les règles men
tionnées dans le paragraphe CALCUL ARITHMÉTIQUE (plus
bas). Si l'expression est invalide, bash affiche un mes
sage 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 ouverts. Elle
prend la forme <(liste) ou >(liste). La liste de proces
sus est exécutée avec ses entrées et sorties connectées à
une FIFO ou à un fichier dans /dev/fd. Le nom de ce
fichier est passé en argument à la commande qui sera
exécutée comme résultat de cette substitution. Si l'on
utilise la forme >(liste), l'écriture dans le fichier
fournira des entrées pour la liste. Si la forme <(liste)
est utilisée, le fichier passe en argument devra être lu
pour obtenir la sortie de la liste.
Sur les systèmes qui le permettent, la substitution de
processus est effectuée simultanément au remplacement des
paramètres et variables, a la substitution de commande, et
à l'évaluation arithmétique.
GNU 20 Janvier 1999 26
BASH(1) Manuel de l'utilisateur Linux BASH(1)
Séparation des mots
Les résultats du remplacement des paramètres, de la sub
stitution 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 trans
formations précédentes en fonction de ceux-ci. Si la
valeur du paramètre IFS est exactement <espace><tabula
tion><retour-chariot>, (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 caractères blancs espace et tabulation sont
ignorées en début et fin de mot, à condition que ces car
actères blancs se trouvent dans la valeur de IFS. 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. IFS ne peut pas être détruit.
Les arguments nuls explicites ("" ou '') sont conservés.
Les arguments nuls implicites, résultant du développement
des paramètres n'ayant pas de valeurs, sont éliminés.
Notez que si aucun développement n'a lieu, le découpage
des mots n'est pas effectué.
Développement des noms de fichiers
Apres le découpage des mots, et si l'option -f n'est pas
indiquée, bash recherche dans chaque mot les caractères *,
?, et [. Si l'un d'eux apparaît, le mot est considéré
comme un motif, et remplacé par une liste, classée par
ordre alphabétique, des noms de fichiers correspondant à
ce motif. Si aucun nom de fichiers ne correspond, et si
la variable allow_null_glob_expansion n'existe pas, le mot
reste inchangé. Si la variable existe, et si aucune cor
respondance n'est trouvée, le mot est éliminé. Quand un
motif est utilisé pour créer des chemins d'accès, le car
actère ``.'' au début d'un nom, ou immédiatement à la
suite d'un slash doit être explicitement mis en correspon
dance, à moins que la variable shell glob_dot_filenames
n'existe. Dans tous les autres cas, le caractère ``.''
n'est pas traité spécifiquement. Le caractère slash doit
toujours être mis en correspondance explicitement.
Les caractères spéciaux ont les significations suivantes :
* 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
GNU 20 Janvier 1999 27
BASH(1) Manuel de l'utilisateur Linux BASH(1)
"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 - ou un ]
peuvent être mis en correspondance en les incluant
en premier ou dernier caractère de l'ensemble.
Suppression des protections
Après les développements précédents, toutes les occurences
non-protégées des caractères \, `, et " 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 nota
tion spéciale qui sera interprétée par le shell. Les redi
rections peuvent également servir à ouvrir ou fermer des
fichiers dans l'environnement actuel du shell. Les
opérateurs de redirection décrits ci-dessous peuvent appa
raitre avant, ou au sein d'une commande simple ou suivre
une commande. Les redirections sont traitées dans l'ordre
d'apparition de gauche à droite.
Dans les descriptions suivantes, si le numéro de descrip
teur 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 pre
mier caractère de l'opérateur est >, la redirection
s'appliquera à la sortie standard (descripteur de fichier
1).
Le mot qui suit l'operateur de redirection dans les
descriptions suivantes est soumis à l'expansion des acco
lades, du tilde, des paramètres, à la substitution de com
mandes, à l'évaluation arithmétique, à la suppression des
protections, et au développement des noms de fichiers.
S'il se modifie pour donner plusieurs mots, bash détectera
une erreur.
Remarquez que l'ordre des redirections est important. Par
exemple, la commande
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.
GNU 20 Janvier 1999 28
BASH(1) Manuel de l'utilisateur Linux BASH(1)
Redirection d'entrée
Le format général des redirections d'entrée est le suivant
:
[n]<mot
Lorsque l'on applique une redirection d'entrée, le fichier
dont le nom résulte du développement du mot sera ouvert en
lecture avec le descripteur de fichier numéro n, ou en
tant qu'entrée standard (descripteur de fichier 0) si n
n'est pas mentionné.
Redirection de sortie
Le format général des redirections de sortie est le suiv
ant :
[n]>mot
Lors d'une redirection de sortie, le fichier dont le nom
résulte du développement du mot est ouvert en écriture,
avec le descripteur de fichier n, ou en tant que sortie
standard (descripteur de fichier 1) si n n'est pas men
tionné. Si le fichier n'existe pas, il est créé. S'il
existait déjà, sa taille est ramenée à 0.
Si l'opérateur de redirection est >|, alors la valeur de
l'option -C de la commande interne set est ignorée, et une
tentative de création de fichier a lieu. (Voir la
description de noclobber dans le paragraphe Variables du
Shell plus haut).
Redirection pour Ajout en Sortie
Le format général pour la redirection de sortie avec ajout
est :
[n]>>mot
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 sor
tie standard (descripteur 1) si n n'est pas mentionné. Si
le fichier n'existe pas, il est créé.
Redirection de la sortie standard et de la sortie d'erreur.
Bash permet la redirection simultanée de la sortie stan
dard (descripteur 1) et de la sortie d'erreur (descripteur
2), dans un fichier dont le nom est le résultat du
développement du mot.
Il y a deux formes pour effectuer cette double redirection
:
&>mot
GNU 20 Janvier 1999 29
BASH(1) Manuel de l'utilisateur Linux BASH(1)
et
>&mot
On préfère généralement la première. Elle est sémantique
ment équivalente à
>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'acces, ni évalua
tion arithmétique sur le mot. Si l'un des caractères du
mot est protégé, l'étiquette est obtenue après suppression
des protections dans le mot, et les lignes du document ne
sont pas développées. Sinon, toutes les lignes du document
sont soumises au remplacement des paramètres, à la substi
tution de commandes, et à l'évaluation arithmétique. Dans
ce dernier cas, les couples \<retour-chariot> sont
ignorés, et \ doit être utilisé pour protéger les car
actères \, $, et `.
Si l'opérateur de redirection est <<-, alors les tabula
tions en tête de chaque ligne sont supprimées, y compris
dans la ligne contenant l'étiquette. Ceci permet d'inden
ter 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 le mot prend la forme -, le descripteur
n est fermé. Si n n'est pas mentionné, on utilise
l'entrée standard (descripteur 0).
L'opérateur
GNU 20 Janvier 1999 30
BASH(1) Manuel de l'utilisateur Linux BASH(1)
[n]>&mot
est utilisé de manière similaire pour dupliquer les
descripteurs de sortie. Si n n'est pas précisé, on con
sidère la sortie standard (descripteur 1). Un cas partic
ulier se produit si n est omis, et si mot ne se développe
pas sous forme de chiffres. Alors, les sorties standard et
d'erreurs sont toutes deux redirigées comme précédement.
Ouverture en Lecture/Écriture d'un descripteur de fichier
L'opérateur de redirection
[n]<>mot
ouvre à la fois en lecture et en écriture le fichier dont
le nom résulte du développement du mot, et lui affecte le
descripteur de fichier n, ou bien les entrée et sortie
standard si n n'est pas mentionné. Si le fichier n'existe
pas, il est créé.
FONCTIONS
Une fonction du shell mémorise une série de commandes pour
permettre une exécution ulterieure. La definition d'une
fonction est décrite plus haut, dans le paragraphe GRAM
MAIRE DU SHELL. Les fonctions sont exécutées dans le con
texte de l'interpréteur en cours. On ne crée pas de nou
veau processus pour interpréter une fonction, contraire
ment à l'exécution d'un script. Les arguments d'une fonc
tion sont placés dans les paramètres positionnels durant
son exécution. Le paramètre spécial # est mis a jour. Le
paramètre positionnel 0 n'est pas modifié.
La variables locales d'une fonction peuvent être déclarées
en utilisant la commande interne local. Autrement, les
variables et leurs valeurs sont partagées entre la fonc
tion et son appelant.
Si la commande interne return est exécutée dans une fonc
tion, celle-ci se termine et l'exécution reprend avec