Souvent, lorsque je commence à regarder l'historique des commandes, certains caractères d'une commande affichés ne sont pas effacés, par exemple:
Ce qui se passe:
Prompt$ some_command
Prompt$ some_commanother_command
Qu'est-ce qui aurait dû se passer:
Prompt$ some_command
Prompt$ another_command
Je ne peux pas effacer ces personnages et bash les ignore lors de l'exécution de la commande. Ils disparaissent également lorsqu'une nouvelle invite est affichée (après avoir appuyé sur Enter
par exemple).
J'ai demandé aux autres personnes qui travaillent sur Linux sur mon lieu de travail et ils ont dit qu'ils ont parfois ce problème aussi aussi, mais ils n'avaient pas eu d'idée sur la manière de résoudre ce problème.
J'ai Ubuntu 11.10 et j'utilise Guake. Voici mon PS1
:
\e[0;31m\u \A ${PWD##*/}\e[0;32m$(parse_git_branch)\e[0;31m$\e[m
où parse_git_branch
est
parse_git_branch () {
git name-rev HEAD 2> /dev/null | sed 's#HEAD\ \(.*\)# (\1)#'
}
Autant que je sache, mes collègues ont ce problème même avec moins de "fantaisie" ps1.
Utilisation \[...\]
autour des parties de PS1 qui ont une longueur 0. Cela aide à bash pour obtenir la longueur de l'invite. Même avec cette mesure, votre ligne de commande peut être gâchée lorsque vous utilisez des caractères multibytes (au moins le mien fait). Frappe Ctrl+L Aide également dans de tels cas (mais efface l'écran en même temps).
Vous devez vous assurer que vous échappez à tous les caractères non imprimables.
Bon
PS1="\[\e[36m\]\W ⇨ \[\e[m\] "
Mauvais
PS1="\[\e[36m\]\W ⇨ [\e[m\] "