Provided by:
manpages-fr_1.67.0-1_all 
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
incorpore é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
positionnels, 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
commande 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
termine 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
INVOCATION 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
évalutations 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
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 exécute ses fichiers
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 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’initialisation.
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
comportement 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éralement 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
SHELLOPTS est ignorée si elle apparaît dans l’environnement, et
l’identifiant 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émentaire 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
identificateur.
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
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
paragraphe 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 contrôle. 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.
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
commande. 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
pipeline 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
VariablesduShell 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
<retour-chariot>.
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
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. 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
respectivement 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
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 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
commande 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 #
permettra d’ignorer tous les caractères restants sur la ligne. Un
shell interactif sans l’option interactive-comments n’autorise pas les
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 certains caractères ou mots. Les
protections 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 <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 ê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
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, 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
positionnel. 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
modifier.
* Se développe en l’ensemble des paramètres positionnels,
commenç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
premier caractère de la variable spéciale IFS. Ceci signifie
que "$*" est équivalent à "$1c$2c...", dans laquelle c est le
premier 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,
commenç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
positionné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
argument 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émarrage 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
écriture.
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
(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).
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
nombres 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écessairement 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ésentant le contenu courant de la pile de répertoires. Les
répertoires 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épertoires. 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’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.
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
découper les lignes en mots avec la commande interne read. La
valeur par défaut est ‘‘<espace><tabulation><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 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
variable 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
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 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
commandes(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
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é à cette taille après écriture quand un shell interactif
se termine.
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 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_
indiquant la localisation.
LC_COLLATE
Cette variable détermine l’ordre des lettres 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.
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
nombre 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 terminateur 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
suffixe correspond à l’un de ceux mentionnés dans FIGNORE est
exclu 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’expansion, 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
correspondre en entier (il n’y a pas d’ajout de ‘*’ implicite).
Chaque motif est comparé à chaque ligne après que les
vérifications 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
(normalement ‘!’). 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’historique 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Ã
existantes.
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
correspondre à 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 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
COMMANDES 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
conflits 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écessairement. 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ésultats 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
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. 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
compatibilité 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
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 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
question.
Si le préfixe tilde est ‘+’, la valeur du paramètre shell PWD le
remplace. Si le préfixe tilde est ‘-’, la valeur du paramètre shell
OLDPWD 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 caractères à la suite du tilde dans le préfixe tilde
représentent un nombre 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,
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.
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
commande 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
variable. 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
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.
${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’expansion 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
portions 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
positionnels 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
remplaç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
commande $(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
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 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
<espace><tabulation><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 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
correspondant à 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édiatement à la suite d’un slash doit être explicitement mis en
correspondance, à 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écifiquement. 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
GLOBIGNORE. 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’ensemble.
Entre [ et ], on peut indiquer une classe de caractère en
utilisant la syntaxe [:classe:], où classe est l’une des classes
suivantes, définies dans 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
utilisant la syntaxe [=c=], qui correspond à n’importe quel
caractè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
redirections 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
suivantes est soumis à l’expansion des accolades, du tilde, des
paramètres, à la substitution de commandes, à 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.
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
descripteur 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
Redirection de sortie
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 mentionné. Si le fichier n’existe pas, il est créé. S’il
existait déjà , sa taille est ramenée à 0.
Le format général des redirections de sortie est le suivant :
[n]>mot
Si l’opérateur de redirection est >, et si l’option noclobber de la
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
redirection 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
(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 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
é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’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
document ne sont pas développées. Sinon, toutes les lignes du document
sont soumises au remplacement des paramètres, à la substitution 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 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
correspondent 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
mentionné, 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
remplacement 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
remplacement 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
fonction 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éfinition 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
remplacé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
fonctions 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’expressions arithmétiques (voir la commande interne let ainsi que le
paragraphe Évaluation Arithmétique). L’évaluation est effectuée en
utilisant 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écroissante.
- + 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éveloppement 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
lexicographique 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
lexicographique 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,
suivants.
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
commande 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
commande, à l’évaluation arithmétique et à la suppression des
protection 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
concerne une variable en lecture seule, une erreur se produit, et la
commande 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
fonction 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
COMMANDES 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éinitialisera 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
contraire, les valeurs sont héritées de l’environnement du shell.
· les fichier ouverts du shell, auxquels s’ajoutent les
modification 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
environnement 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
environnement. 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’ancienne. L’environnement hérité par les commandes exécutées est
l’environnement 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
augmenté temporairement en la faisant précéder d’une affectation de
paramètre, comme nous l’avons vu au paragraphe PARAMÈTRES. Ces
affectations 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’environnement 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éveloppement 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
processus 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
processus arrête celui-ci, et redonne la main à bash. La frappe d’un
caractè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
utilisant 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
correspond à 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 commande 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
synonyme 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.
Normalement 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
permettent 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,
évaluation 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.
Parfois, 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 commandes 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
accumulent 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
variable 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’
constructions 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
constructions 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
caractè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
universal-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
apostrophes 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
visible, 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-comment 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
caractè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
affectations 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
commandes.
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
verticalement.
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
exemple 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
affectations 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,
termine 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émental.
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-
terminators 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
correspondant 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’historique. 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émentale.
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
commande 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
circulaire.
forward-backward-delete-char
Effacer le caractère sous le curseur, sauf s’il est en fin de
ligne, auquel cas le caractère 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
backward-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
nouveau 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
nouvel 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
multiplié 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
successivement le texte comme une variable (s’il commence par
$), un nom d’utilisateur (s’il commence par ~), un nom d’hôte
(s’il commence par @), ou une commande (y compris les alias et
les fonctions). 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’utilisateurs 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-<space>)
Placer une marque à la position actuelle. Si un argument
numérique est fourni, la marque est posée à l’emplacement
correspondant.
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
suivante de ce caractère. Un argument négatif recherche les
occurrences 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
commentaire 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
commandes (par défaut 500) est mémorisé dans l’historique. Le shell les
enregistre avant expansion des paramètres et variables (voir le
paragraphe EXPANSION plus haut) mais après avoir effectué l’expansion
historique, 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).
HISTFILE 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
écriture, l’historique n’est pas enregistré. Après la sauvegarder, le
fichier d’historique est tronqué pour ne pas contenir plus de
HISTFILESIZE 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’historique 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
interactifs, 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’expansion 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’insertion 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
lecture 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
apostrophes permettent de protéger le caractère d’échappement de
l’historique, 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
substitution d’historique qui échoue est rechargée dans la mémoire
tampon de readline pour correction. L’option -p de la commande interne
history peut servir à examiner ce qu’une substituion donnera avant de
l’employer réellement. L’option -s de la commande interne history
permet 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écanisme 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,
simplement 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/nouveau/’) 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
travail 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
significations suivantes :
-m jeu_de_touches
Modifier la configuration du jeu_de_touches indiqué. Les
noms des jeux_de_touches acceptés sont emacs, emacs-
standard, 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
readline
-p Affiche les noms des fonctions readline et leurs
affectations de manière à pouvoir les relire.
-P Affiche les noms des fonctions readline et leurs
affectations.
-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 Ã
pouvoir 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
fonction.
-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,
sortir 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
commande 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
contenant 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 symboliques (voir aussi l’option -P de la commande
interne set plus bas). L’option -L force le suivi des liens
symboliques. Un argument - 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
simplifiant 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
garantissant 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’environnement.
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
lecture-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épertoires 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
commenç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
commenç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
actifs. 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
simple. 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
commande avec un environnement vide. Si l’option -a est
indiquée, le shell transmet le nom comme zéro-ième argument. Si
la commande 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
redirection, 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
automatiquement 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
commandes, 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
commande 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
commande 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 utilisé 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
argument, qui peut en être séparé par une espace. A chaque
invocation, 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 argument, 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
premier caractère de la chaîne_d_options est un deux-points, les
erreurs sont renvoyées de manière silencieuse. Lors d’un
fonctionnement 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
caractè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
commandes 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
lister 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
significations 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
session actuelle de bash.
-r Lire le contenu du fichier, et l’utiliser comme
historique 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
processus 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’évaluation du dernier argument donne 0, let renvoie 1, sinon
elle renvoie 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
visible que dans la fonction, et ses descendantes. Sans
opérandes, local affiche la liste des variables locales sur la
sortie standard. 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
formats standards de printf(1), %b demande à printf de
développer les séquences d’échappement se trouvant dans
l’argument correspondant , 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écifications 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éplacement 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
commande 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
second 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
significations suivantes :
-r Le basckslash n’est pas un caractère d’échappement. Il
est considéré comme faisant partie de la ligne. En
particulier 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
variable 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
bibliothè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
correspondant à ces noms. L’option -a restreint l’action aux
variables 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
GRAMMAIRE 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
saisis 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
terminent.
-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
interactifs.
-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émarrage 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
commande.
-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
termine 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
existant 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
interactif.
-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
contraire. En utilisant + à la place de - on désactive
explicitement 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
modifié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’indication 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
inactives, 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
corrigé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épertoire corrigé est affiché, et la commande est
exécuté. Cette option n’est utilisé que par les shells
interactifs.
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
commande et, au besoin, mettra à jour les valeurs des
variables LINES et COLUMNS.
cmdhist Lorsque cette option est active, bash essaiera de
sauvegarder 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
utilisateur 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
permettant des modifications ultérieures.
hostcomplete
Si la bibliothèque readline est en service, bash
essayera d’assurer la complétion des noms d’hôtes
lorsqu’un mot contient un @ (voir Completion au
paragraphe READLINE 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’évaluation 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
suivant, 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
premier argument est l’un des opérateurs conditionnel
unaires décrits plus haut au paragraphe EXPRESSIONS
CONDITIONNELLES l’expression est vraie si le test unaire
est vrai. Si le premier argument n’est pas un opérateur
conditionnel unaire; l’expression est fausse.
3 arguments
Si le second argument est l’un des opérateur
conditionnels 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
argument 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
originaux (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 comportement pour chacun des sigspec est affiché. Si aucun
argument n’est fourni, ou si l’option -p est seule, trap affiche
les commandes associées avec chaque signaux. Les signaux
sigspec peuvent être spécifié en indiquant des noms de signaux
définis dans <signal.h>, 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 correspondants. 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
table 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
arguments 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
nombre (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
limite souple peut être augmentée jusqu’à la hauteur de la
limite dure correspondante. Par défaut, les limites fixées sont
souples. 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
(parfois 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,
SECONDS, LINENO, HISTCMD, ou DIRSTACK est supprimée, elle perd
ses propriétés spécifiques, même s’il elle est recréée
ultérieurement. 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
permet 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
Utilities, 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éellement 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
suggestions, ou les remarques d’ordre ‘philosophique’ peuvent être
transmises à 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écifications 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
parenthèses pour la forcer à créer un sous-shell, qui, lui, sera
interruptible 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
messages d’erreurs pendant un certain temps après la frappe de la
commande.
Les variables de type tableau ne peuvent pas (encore) être exportées.
TRADUCTION
Christophe Blaess 1997-2003.