Coloration du shell (bash)

Décembre 2016



Pourquoi le faire?


En personnalisant la couleur des caractères de l'invite (ou du shell), vous la rendez plus lisible. Si vous adoptez une convention de couleurs, vous pouvez transmettre du sens selon la couleur, ce qui évite d'avoir une invite trop longue.

Quelles informations peuvent être transmises par les couleurs?


Vous pouvez afficher l'invite en vert pour une première machine hôte et en bleu pour une autre, ou bien en vert si le système n'est pas chargé, en jaune s'il l'est un peu et en rouge si presque toutes les ressources sont utilisées. Ou plus simplement, vous choisissez une couleur pour une invite root, une autre pour une MC ...

Les techniques


Deux techniques sont possibles. La plus utilisée (mais pas la plus efficace) consiste à insérer des caractères d'échappement (ils ont une signification spéciale pour l'interpréteur). La chaîne suivante affiche l'invite en bleu:
$ PS1="\[\033[0;34m\][\u@\h]\[\033[0m\]"
Cette méthode souffre de deux inconvénients: sa syntaxe est peu lisible, donc sujette aux erreurs de saisie, et elle n'est utilisable que si la fenêtre de terminal supporte les séquence d'échappement ANSI, ce qui n'est pas le cas de beaucoup de terminaux, ni de logiciels d'émulations de terminaux. Adoptez plutôt la technique se basant sur tput.

Technique de tput


Lorsque vous colorisez l'invite (ou le shell) avec tput, vos définitions sont portables vers d'autres émulateurs de terminaux. tput sait quelles séquences d'échappement sont à utiliser, ce qui vous épargne cette fastidieuse recherche.
$ BLUE=$ (tput setaf 4)
$ BLACK=$ (tput setaf 0)
$ PS1="\ [$BLUE\] \u@\h] \ [$BLACK\] "
Etudions ces lignes:
La première ligne de l'exemple exploite tput pour définir une variable qui contient la séquence de caractères pour forcer la couleur de premier plan en Bleu (pour les prochains caractères à afficher). La deuxième ligne fait de même pour le noir. Il devient inutile de connaître les séquences d'échappement, puisque tput gère un fichier de correspondance des descriptions pour tous les terminaux, fichier qu'il consulte pour trouver la séquence appropriée au terminal physique ou émulé. La troisième ligne, enfin, utilise les deux variable $BLUE et $BLACK dans la définition de la variable d'invite $PS1.
Mais tput peut faire bien plus que coloriser les caractères de l'invite.

NB: Vous pouvez afficher la liste complète par les commandes man tput et man terminfo.

A voir également :

Ce document intitulé «  Coloration du shell (bash)  » issu de CommentCaMarche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.