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
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.
Aller plus loin
- Le code sur github (2554 clics)
- Une capture d'écran (7644 clics)
# 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 (site web personnel) . Évalué à 7.
Dans CSH il y a une variable de shell spéciale
time
qui permet d'afficher des statistiques après la terminaison d'une commande, si celle-ci a duré plus d'un certain temps. Chez moitime
vaut[^] # 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 (site web personnel) . Évalué à 2.
Je ne sais pas vraiment d’où ça vient…
La lumière pense voyager plus vite que quoi que ce soit d'autre, mais c'est faux. Peu importe à quelle vitesse voyage la lumière, l'obscurité arrive toujours la première, et elle l'attend.
[^] # 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).
Please do not feed the trolls
[^] # Re: Je suis peut-être une bille, mais…
Posté par solsTiCe (site web personnel) . É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 avoir
THIS_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 Ignatz Ledebur . É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.
[^] # Re: Je suis peut-être une bille, mais…
Posté par Anonyme . É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…
# Mon résultat.
Posté par Raoul Volfoni (site web personnel) . É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 claudex . Évalué à 3.
Sommaire
Je suis aussi sur un fixe et sans onduleur, du coup, j'ai viré tout ce qui touchait à la batterie.
« Rappelez-vous toujours que si la Gestapo avait les moyens de vous faire parler, les politiciens ont, eux, les moyens de vous faire taire. » Coluche
[^] # Re: Mon résultat.
Posté par claudex . Évalué à 10.
Pour voter pour le bug du sommaire sur le code https://linuxfr.org/suivi/bug-du-sommaire-automatique-sur-les-citations
« Rappelez-vous toujours que si la Gestapo avait les moyens de vous faire parler, les politiciens ont, eux, les moyens de vous faire taire. » Coluche
# Et zsh ?
Posté par Bruno Michel (site web personnel) . É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 (site web personnel) . Évalué à 2.
Regardes déjà celui du site grml, il est pas trop mal.
http://grml.org/zsh/
[^] # Re: Et zsh ?
Posté par CrEv (site web personnel) . Évalué à 6. Dernière modification le 07 juillet 2012 à 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 (site web personnel) . É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 Zied . É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 barmic . Évalué à 2.
http://pastebin.com/nKMdKsLy
En voici un qui reprend une partie des fonctionnalités et qui en ajoute d'autres :
Tous les contenus que j'écris ici sont sous licence CC0 (j'abandonne autant que possible mes droits d'auteur sur mes écrits)
[^] # Re: Et zsh ?
Posté par Aeris (site web personnel) . É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 (site web personnel) . É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 rootix . É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 . É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 !
[^] # Re: Retour d'expérience
Posté par erdnaxeli (site web personnel) . É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 (site web personnel) . Évalué à 4. Dernière modification le 07 juillet 2012 à 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 (site web personnel) . É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 (site web personnel) . É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 première sécurité est la liberté"
# 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 (site web personnel, Mastodon) . Évalué à 1.
Peut-être en bidouillant quelque chose avec colout : https://github.com/nojhan/colout
# Y'a du boulot...
Posté par Dams Nadé (site web personnel) . É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 (site web personnel) . Évalué à 1. Dernière modification le 09 juillet 2012 à 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 (site web personnel) . Évalué à 2.
bash en 64 bits ? J'ai vu passer des patchs…
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.