2011-08-05 5 views
1

Si je fais ceci:Terminal ne fonctionne pas avec couleur rapide

 
echo foo 
PS1='\e[0;30mtest \e[0m' 

puis appuie sur la flèche vers le haut test PS1='\e[0;30mtest \e[0m' apparaît (comme prévu).
Mais si j'appuyez sur la flèche haut , donc je devrais avoir echo foo, il en résulte test PS1='\e[0;3echo foo

Si je mets le PS1 à tout ce qui ne comprend pas la couleur cela fonctionne:

echo foo 
PS1='\e[0;30mtest \e[0m' 
PS1='test ' 
  • triple presse up arrow, des résultats dans echo foo

Remarque: echo foo est toujours la commande exécutée si j'appuie sur Enter

J'ai essayé ceci dans iTerm2 et le terminal Apple.

Pourquoi le fait-il et comment le réparer?

Répondre

4

Essayez ceci:

PS1="\[\e[0;30m\]test \[\e[0m\]" 

En utilisant \[ et \] supplémentaires entre parenthèses, vous dites bash que vous avez des caractères non-impression, qu'il peut être mal interpréter lorsque vous appuyez sur la flèche vers le haut.

1
PS1='\[\e[0;30m\]test \[\e[0m\]' 
# ^^  ^^  ^^  ^^ 

Le \[ et \] dire bash sur les caractères non-impression; sinon, il n'a aucune idée combien de temps votre invite est réellement, d'où l'invite brisée. Voir la section PROMPTING de la page de manuel bash pour plus de détails.

Questions connexes