La configuration de l'invite de commande du shell est un sujet largement traité sur le web. Cependant, on y voit le plus souvent des configurations du type « j'affiche l'horloge sur une ligne complète en arc-en-ciel clignotant ». Pas cool.
Le prompt idéal doit permettre de se rendre compte intuitivement de l'environnement où vous êtes (connexion ssh, root, dépôt git, etc.) et ne doit afficher les informations contextuelles que si elles sont nécessaires. Cool.
Le prompt bash que je vous propose a les fonctionnalités suivantes :
- couleurs vives pour une connexion root,
- affichage du nom d'hôte uniquement en cas de connexion distante, avec une couleur différente selon le type de connexion (ssh, telnet),
- dans les répertoires GIT, affichage du nom de la branche, avec une couleur indiquant le statut des commits
- rappel du nombre de jobs attachés au terminal, si besoin est
- alertes batterie et/ou charge système, si besoin est, avec un dégradé de couleurs
- Le code sur github (2192 clics)
- Une capture d'écran (6890 clics)
Pour utiliser ce prompt, placez simplement une ligne de ce genre dans votre fichier ~/.bashrc :
source ~/prompt.bash
Le code est distribué sous la licence AGPv3 et aurait besoin d'être un peu amélioré. Certaines fonctions ne sont pas factorisées et un bug persiste sur les branches GIT aux noms exotiques.

# petites idées
Posté par briaeros007 . Évalué à 9.
J'ai un shell chez moi avec comme tu dis une horloge et tout plein d'infos pas forcément utile.
Mais l'horloge est quand même pas mal pour avoir une idée de la durée d'une commande (ou savoir quand on l'a lancé). Parce qu'on trouve qu'une commande est lente souvent après l'avoir lancé (et donc sans time).
Par contre j'ai un truc super génial qui est d'indiquer le code de retour de la commande quand elle est différente de 0.
et ça c'est aussi bien pratique
[^] # Re: petites idées
Posté par Michaël . Évalué à 7.
Dans CSH il y a une variable de shell spéciale
timequi permet d'afficher des statistiques après la terminaison d'une commande, si celle-ci a duré plus d'un certain temps. Chez moitimevaut[^] # Re: petites idées
Posté par Marotte . Évalué à 3.
Super. Je n'y avais jamais pensé. Merci !
Du coup j'ai ça maintenant, c'est pas très joli mais c'est vraiment pratique.
# Je suis peut-être une bille, mais…
Posté par François Chaix (page perso) . Évalué à 2.
Je ne sais pas vraiment d’où ça vient…
☣
[^] # Re: Je suis peut-être une bille, mais…
Posté par Zylabon . Évalué à 2.
bc semble ne pas être installé http://www.gnu.org/software/bc/
Pour ma part, c'était acpi qui ne l'était pas. (mais bon, m'en fiche de la batterie). Aussi j'ai un peu adapté le code (du coup je me retrouve avec un prompt qui ressemble vachement à l'ancien).
[^] # Re: Je suis peut-être une bille, mais…
Posté par solsTiCe (page perso) . Évalué à 3.
moi j'ai encore plus long
je vois plusieurs problèmes:
THIS_TTY=tty
ps aux | grep $$ | grep bash | awk '{ print $7 }'-1: quand on est en terminal, chez moi ca donné pts/1 par exemple pas un ttyX
-2: le résultat entre
donne déjà un préfixe de tty donc faut supprimer le tty pour avoirTHIS_TTY=
ps aux | grep $$ | grep bash | awk '{ print $7 }'faire un test sur acpi
if which acpi 2>/dev/null ; then
[^] # Re: Je suis peut-être une bille, mais…
Posté par Sylvain Sauvage . Évalué à 10.
Cette histoire de tty, c’est du n’importe quoi !
le grep
$$:$$peut se trouver inclus dans un autre pid (celui d’un autre bash) ou comme argument d’un programme (le "bash" aussi) ou dans l’occupation mémoire d’un autre processus (→ pourquoi le u dans le ps ?) →"\A$$\Z"¹ ;deux greps → un seul
"\A$$\Z.* /bin/bash\Z"¹ ;deux greps et un awk → un seul awk (
awk "/\A$$\Z* \/bin\/bash\Z/ {print \$7}"¹) ;en plus, on pourrait plus simplement regarder vers quoi pointe
/proc/$$/fd/0…… ou utiliser la commande prévue pour :
tty.¹ remplacer \A par \< et \Z par \>. La prévisualisation est bizarre : certaines barre obliques inverses (\) ne sont pas affichées si elles ne sont pas doublées et elle choisit les inférieur/supérieur à qui sont interprétés…
[^] # Re: Je suis peut-être une bille, mais…
Posté par MrSpackMan (page perso) . Évalué à 9.
Le bc pourrait être remplacer par du shell :
Si on a besoin d'un calcul flottant, on peut aussi utiliser les fonctions arithmétiques de awk.
« La racine carrée de la vérité, c'est l'amour. » A.D Sakharov
[^] # Re: Je suis peut-être une bille, mais…
Posté par Leryan (page perso) . Évalué à 1.
Pour ma part j'ai ceci :
Afficher le pourcentage, ça n'est pas l'idéal pour la comparaison. Faire un sed 's/%//g' serait pas mal.
Pour ce qui est de -gt & cie, là franchement, merci bash pour ces indications fort peu explicites…
Love, bépo.
# Mon résultat.
Posté par Raoul Volfoni (page perso) . Évalué à 3.
A chaque CR c'est plutot pénible. Pour info un '$ acpi --battery' me renvoie le msg suivant puisque je suis sur un ordi de bureau.
Pour les 2 dernières lignes je n'ai pas encore regardé.
[^] # Re: Mon résultat.
Posté par Xavier Claude (page perso) . Évalué à 3.
Sommaire
Je suis aussi sur un fixe et sans onduleur, du coup, j'ai viré tout ce qui touchait à la batterie.
« Moi, lorsque je n’ai rien à dire, je veux qu’on le sache. » Raymond Devos
[^] # Re: Mon résultat.
Posté par Xavier Claude (page perso) . Évalué à 10.
Pour voter pour le bug du sommaire sur le code https://linuxfr.org/suivi/bug-du-sommaire-automatique-sur-les-citations
« Moi, lorsque je n’ai rien à dire, je veux qu’on le sache. » Raymond Devos
# Et zsh ?
Posté par Bruno Michel (page perso) . Évalué à 9.
À tout hasard, est-ce qu'il y aurait un volontaire pour faire la même chose pour zsh ?
[^] # Re: Et zsh ?
Posté par Maz (page perso) . Évalué à 2.
Regardes déjà celui du site grml, il est pas trop mal.
http://grml.org/zsh/
[^] # Re: Et zsh ?
Posté par CrEv (page perso) . Évalué à 6. Dernière modification : le 07/07/12 à 16:46
Je ne sais pas si ça répond exactement à ça mais voici quelques liens qui devraient au moins aider un peu :
http://stevelosh.com/blog/2010/02/my-extravagant-zsh-prompt/ : un prompt plutôt sympa, axé git et hg
https://github.com/robbyrussell/oh-my-zsh/ pour avoir une config sympa et devrait pour répondre intégralement ou presque, non ? (en général commencer par oh-my-zsh est une pas mal)
[^] # Re: Et zsh ?
Posté par CrEv (page perso) . Évalué à 3.
Une petite précision : le premier lien utilise en fait le second…
J'ai utilisé pendant quelques temps (au moins un an je pense) le premier (donc le second) avec grand plaisir, vraiment sympa. L'affichage de la batterie à droit est plutôt cool. Après je l'ai abandonné simplement parce que je suis (temporairement désormais) passé sous windows/cygwin et ça c'est moche.
[^] # Re: Et zsh ?
Posté par zchark . Évalué à -1.
Pour zsh, j'ai un joli prompt:

Il m'indique l'heure, le jour de la semaine, la date du mois, et sur la deuxième ligne mon login, le nom de la machine où se trouve le shell, et le répertoire courant !!
Pour avoir ça, il faut simplement paramétrer la variable PS1 dans le fichier ~/.zshrc sur deux lignes de cette manière:
PS1="
echo '\033[00;34m'%T le %wecho '\033[01;31m\n'%B%n%b@%m: %~> "
[^] # Re: Et zsh ?
Posté par ziedabid . Évalué à 3.
il y a le fameux Oh-my-zsh avec plusieurs
thèmesprompts proposés.[^] # Re: Et zsh ?
Posté par XL64 . Évalué à 1.
Il y a ça sinon qui est pas mal : http://aperiodic.net/phil/prompt/
[^] # Re: Et zsh ?
Posté par Barret Michel . Évalué à 2.
http://pastebin.com/nKMdKsLy
En voici un qui reprend une partie des fonctionnalités et qui en ajoute d'autres :
[^] # Re: Et zsh ?
Posté par Nicolas Vinot . Évalué à 1.
Mon petit mien au passage : https://gist.github.com/3094451
Ce qui peut donner : « (±|master|●1|+1|…1|⚡) » , scm | branche courante | modifs indexées | modifs non indexées | fichiers non trackés | état du workspace
# uptime me renvoit mon load avec des virgule
Posté par François . Évalué à 3.
Ma commande uptime me renvoie mes load avec des virgule plutôt que des points (sur une de mes machines mais pas sur l'autre). Du coup le sed ne fonctionne plus du tout.
Du coup à la place de :
peut être :
[^] # Re: uptime me renvoit mon load avec des virgule
Posté par fusible . Évalué à 3.
Pour ton problème de virgule c'est certainement une histoire de locale. Tu peux essayer avec LANG=C :
Sinon, j'aime bien :
[^] # Re: uptime me renvoit mon load avec des virgule
Posté par Christophe Guilloux (page perso) . Évalué à 2.
Souvent je me dis "où est-ce que je pourrais aller regarder pour avoir un bon exemple plutôt que de trop réfléchir ?" et donc là je me suis dit qu'aller regarder le plugin load de munin serait une bonne idée. En adaptant un peu pour prendre la première valeur moyenne cela donne :
# Retour d'expérience
Posté par Sébastien Wilmet (page perso) . Évalué à 6.
Tout d'abord, je ne te remercies vraiment pas pour ce script, je viens de perdre mon après-midi à le personnaliser, fignoler, … ;)
Plus sérieusement, pour savoir si on est root ou pas, c'est plus simple d'utiliser :
Pour git, si la branche origin/branch n'existe pas, il y a une erreur :
Je me souviens aussi qu'il y a un meilleur moyen pour obtenir les infos de git, au lieu d'utiliser des commandes comme
git branch,git diff, etc. Mais je sais plus quel est ce meilleur moyen, je te laisse chercher ;)Sinon sur le web y a déjà plein d'autres prompt bash pour git, avec certaines choses utiles, mais malheureusement plein d'autres trucs inutiles (mettre dans une couleur différente selon l'heure du dernier commit, …). Juste le nom de la branche avec quelques couleurs, c'est très bien !
« Un animal d'une atterrante stupidité : il est persuadé que si vous ne le voyez pas, il ne vous voit pas non plus » (H2G2)
[^] # Re: Retour d'expérience
Posté par erdnaxeli (page perso) . Évalué à 4.
Pour avoir la branche avec git :
Il existe deux catégories de gens : ceux qui divisent les gens en deux catégories et les autres.
# Il me semble que
Posté par M.Poil (page perso) . Évalué à 4. Dernière modification : le 07/07/12 à 20:40
Sur des simples crochets on protège les variables avec des doubles quotes.
Sinon on utilise la syntaxe double crochet avec des tests en == & co, ce qui evite des erreurs de syntaxes sur des variables vides ou de type non attendu
Puis tant qu'a faire plutôt que de mixer les `cmd` et les $(cmd) autant utiliser la 2eme, la 1ere est obsolète
edit : une source
Is it a Bird? Is it a Plane?? No, it's Super Poil !!!
[^] # Re: Il me semble que
Posté par M.Poil (page perso) . Évalué à 1.
Je me répond a moi même, afin d'éviter quelques fork, quelques pistes (parce que sur ma VM l’exécution du script ajoute dans les 0.3 de load :x) :
THIS_TTY=tty$(ps aux | awk -v pid=$$ '/pid/ && /bash/ { print $7 }')
SSH_IP=${SSH_CLIENT%% *}
pour le loadavg
awk '{ print $1 }' /proc/loadavg
Is it a Bird? Is it a Plane?? No, it's Super Poil !!!
# mise à jour ?
Posté par Nicolas Boulay . Évalué à 7.
J'espère qu'après autant de retour il va y avoir des updates :)
* passer de bc à sh
* gérer l'absence de batterie
* tester la présence du binaire acpi lors du source ?
Super idée en tout cas.
"La liberté de tout dire n'a d'ennemis que ceux qui veulent se réserver le droit de tout faire".
# Comme dirait Père Blaise
Posté par VoixOff . Évalué à 3.
Vous êtes des malaaaaaaades !
# Multiples batteries
Posté par MisterT . Évalué à 1.
Merci pour cette très bonne initiative !
Pour ma part, mon portable ayant 2 batteries, j'ai fait une petite modif dans la procédure "battery()": je calcule la valeur moyenne….
# Coloration différente de la sortie d'erreur et de la sortie standard ?
Posté par monseigneur . Évalué à 3.
Personnaliser le prompt, c'est bien mais existe-t-il un moyen de faire ressortir, en rouge par exemple, tout ce qui sort sur la sortie d'erreur ?
[^] # Re: Coloration différente de la sortie d'erreur et de la sortie standard ?
Posté par nojhan (page perso) . Évalué à 1.
Peut-être en bidouillant quelque chose avec colout : https://github.com/nojhan/colout
# Y'a du boulot...
Posté par Dams Nadé (page perso) . Évalué à 6.
…A faire.
Les variables non "quotées", ni declaree en "local" dans les fonctions, les * non-despecialisees… ouais y'a encore beaucoup a faire.
Je pense que ton script est dangeureux.
tu contredis beaucoup de points de la FAQ de reference http://mywiki.wooledge.org/BashFAQ/
# vu que l'on parle du prompt
Posté par Jonathan MERCIER (page perso) . Évalué à 1. Dernière modification : le 09/07/12 à 15:49
J'ai constaté un comportement bizarre si j'utilise:
Et pas quand j'utilise en plus \! comme:
Le soucis et que dans le 1er cas lorsque j'utilise les flèches haut bas pour naviguer dans l'historique il y a des lignes qui se superpose. j'ai essayer de jouer avec les séquences d'échappement ANSI pour positionner le curseur et supprimer ceux qui suivait mais un peu trop complexe à gérer pour un simple prompt. Je sais pas si je suis le seul avec ce soucis.
[^] # Re: vu que l'on parle du prompt
Posté par Raoul Volfoni (page perso) . Évalué à 2.
bash en 64 bits ? J'ai vu passer des patchs…
Envoyer un commentaire
Suivre le flux des commentaires
Note : les commentaires appartiennent à ceux qui les ont postés. Nous n'en sommes pas responsables.