Si vous donnez à login
une combinaison valide de nom d'utilisateur
et de mot de passe, il ira regarder dans /etc/passwd
pour savoir
quel shell vous donner. La plupart du temps, dans un système Linux, ce sera
bash
. Le travail de bash
consiste à lire vos commandes et
voir ce sur quoi elles agissent. C'est à la fois une interface utilisateur,
et l'interpréteur d'un langage de programmation.
Dans son rôle d'interface, il lit vos commandes, et les exécute lui-même si
ces commandes sont ``internes'', comme cd
, ou bien trouve et
exécute un programme s'il s'agit de commandes ``externes'' comme cp
ou startx
. Bash propose également plusieurs options fort
sympathiques comme un historique des commandes, ou le complètement automatique
des noms de fichiers (avec la touche de tabulation).
Nous avons déjà vu bash
à l'action dans son rôle de langage de
programmation. Les scripts qu'init
lance pour démarrer le système
sont généralement des scripts shell, et sont exécutés par bash
.
Avoir un langage de programmation propre, parallèlement aux utilitaires
systèmes disponibles depuis la ligne de commande forme une combinaison très
puissante, si vous savez ce que vous faites. Par exemple ("séquence frime" !)
j'ai eu besoin l'autre jour d'appliquer une pile entière de correctifs (patches) à
un répertoire de codes source. J'ai été capable de le faire en une seule
commande, la suivante :
for f in /home/greg/sh-utils-1.16*.patch; do patch -p0 < $f; done;
Ceci recherche tous les fichiers de mon répertoire personnel dont
les noms commencent par sh-utils-1.16
et finissent par
.patch
, puis affecte un par un ces noms à la variable f
et
exécute les commandes invoquées entre do
et done
. Il y
avait en l'occurence 11 correctifs, mais il aurait pu aussi bien y en avoir
3000.
Le fichier /etc/profile
agit sur le comportement de bash au niveau
du système entier. Ce que vous mettez dans ce fichier affectera toute
personne qui utilise bash sur votre système. Cela sert par exemple à ajouter
des répertoires dans la variable PATH
, ou à définir celui de la
variable MAIL
.
Le comportement par défaut du clavier laisse souvent à désirer. En fait,
c'est readline qui contrôle cela. Readline est un package distinct qui
prend en main les interfaces de ligne de commande, en fournissant
l'historique des commandes, et le complètement automatique de noms de fichiers
(NDT : Touche TAB sous Bash), tout comme les facilités évoluées d'édition de
ligne. Il est compilé dans bash. Par défaut, Readline est configuré à
l'aide du fichier .inputrc
, dans votre répertoire personnel. La
variable INPUTRC peut être utilisée pour outrepasser les règles de ce
fichier pour le bash. Par exemple, dans Red Hat 6, INPUTRC
reçoit
la valeur /etc/inputrc
dans le fichier /etc/profile
. Cela
signifie que les touches Retour Arrière (Backspace), Suppr (Delete), Début
(Home) et Fin (End) fonctionnent correctement et pour tout le monde.
Une fois que bash a lu le fichier de configuration général, commun au
système entier, il recherche votre fichier de configuration personnel. Il
teste l'existence des fichiers .bash_profile
, .bash_login
et .profile
dans votre répertoire personnel. Il lance le premier
qu'il trouve. Si vous voulez modifier le comportement de bash à votre égard,
sans le changer pour les autres, faites-le ici. Par exemple, de nombreuses
applications utilisent les variables d'environnement pour contrôler leur
fonctionnement. J'ai une variable EDITOR
contenant la valeur
vi
pour pouvoir utiliser vi sous Midnight Commander (un excellent
gestionnaire de fichier orienté console) au lieu de son éditeur propre.
Les bases de bash sont faciles à apprendre. Mais ne vous y limitez pas : on peut aller incroyablement loin avec. Prenez l'habitude de rechercher de meilleures façons de faire les choses.
Lisez des scripts shell, analysez les choses que vous ne comprenez pas.