|
|
Ce document est disponible en: English ChineseGB Deutsch Francais Nederlands Russian Turkce Polish |
par Nico Golde <nico/at/ngolde.de> L´auteur: À l'heure actuelle, Nico est encore étudiant. Depuis quelques années, il s'est beaucoup impliqué dans le monde de Linux, notamment en prenant part à un certain nombre de projets Open Source. Traduit en Fran�ais par: Guillaume Baudot <guillaume.baudot /at/ caramail.com> Sommaire: |
Le shell en couleur : du bon usage des codes couleur ANSIRésumé:
Dans un terminal compatible ANSI (comme xterm, rxvt, konsole...), il est
parfaitement possible de présenter du texte autrement qu'en noir et blanc.
Cet article vous montrera comment afficher vos textes en gras ou en
couleurs.
|
Dans son utilisation quotidienne, tout utilisateur est confronté à un moment ou un autre au shell. Au premier abord, cela peut sembler plutôt ennuyeux, mais les possibilités sont nombreuses pour agrémenter ce dernier d'une touche personnelle. Rien qu'en ajoutant de la couleur à l'invite de commande, on peut personnaliser le shell tout en améliorant sa lisibilité.
Dans cet article, j'utilise Bash comme shell de référence. La séquence d'échappement peut différer en fonction des terminaux : nous nous en tiendrons ici au classique terminal ANSI.
La mise en en couleur du Shell se fait en modifiant le fichier personnel de configuration de bash ~/.bashrc, voire le fichier global de configuration /etc/bashrc. L'apparence de l'invite de commande est modifiée avec la variable PS1 de bashrc.
Le plus souvent, cette variable se présente ainsi :
~/.bashrc: PS1="\s-\v\$ "\s affiche le nom du shell, et \v son numéro de version. On rajoute ensuite un $ à la fin de l'invite. L'intérêt étant tout relatif, la plupart des distributions mettent en place une invite qui ressemble à ceci : ~/.bashrc: PS1="\u@\h \w \$ " |
L'invite de commande affiche alors "utilisateur@hôte répertoire-courant $", ce qui devrait sembler familier à la plupart des utilisateurs de Linux.
Pour ajouter une touche de couleur à l'invite, nous utiliserons une séquence d'échappement : il s'agit d'une instruction de contrôle qui indique au shell une opération spécifique à exécuter. En général, une telle instruction commence par ESC, d'où son nom. Cette séquence s'affiche dans le shell sous la forme ^[. Pour vous familariser un peu avec la syntaxe, apprenez que \033 est équivalent : le code ASCII de ESC est 27 en décimal, soit 33 en base octale.
Pour entrer une séquence d'échappement dans le shell, elle doit être précédée de ctrl-v : CTRL-v ESC.
Comme un bon exemple vaut souvent mieux qu'un long discours, nous n'allons pas déroger à la règle.
~/.bashrc: PS1="\[\033[0;32;40m\u@\h:\w\$ \]"
Cela affiche la totalité de l'invite du shell en vert, comme ci-dessous :
nico@ebrain:~$ |
\033 indique une séquence d'échappement, puis le [ marque le début de la définition de couleur. Le 0 qui suit correspond à la police par défaut (je reviendrais dessus plus tard). La chaîne est placée entre des crochets (\[ et \]) pour éviter qu'elle ne s'affiche dans le shell et prenne trop d'espace.
Nous définissons ensuite la couleur des caractères (32, soit vert) puis la couleur de fond (40, du noir). Pour ne pas que le texte qui suit l'invite s'affiche aussi en vert sur fond noir, on refermera la séquence d'échappement avec \033[0m, ce qui correspond à la couleur par défaut du shell. Pour le fond comme pour les caractères, 8 couleurs sont disponibles.
Couleur | Texte | Arrière-plan |
---|---|---|
Noir | 30 | 40 |
Rouge | 31 | 41 |
Vert | 32 | 42 |
Jaune | 33 | 43 |
Bleu | 34 | 44 |
Magenta | 35 | 45 |
Cyan | 36 | 46 |
Blanc | 37 | 47 |
Un nouvel exemple :
~/.bashrc: PS1="\[\033[0;37;44m\u@\033[0;32;43m\h:\033[0;33;41m\w$\033[0m\]"
Cela donne une invite des plus colorées, comme vous pouvez le constater :
|
Pour faire vos tests, vous utiliserez la commande export PS1="chaîne", et une fois satisfait, vous pourrez intégrer cette variable dans .bashrc. Actuellement, mon invite de commande est configurée comme suit :
PS1="\[\033[1;34;40m[\033[1;31;40m\u@\h:\w\033[1;34;40m]\033[1;37;40m $\033[0;37;0m\] "
[ nico@ebrain:~ ] |
Comme indiqué plus haut, le zéro après la première séquence d'échappement précise le format de la police à utiliser. Les valeurs significatives sont 0, 1, 21, 4, 24, 5, 25, 7, 27 et ont respectivement pour effet : normal, gras, non gras, souligné, non souligné, clignotant, non clignotant, inversé, non inversé.
Pour vous aider à mieux comprendre les combinaisons possibles, voyez ce que donne l'exécution du script ci-dessous :
#!/bin/sh ############################################################ # Nico Golde <nico(at)ngolde.de> Homepage: http://www.ngolde.de # Last change: Mon Feb 16 16:24:41 CET 2004 ############################################################ for attr in 0 1 4 5 7 ; do echo "----------------------------------------------------------------" printf "\t\t- ESC[%s;Foreground;Background -\n" $attr for fore in 30 31 32 33 34 35 36 37; do for back in 40 41 42 43 44 45 46 47; do printf '\033[%s;%s;%sm %02s;%02s ' $attr $fore $back $fore $back done printf '\033[0m\n' done done
Vous pourrez télécharger ce script sous forme d'archive compressée à cette adresse : showansicol.tar.gz.
N.d.T. : vous pouvez tout aussi bien faire un copier/coller du script présent sur cette page et auquel j'ai apporté une légère modification d'ordre esthétique.
La possibilité qui nous est offerte de définir les couleurs du shell ne sert pas qu'à embellir l'invite de commande, cela peut être tout aussi utile si vous développez des programmes en mode console.
Pour introduire de la couleur dans vos programmes, il vous faudra faire appel à des bibliothèques comme slang ou ncurses, ce qui n'est pas sans incidence sur la taille des exécutables. Ncurses présente l'avantage d'être plus ou moins indépendant du type de terminal.
Le classique "Hello World" en vert :
#include <stdio.h> int main(void){ const char *const green = "\033[0;40;32m"; const char *const normal = "\033[0m"; printf("%sHello World%s\n", green, normal); return 0; }
Une autre séquence d'échappement bien utile est \033[2J. La commande printf("\033[2J") a le même effet que system(clear), mais avec cet avantage de ne pas nécessiter l'inclusion du fichier unistd.h.
Ou encore, la commande printf("\033[1K") efface une ligne.
Les scripts de démarrage présents dans /etc/init.d signalent traditionnellement par un '.' le fait que le service concerné a été correctement lancé. Il est bien plus élégant d'afficher un message intelligible et, pourquoi pas en couleur, avec l'aide d'une séquence d'échappement (comme c'est dorénavant le cas dans la plupart des distributions).
Voici un extrait du script /etc/init.d/cron :
#!/bin/sh # Start/stop the cron daemon. test -f /usr/sbin/cron || exit 0 case "$1" in start) echo -n "Starting periodic command scheduler: cron" start-stop-daemon --start --quiet --exec /usr/sbin/cron echo "." ;;
Un démarrage réussi de cron est indiqué par un point. Il suffit de changer la ligne commençant par echo pour afficher un superbe [OK] en couleur, comme ceci :
#!/bin/sh # Start/stop the cron daemon. test -f /usr/sbin/cron || exit 0 case "$1" in start) echo -n "Starting periodic command scheduler: cron" start-stop-daemon --start --quiet --exec /usr/sbin/cron echo "\[ \033[1;34;40m[ \033[1;32;40mOk \033[1;34;40m]\033[0m\]" ;;
Appliquer manuellement cette modification à tous les scripts init peut toutefois s'avérer long et fastidieux.
Vous avez des réactions et autres critiques à émettre, vous avez trouvé un bug ?.. Envoyez un mail à "nico(@)ngolde.de". Et amusez-vous bien !
Site Web maintenu par l´équipe d´édition LinuxFocus
© Nico Golde "some rights reserved" see linuxfocus.org/license/ http://www.LinuxFocus.org |
Translation information:
|
2005-01-21, generated by lfparser version 2.52