Avant de commencer à modifier notre shell, on va essayer de comprendre comment ça se passe. :)
Tout d'abord, qu'est-ce qu'un shell :) ?
Le shell est un logiciel fournissant une interface pour un utilisateur. Il peut prendre la forme d'une interface graphique, ou d'une interface en ligne de commande.
Pour ce tuto, nous allons utiliser bash qui est un interpréteur de commande. Le bash est un shell très utilisé sous Unix (Unix englobe Linux, Mac et BSD voir wiki). Il est extrêmement populaire, rapide, puissant et simple à utiliser. Il existe d'autres shells, mais je n'aborderai que le bash dans ce tuto.
Nous allons nous intéresser à un fichier qui se nomme .bashrc. Ce fichier est un fichier bash. Un fichier bash est un fichier qui contiendra une suite de commandes bash à exécuter.
Donc, notre fichier .bashrc est un fichier bash, mais il est un peu spécial. En effet, il est exécuté automatiquement à chaque fois que vous lancerez un shell.
C'est dans ce fichier que nous allons modifier la couleur de notre shell. Pour ceci, nous allons utiliser une variable contenant une chaîne de caractères qui "dira" au shell comment les couleurs doivent être appliquées.
Cette variable se trouve dans notre fichier .bashrc que l'on modifiera tout à l'heure.
Mais avant de commencer, il faut savoir que le changement de couleur ne se fait pas comme en (x)HTML ou en CSS ;) . On va ici travailler avec des nombres : chaque nombre représentera une couleur spécifique, quelques nombres peuvent aussi modifier le style de notre texte.
Voici 3 tableaux qui nous seront bien utiles :
Texte :
Nombre
Couleur
30
Noir
31
Rouge
32
Vert
33
Orange
34
Bleu
35
Magenta
36
Cyan
37
Blanc
Fond :
Nombre
Couleur
40
Noir
41
Rouge
42
Vert
43
Orange
44
Bleu
45
Magenta
46
Cyan
47
Blanc
Bonus texte :
Nombre
Effet
01
Gras
04
Sous-ligné
05
Clignotant
07
Sur-ligné
Tout ceci est un peu confus ? Vous vous demandez ce que l'on va pouvoir faire avec ces nombres ? Le concept est un peu complexe mais la pratique en est toute autre, vous en saurez plus par la suite ;) .
Bien : avant de modifier quoi que ce soit, il faut d'abord choisir en quoi on va le modifier (vous me suivez ;) ? ).
Nous allons commencer par modifier le prompt. Le prompt est l'invite qui se place en début de ligne lorsque vous ouvrez un shell ; hum, par exemple lorsque j'ouvre konsole, je vois ceci :
[diablo@Diablo:~]$
Mais qu'est-ce ?
Eh bien c'est tout simplement une invite, il se place ici pour vous dire que vous avez la main, il attend vos ordres, bon petit invité, donne la papate :p .
Bien. On va essayer de comprendre sa structuration, on va le décomposer en 1, 2, 3, 4, 5, 6, 7, 8, 9 parties ^^ . Oui, je sais, je suis un peu gourmand :p .
Voici les parties que j'ai choisies :
1 - le premier "[" ;
2 - le nom d'utilisateur, ici "diablo" ;
3 - le signe "@" qui signifie, "chez" ;
4 - le nom de la machine, ici "Diablo" ;
5 - le signe ":", il ne signifie rien en soi, il est juste là pour la séparation avec le 6 ;
6 - le répertoire courant, ici "~" signifie le home, aurait pu être "~/Ma musique" ou "/UnAutreDossier" par exemple ;
7 - le deuxième crochet "]" ;
8 - le signe "$", il indique le statut de l'utilisateur, il peut être soit $ (utilisateur normal), ou # pour le supra-utilisateur (root) ;
9 - la fin de notre invite, juste penser à remettre la couleur en noir.
Mais cette disposition n'est pas un fruit du hasard ; en effet, c'est une variable spéciale (PS1) qui définit sa structure. La variable PS1 est une variable contenant une chaîne de caractères dans laquelle nous allons organiser comme bon nous semble notre shell.
On va d'abord résumer la contenu de la variable PS1. Pour l'instant, notre variable PS1 doit contenir à peu près ceci : [\u@\h:\w]\$ . Ce qui nous donne le code bash.
Bash
PS1='[\u@\h:\w]\$ '
On peut aisément ( :p ) deviner la signification de cette chaîne de caractères. On remarque donc certains signes spéciaux :
le \u signifie l'utilisateur ;
le \h signifie le nom de la machine (hostname) ;
le \w, c'est le répertoire courant ;
et le \$ le signe du statut de l'utilisateur.
On a donc un crochet ouvrant, suivi du nom de l'utilisateur, puis un signe arobase, le nom de la machine, le signe :, le répertoire courant, puis un crochet fermant et un petit signe ($ ou #).
Maintenant, on va voir comment modifier la couleur d'un élément. Pour ce faire, il suffit de précéder l'élément à modifier d'un code contenant la couleur choisie (revoyez la partie précédente pour les codes couleurs ;) ).
On va faire des tests à la volée en utilisant la commande echo qui affichera directement le résultat.
Pour spécifier la couleur d'un texte, on procède de la manière suivante.
On écrit \033, on met un crochet ouvrant [, puis on met le code de la couleur choisie (ici, 31 signifie rouge) et on finit avec un m. On affiche notre texte, ici Hello, puis on remet la couleur à noir (\033[00m), sinon le reste sera écrit en rouge aussi. :)
Cette syntaxe est comme ça, je ne l'ai pas choisie, je ne vois pas de logique, pourquoi un \033 et un m plutôt qu'autre chose, mais c'est comme ça, et tant que ça marche, on est content !
En écrivant ceci dans un shell et en appuyant sur <Entrée pour valider, un Hello devrait s'afficher sous votre invite.
Si ce n'est pas le cas, essayez ceci :
eval "`dircolors -b`"
Cette commande devrait activer la colorisation dans votre shell, et essayez à nouveau la commande echo -e "\033[31mHello\033[00m".
Bien ! Vous savez à présent mettre de la couleur dans votre shell, on va pouvoir modifier le prompt !
Pour faire ce que nous voulons, nous aurons besoin de vim, un éditeur de fichier en ligne de commande.
Pour vérifier que vous avez vim, tapez ceci dans un shell :
[root@Diablo:~]# which vim
/usr/bin/vim
[root@Diablo:~]# which vi
/usr/bin/vi
Si à l'issue des deux essais, rien ne s'affiche (très rare !) c'est que vous ne possédez pas vim :( ; dans ce cas : - soit vous l'installez (il peut être très très très utile) ; - soit vous utiliserez un autre éditeur graphique comme Kate, Gedit ou Kwrite (ou autre ;) ).
On va ensuite choisir une valeur pour PS1, notre prompt. Pour ma part, ce sera :
Si vous n'arrivez pas à fabriquer votre PS1, relisez ce cours en testant chacun de votre élément avec la commande :
echo -e "\033[XXm"
jusqu'à obtenir un résultat convenable, notez ensuite votre PS1 quelque part pour le copier-coller quand le temps sera venu, sans oublier d'entourer chaque \033[XXm de \[ et de \]. Cette partie était la plus dure : si vous réussissez, le reste n'est que facilité. :)
Tout se passe ici en mode console (sauf si vous avez choisi un éditeur graphique). Ouvrez donc un shell, et faites chauffez vos p'tits doigts ;) . J'ai commenté mes actions pour que vous ne perdiez pas trop le fil. ;)
[diablo@Diablo:Anywhere_^^]$ cd ~ #On se place dans son home, le signe ~ représente votre home, l'équivalent de "Mes Documents"
#Il faut fair un choix :
[diablo@Diablo:~]$ vim .bashrc #On ouvre le fichier .bashrc avec vim
[diablo@Diablo:~]$ kate .bashrc #Si vous préférez kate
[diablo@Diablo:~]$ gedit .bashrc #Si vous préférez gedit
[diablo@Diablo:~]$ kwrite .bashrc #Si vous préférez kwrite
[diablo@Diablo:~]$ nano .bashrc #Ou nano
#Ce n'est pas le choix qui manque ;)
#Je détaille ici l'utilisation de vim, un peu difficile pour zér0 ^^
#Ici on est dans vim, placez-vous à la fin du fichier à l'aide des flèches directionnelles.
#Appuyez sur <gras>I</gras>, vous passez en mode insertion
#Collez d'abord ceci pour activer la coloration du texte
eval "`dircolors -b`"
#Puis collez votre PS1 personnalisé ici, pour moi j'ai :
PS1='\
\[\033[00m\][\
\[\033[31m\]\u\
\[\033[00m\]@\
\[\033[35m\]\h\
\[\033[00m\]:\
\[\033[34m\]\w\
\[\033[00m\]]\
\[\033[00m\]\$\
'
#Appuyez sur Echap, vous sortez du mode insertion
#Pour sauvegarder les changements, appuyez sur :, puis sur x, puis sur Entrer
#Vim se ferme, vous revenez au shell
Mais non : attendez avant de me lapider :D. Fermez votre shell et ouvrez-en un autre...
Magique ! C'est tout beau !
Comme vous le constatez, il n'y pas grand-chose de changé, juste le petit invité, que l'on appelle prompt, est changé. Mais ce n'est pas fini, le 2e round commence. :)
Bon, vous êtes chauds ? On a juste commencé à changer la couleur de notre prompt, on va s'occuper de la commande ls qui est très utilisée. La commande ls affiche le contenu du dossier courant ; si vous utilisez votre shell, cette commande est indispensable, si, si, je vous jure :D .
Ça se passe toujours dans le même fichier, alors on va encore l'ouvrir :
[diablo@Diablo:~]$ cd ~
[diablo@Diablo:~]$ vim .bashrc
Cette fois, on ne va faire grand-chose, on va juste utiliser un alias.
Sous Unix, les aliases sont des pseudo-commandes qui servent à redéfinir le comportement de certaines commandes ou à en créer de nouvelles.
Ambigu ? C'est normal ^^, je vais vous éclairer, vous aller voir, ce n'est pas très compliqué ! Rien ne vaut la pratique pour vous expliquer le concept d'alias, on va donc en créer un pour la commande ls.
#Tralala, on va créer notre alias, préparez vos aspirines, ça va être dur !
#C'est parti !!
eval "`dircolors -b`" #On active le support des couleurs si ce n'est pas encore fait :)
alias ls='ls --color=auto' #On crée notre alias
Et voilà c'est fini, votre alias est prêt. Mais concrètement, qu'avons nous fait ? Eh bien, nous avons redéfini le comportement de la commande ls. Si vous voulez savoir, tapez ceci dans la console :
[diablo@Diablo:~]$ ls --help
#Je ne mets que la partie qui nous intéresse
[...]
--color[=PARAM] afficher avec une couleur pour distinguer les types de fichiers,
selon un des PARAMètres
suivants : 'never', 'always', ou 'auto'
[...]
Lorsque l'on a déclaré notre alias, on a en quelque sorte "dit" qu'à chaque appel de ls, il faudra en réalité appeler ls comme ceci : ls --color=auto
Oui, car c'est la commande ls qui fera le boulot car elle gère les couleurs :D : pratique ;) .
Vous pouvez donc fermer vim (:, puis X, puis Entrer) et relancer votre shell, taper ls et admirez. ^^
Voilà, j'espère que ça vous à plu et à la prochaine !!