11. Bash

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 interpréteur de commandes 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 la capacité de finir automatiquement les noms de fichiers que vous entrez (lorsque vous utiliser la touche Tab).

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 l'invite 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 à 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'occurrence 11 correctifs, mais il aurait pu aussi bien y en avoir 3000.

11.1. Configuration

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 paquet distinct qui prend en main les interfaces de ligne de commande, en fournissant l'historique des commandes, et la capacité à terminer automatiquement de noms de fichiers, 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. Ce qui signifie que les touches Effacement arrière, Suppr, Début et Fin 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 propre éditeur.

11.2. Exercices

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.

11.3. Aller plus loin