Invite/Prompt Bash, couleur et line wrapping

Encore un billet qui est davantage un mémo pour moi que pour vous ;)

Si vous tritouillez l’invite du shell bash en ajoutant des couleurs (mise en avant du nom du serveur pour pas se mélanger les pinceaux par exemple), pensez à entourer vos séquences d’échappement de crochets. Ainsi, ceci :

PS1='[t] u@e[1;31mh-plop1(wp)e[0m:w % '

devient ceci :

PS1='[t] u@[e[1;31m]h-plop1(wp)[e[0m]:w % '

Siiiiii…. regardez bien :

e[1;31m

et hop

[e[1;31m]

Cela permettra au shell de bien calculer le nombre de caractères qui composent une ligne et ainsi d’éviter d’écraser le début de la ligne avec des caractères surnuméraires et tout ce que cela implique (gestion des retours à la lignes, chaos dans l’affichage de l’historique des commandes, etc).

2 commentaires sur “Invite/Prompt Bash, couleur et line wrapping

  1. Bien vu l'artiste ! J'avais abandonné la coloration de mes prompt sur mes serveurs en fonction de l'environnement (recette en vert, prod en rouge etc) à cause de ce problème de retour à la ligne défectueux… j'ai appliqué ton conseil et ça marche beaucoup mieux ;)

  2. C'est vrai qu'en plus d'être esthétique (avec le bon jeu de couleurs) c'est trés pratique, l'invite de root pouvant s'afficher en rouge par exemple.

    Mais alors sous ZSH … J'ai réussit à trouver un PS1 kimarchebien au fil de mes périgrinations sur les pastebin, mais j'ai toujours pas saisi comment que ça marche.
    J'vais devoir m'y mettre sérieusement moi !

    Le plus étonnant, c'est que n'importe quelle chaine colorée dans un script Bash s'affiche correctement, mais pour le prompt, même avec les crochets encadrant les caractères d'échappement, ils sont affichés comme des caractères normaux.

Les commentaires sont fermés.