mercredi 13 août 2008

Personnaliser son bash avec des couleurs

Salut tout le monde,

petit mini-tutoriel sur la personnalisation du Shell de Linux (ou encore de Cygwin), plus précisément de... Bash. C'est le Shell (interface de ligne de commande) par défaut de Linux, donc c'est celui que vous utilisez probablement. De toute façon, les diférences sont minimes dans la plupart des cas. Ce que je vais vous apprendre à faire, c'est tout simplement changer votre "Prompt". Le prompt c'est quoi ?

Eh beh le prompt c'est tout simplement, la partie qui s'affiche à l'écran en permanence dans le shell, juste avant les commandes que vous entrez. Par exemple : pistache@pistache-laptop:~$.

Le prompt par défaut est souvent un peu tristounet, sans couleurs, mais nous allons changer ça. Alors déjà, comment modifier le prompt ? C'est tout simple, il est stocké dans la variable d'environnement PS1.
Essaiez d'entrer "echo $PS1" et vous verrez votre prompt. Le prompt est presque toujours dynamique. C'est à dire que le nom d'utilisateur n'est pas stocké en dur dans le prompt, on met plutot le code \*, ou * est remplacé par une lettre, ce qui formera un code qui sera remplacé par Bash pour mettre la valeur correspondante. Voilà un petit tableau récapitulatif des codes qu'on peut utiliser dans la Bash :

  • \a : an ASCII bell character (07)
  • \d : the date in "Weekday Month Date" format (e.g., "Tue May 26")
  • \D{format} : the format is passed to strftime(3) and the result is inserted into the prompt string; an empty format results in a locale-specific time representation. The braces are required
  • \e : an ASCII escape character (033)
  • \h : the hostname up to the first '.'
  • \H : the hostname
  • \j : the number of jobs currently managed by the shell
  • \l : the basename of the shell’s terminal device name
  • \n : newline
  • \r : carriage return
  • \s : the name of the shell, the basename of $0 (the portion following the final slash)
  • \t : the current time in 24-hour HH:MM:SS format
  • \T : the current time in 12-hour HH:MM:SS format
  • \@ : the current time in 12-hour am/pm format
  • \A : the current time in 24-hour HH:MM format
  • \u : the username of the current user
  • \v : the version of bash (e.g., 2.00)
  • \V : the release of bash, version + patch level (e.g., 2.00.0)
  • \w : the current working directory, with $HOME abbreviated with a tilde
  • \W : the basename of the current working directory, with $HOME abbreviated with a tilde
  • \! : the history number of this command
  • \# : the command number of this command
  • \$ : if the effective UID is 0, a #, otherwise a $
  • \nnn : the character corresponding to the octal number nnn
  • \\ : a backslash
  • \[ : begin a sequence of non-printing characters, which could be used to embed a terminal control sequence into the prompt
  • \] : end a sequence of non-printing characters

C'est en anglais mais ça devrait pas être dur à comprendre si ?

Le plus dur là dedans, c'est les "non-printing characters", les deux derniers de la liste. Ils sont très utiles (obligatoires en fait) et servent à entourer les autres codes. En fait Bash fait le compte des charactères du prompt en comptant les codes, il faut lui dire explicitement de pas le faire en entourant touts les codes avec \[ et \].

Par exemple un prompt très simple pourrait être : \[\u\]@\[\h\]$, qui donnerait : user@host$.

Pour tester votre prompt, écrivez :PS1="\[\u\]@\[\h\]$"

Et remplacez la valeur de PS1 par votre valeur.

Oui mais ça ne nous dit pas comment changer la couleur tout ça ? Eh bien c'est encore des autres codes :

Pour ouvrir la partie en couleurs :\e[x;ym Pour fermer : \e[m


Et vous remplacez X et Y par votre code de couleur, que vous prenez de ce tableau :
Color Code
Black 0;30
Blue 0;34
Green 0;32
Cyan 0;36
Red 0;31
Purple 0;35
Brown 0;33
Blue 0;34
Green 0;32
Cyan 0;36
Red 0;31
Purple 0;35
Brown 0;33
Le premier nombre, définit le format d'écriture de la couleur (souligné, gras, transparent, léger, couleur de fond, etc ,etc, essaiez les valeurs pour voir).

N'oubliez pas les non-printing characters (\[ et \]), c'est hyper important, le retour à la ligne ne marchera pas et votre bash sera vraiment foireux.

Après un peu de temps on peut obtenir un bash vraiment à son gout. Perso le mien est :

[ (compte de commandes) version de bash, périphérique, heure ]
utilisateur@hostname:repertoire$

\[\e[3;32m\][\[\e[m\] (\#) \[\e[4;31m\]\s \V\[\e[m\]\[\e[0;31m\] in device \l\[\e[m\]\[\e[3;32m\],\[\e[m\] \[\e[0;33m\]\t\[\e[m\] \[\e[3;32m\]]\[\e[m\]\n\[\e[1;32m\]\u\[\e[m\]\[\e[1;34m\]@\[\e[m\]\[\e[1;32m\]\H\[\e[m\]\[\e[0;36m\]:\[\e[m\]\[\e[1;34m\]\w\[\e[m\]\[\e[0;0m\]$\[\e[m\]

Vous pouvez vous en inspirer sans problème... On copyrighte pas les prompt à ce que je sache (pas encore ?)


Ce qui me donne :


Voilà... Merci à tous !


Sources :
PS: J'ai parlé de Matthieu Aubry et de PhpMyVisites au dernier post. Eh bien PhpMyVisites n'est plus, il a été remplacé par Piwik, beaucoup plus évolué. Son site : piwik.org

Aucun commentaire:

 
Pistaaaaaaaaaaaaaaache