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é.

posté le 4. novembre 2009 à 1:43 pm par info · Permalink
Catégories : Shell · Mots-clés: , ,

2 Réponses

Inscrivez-vous au fil RSS des commentaires

  1. Ecrit par florent
    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.

  2. Ecrit par admin
    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.

Inscrivez-vous au fil RSS des commentaires

Ajoutez un commentaire