la couleur en shell
Hier, lors de mon intervention sur les scripts shell dans le cadre de la Licence Pro AdmiSys, l’un des étudiants s’est intéressé à la problématique de la couleur dans une console texte ; voici donc ce qu’il en est ressorti …
Dans les faits, son souci était en fait de coloriser le message d’invite du shell : il lui faudra donc modifier la définition de la variable d’environnement PS1 pour parvenir à ses fins ; mais avant d’en arriver à formaliser cette modification, faisons juste un petit tour du propriétaire.
Aux origines d’Unix, le poste de travail était généralement un terminal texte relié au système par un port série.
Le comportement de ces terminaux a fait l’objet de normalisations successives : normes ANSI VT100, VT 200, etc… Ces normes prévoyant des séquences de caractères codifiées permettant de configurer les terminaux, et notamment les séquences dites d’échappement (nommées ainsi car elles débutaient par le caractères ASCII ESC (0x27). Or, il s’avère que les descendants logiciels de ces terminaux, c’est à dire les pseudo-terminaux linux ou autres consoles X répondent encore aujourd’hui à ces séquences, et c’est leur utilisation qui nous permettra d’utiliser la couleur dans des scripts.
Le changement de couleur s’opère donc en transmettant au terminal une séquence de la forme :
<ESC>[{attr1};…;{attrn}mdans lesquelles les valeurs les plus courantes des attributs sont les suivantes :
Contrôle | Couleurs de fond : | Couleurs des caractères | |||
0 | Ràz de tous les attributs | 30 | noir | 40 | noir |
1 | brillance | 31 | rouge | 41 | rouge |
2 | Dim | 32 | vert | 42 | vert |
4 | soulignement | 33 | vert | 43 | vert |
5 | soulignement | 34 | jaune | 44 | jaune |
7 | vidéo inversée | 35 | magenta | 45 | magenta |
8 | caché | 36 | cyan | 46 | cyan |
37 | blanc | 47 | blanc |
Pour une liste plus exhaustive de ces séquences, vous pouvez vous référer à ce document.
Ainsi pour basculer le terminal en écriture rouge, on pourra donc simplement faire :
echo -e “\033[31m”
et, à l’identique, en vert vidéo inversée :
echo -e “\033[7;31m”
pour revenir aux valeurs par défaut :
echo -e “\033[0m”
Note : l’atribut -e de la commande echo sert à interpréter les caractères dé-spécifiés par un anti-slash.
Au final, pour modifier notre variable PS1 afin d’obtenir le nom d’utilisateur en rouge et le nom de la machine en vert, suivi d’un tilde en bleu :
PS1=’\[\033[00m\]\[\033[31m\]\u\[\033[00m\]@\[\033[32m\]\h\[\033[00m\]:\[\033[34m\]\w\[\033[00m\]\[\033[00m\]\$’
Syntaxe dans laquelle les caractères \[ et \] représentent les marqueurs de début et fin de séquences de caractères non imprimables.
Pour pérenniser cette “customisation” de l’invite de commande, il faudra bien évidemment ajouter cette définition dans l’un des fichiers de configuration du shell, soit /etc/profile si l’ensemble des utilisateurs du système doivent en profiter, ou ~/.bashrc pour ne modifier le message d’invite que pour un utilisateur donné.
Catégories : Shell · Mots-clés: ANSI VT100, séquence d'échappement, variable d'environnement
de 22/04/2010 à 12:14 pm
Permalink
Très intéressant tout ça, cependant une petite remarque : le titre s’affiche mal sous Iceweasel… “Pérégrinations informatiques” s’affiche sur deux ligne et se chevauche avec le titre de l’article. Par contre sous Epiphany ça marche bien.
de 22/04/2010 à 2:35 pm
Permalink
Comme quoi, deux navigateurs libres, peuvent avoir un rendu différent … Ce n’est pas l’apanage de l’infâme série IE !!!
J’ai donc diminué la taille de la police dans la feuille de style de ce thème standard de WordPress.