Linux prompt how-to customisé + explications
Je vais faire un résumé de ce que j’ai trouvé un peu partout, et pourquoi j’ai choisi mon prompt tel que je l’ai fait.
- Visuellement, avoir quelque chose de coloré est extrêmement parlant. Il me fallait absolument utiliser les couleurs possibles du prompt pour rapidement mettre en évidence ce qui m’intéresse ;
- Le bash a sa syntaxe qui est très efficace mais pas forcément facile à appréhender ;
- Comme pour tout ce qu’on cherche sur Internet en termes de développement, il y a à boire et à manger… et cela semble devenir vrai aussi pour Linux. J’espère vraiment (x 450e+6654) me tromper.
Ce que j’ai trouvé et qui fonctionne selon mes tests. Ici, bien sûr, peut être qu’il y a d’autres solutions, mais celle que je donne ici a fonctionné sur tous les shells que j’ai testé (Ubuntu, Mint mais aussi CentOS).
Séquence invisible
Toute séquence qu’on ne veut pas visible doit être entourée par \[
et \]
.
Fin de l’histoire. Je vais pas pleurer en disant que j’ai passé un sacré paquet de temps à trouver ça alors que c’est très simple. Ah si je pleure ? Bon ok.
Changer de couleur
Pour changer de couleur, il faut imaginer qu’on change simplement de stylo. Simple, me direz-vous ? Mais après avoir lu et travaillé dans le Web où on ouvre puis on ferme une balise, ici, non. Il faut envoyer une séquence spéciale : \033
puis ouvrir un crochet qu’on ne va pas fermer, c’est codé en dur, il faut l’accepter tel quel : [
. Et ensuite, un chiffre : 0
pour dire qu’on veut une couleur foncée, ou 1
pour dire qu’on la veut un peu plus claire (ex : le noir devient gris) puis un point virgule ;
. Ensuite, il faut donner un chiffre compris entre 30 et 36 pour préciser la couleur. Et vous croyez que c’est terminé ? Non ! Il faut terminer par la lettre m
. Si vous avez bien lu, vous devriez instantanément comprendre l’exemple suivant : \[\033[1;31m\]
. Oui oui, le crochet au milieu ne se ferme jamais. Respirez, calmez-vous. C’est la vie. Il faut faire avec.
Pour toutes les couleurs, j’ai tout mis dans mon mémo qui remplace ma mémoire trop remplie (je préfère dire “trop remplie” que “défaillante”, mais parfois j’hésite entre les deux…).
Restorer la couleur d’origine
Oui c’est en h1 parce que c’est aussi important que les deux paragraphes précédents : pour restaurer la couleur d’origine, cela ressemble un peu à l’ordre précédent : entourer par des crochets échappés, une séquence de couleur qui n’a pas deux valeurs mais une seule : 0
. Cela donne : \[\033[0m\]
.
Donc votre code qui change votre prompt devrait toujours se terminer par “remettre la couleur d’origine”, soit \[\033[0m\]
. Ce n’est que mon point de vue…
Mon prompt
Vous allez me dire “mais pourquoi il fait tout un article sur un prompt ?”. Réponse : c’est comme mon clavier : j’ai passé beaucoup de temps à l’apprendre et le configurer, parce que je sais que sur du long terme ça va m’être très rentable. Passer plusieurs semaines pour gagner plusieurs mois, ça vaut le coup, fin de l’histoire. Donc, voici ma réflexion qui explique mon choix de prompt. J’aurais tout autant pu vous répondre un grand classique indétrônable : le diable est dans les détails.
- J’ai très souvent besoin de savoir globalement l’heure qu’il est. J’aimerais bien, dans mon prompt, je sache l’heure qu’il est. Si je tape quelque chose, je valide, hop j’ai la nouvelle heure. Pratique, pas “mortellement pratique”, mais sympa. De plus, 6 caractères utilisés pour HH:MM[espace] c’est négligeable. Par contre, j’aimerais que visuellement, ça ne soit pas polluant. C’est pratique, mais pas important. La couleur la plus sombre possible dans le prompt c’est “noir éclairci”, soit premier chiffre = éclairci =
1
et second chiffre = noir =30
. Donc mon premier ordre c’est “noir éclairci + heure”, donc :\[\033[1;30m\]\t
- La seconde chose, qu’on retrouve partout, c’est bien sûr, qui est connecté, donc l’utilisateur. Là, ça devient plus important. Mais pas le plus important pour moi (surtout sur la fin du prompt où on voit en méga surbrillance, si on est superuser ou utilisateur normal) : c’est une couleur foncée
0
et qui peut avoir un pendant “éclairci” plus agréable pour préciser l’hôte (j’en parle juste après) : j’ai choisi purple =35
. La séquence échappée du user en cours est\u
. Ici aussi, si vous avez suivi, ça donne, couleur + user en cours :\[\033[0;35m\]\u
- Ensuite, séparateur entre l’utilisateur et l’hôte. Le classique “
@
” qui ne doit pas être gênant, même couleur que l’heure : “noir éclairci”, soit\[\033[1;30m\]@
- L’hôte. Oui, le grand classique c’est «
[userconnecté]@[hôte]
», et si des millions de geeks linux ont choisi cela c’est que c’est parlant. Mais ici, comme je gère pas mal de machines, selon moi, il faudrait que l’hôte soit un peu plus visible que le user en cours. Donc même couleur que le user, mais avec «1
» au lieu de «0
». Sachant que la séquence échappée de l’hôte est\h
on obtient :\[\033[1;35m\]\h
- Avant dernière chose (pour moi) : le path. Là, bon sang, il faut que ça pète. Il faut que le yeux le voient même si on commence à s’endormir (petit clin d’œil à ceux qui mangent kebab-frites avant de commencer les cours avec moi). Un bon rouge, bien éclairci. Allez on le fait rapide : pour exécuter un ordre à chaque appel de prompt, l’astuce est d’échapper le
$
et de mettre entre parenthèses l’ordre shell qu’on veut lancer : ici, on est sur du Linux, c’est instantané. La solution, donc : rouge vif +$(pwd)
version “échappée” :\[\033[1;31m\]\$(pwd)
- Dernière information : la plus cruciale, toujours présente sur tous les paths : quel type d’utilisateur est connecté :
\$
. Il est substitué par#
si vous êtes root, sinon$
. Là, il faut qu’on ait les yeux qui brûlent. Lunettes de soleil. Du jaune, le plus visible possible (= “1
“). Un bon jaune qui fait pleurer les yeux, mais ça ne prend qu’un caractère, qui est IMHO, d’une importance cruciale :\[\033[1;33m\]\$
Voici donc mon bash résumé en une ligne, que je mets dans tous mes .bashrc
. Si vous ne savez pas ce qu’est un .bashrc
, je vous laisse chercher, ce n’est pas le but de l’article.
Voici ce que donne mon prompt, et même si ici il n’est pas super vendeur, en pratique, je n’ai pas trouvé quelque chose de plus efficace visuellement parlant, si vous avez des idées / suggestions, améliorations, commme d’habitude, je suis preneur :
Le code de mon prompt, volontairement en minuscules juste pour vous faire râler :
export PS1="\[\033[1;30m\]\t \[\033[0;35m\]\u\[\033[1;30m\]@\[\033[1;35m\]\h \[\033[1;31m\]\$(pwd) \[\033[1;33m\]\$\[\033[0m\] "
PS : pour ceux qui ne savent pas ce que “IMHO” signifie, ne le dites à personne, et allez vite chercher sur Internet. Promis on ne le dira à personne. C’est comme “RTFM”. Promis. Chut. [silence gêné].