Was ist falsch an dieser Bash-Eingabeaufforderung?

Was ist falsch an dieser Bash-Eingabeaufforderung?

Ich verwende den folgenden Eintrag in ~/.bashrcder Datei, um die Eingabeaufforderung farblich hervorzuheben und den aktuellen Zweig des Git-Repository anzuzeigen:

PS1='\[\e[1;32m\]\[\u@\h\]\[\e[m\] \[\w\]\[\e[1;1m\]\[$(__git_ps1 " (%s)")\] \[\e[1;1m\]\[$\] \[\e[m\]'

Dies funktioniert fast einwandfrei, außer dass die Befehlszeile ausgerückt wird, wenn ich den Bash-Verlauf verwende (mehrmals Pfeiltaste nach oben drücken) (nur die ersten Zeichen der Eingabeaufforderung bleiben unverändert) und Folgendes angezeigt wird:

usemmand

wenn mein Benutzername ist userund der Befehl lautet command.

Antwort1

\[und \]sollte nur in der Nähe von Teilen der Eingabeaufforderung verwendet werden, dienichtBewegen Sie den Cursor, auch wenn tatsächlich Text vorhanden ist. Wenn __git_ps1eine sichtbare Ausgabe erzeugt wird, wird Ihre Befehlszeile desynchronisiert.

Antwort2

Dies ist die richtige Version:

COLOR1="\[\e[1;32m\]"
COLOR2='\[\e[1;1m\]'
COLOR3='\[\e[m\]'
GIT_STATUS=$(__git_ps1 " %s")
PROMPT_CHAR="$"

PROMPT="${COLOR1}\u@\h${COLOR3} \w${COLOR2}${GIT_STATUS} ${COLOR2}${PROMPT_CHAR} ${COLOR3}"
PS1="$PROMPT"
export PS1

Antwort3

Für alle, die mit diesem Problem arbeiten: Hier ist das Beispiel, das bei mir funktioniert hat:

VOR:

export PS1="\033[0;33m[\u@\h]\033[1m\e[m \w \033[36m[>>]\033[0m\e[m "

NACH:

export PS1='\[\033[0;34m\][\u@\h]\[\033[1m\e[m\] \w \[\033[35m\][>>]\[\033[0m\e[m\] '

Beachten Sie alles '\\[\\]'rund um die Farben.

verwandte Informationen