web-dev-qa-db-fra.com

Shell invite personnalisation et comportement cmd

Je veux que mon invite affiche:

  1. répertoire de travail actuel (absolu), coloré en vert et

  2. dans une NOUVELLE ligne, le signe dollar et un espace vide.

J'utilise cette ligne dans .profile

export PS1='\e[0;32m$(pwd)\n\e[m$ '

Alors, par exemple Desktop, mon invite ressemble à ceci:

Cependant, parfois, lorsque vous appuyez sur la flèche vers le haut pour réexécuter les commandes précédentes, au début de l'invite, une séquence de caractères aléatoire apparaît qui ne semble pas disparaître à moins que je ne clique sur entrer, e. g.

Je n'ai jamais appuyé sur une commande cd cd Desktop. La partie la plus étrange est que backspace ne supprimera même pas la première des deux commandes cd ci-dessus!

Aucune suggestion?

4
pkaramol

Vous devez vous assurer que les caractères non imprimables de l'invite sont entre crochets, sinon bash ne pourra pas calculer correctement la taille de l'invite. Je pense l'avoir corrigé pour vous:

PS1='\[\e[0;32m\]$PWD\n\[\e[m\]$ '
6
Zanna

Tout d’abord, un grand merci à @Zanna d’avoir indiqué la bonne façon de procéder.

Par souci d'une réponse plus complète, j'ai élargi la solution qui inclut:

a) le cwd de couleur verte

b) dans une nouvelle ligne, la branche git (le cas échéant) de couleur jaunâtre avec une étoile rouge si la branche est sale

Pour accomplir b, le Invite consciente de git est nécessaire

Cela ressemble à ceci comme une dernière ligne de ~/.bashrc

_export PS1='\[\e[0;32m\]$PWD\n\[\e[m\]\[\e[0;33m\]$git_branch\[\e[m\]\[$txtred\]$git_dirty\[$txtrst\]$ '
_

Si tout va bien, l'invite se développera comme ceci si vous êtes sur une branche git

enter image description here

2
pkaramol