Diese Aufforderung bewirkt, dass Terminals den Bildschirm umschließen, warum?

448
user19203

Ich habe die folgende PS1-Eingabeaufforderung:

export PS1="\e[1m\e[38;5;198m\u\e[0m @ \e[1m\e[38;5;208m\h\e[0m : \e[1m\w\e[0m\e[38;5;226m\$(parse_git_branch)\e[0m \e[1m>>>\e[0m " 

Was passiert, ist, dass beim Tippen und wenn es auf halbem Weg durch das Terminal geht, der Cursor am Anfang der Zeile gesendet wird und sich wie folgt überschreibt:

rossid @ HOST : /Library/Java/JavaVirtualMachines/jdk1.8.0_151.jdk/Contents >>>  oussid @ HOST : /Library/Java/JavaVirtualMachines/jdk1.8.0_151.jdk/Contents >>> this is just a test to show what happens nothing seri  

(der Rest der Saite ersetzt den Anfang)

Irgendeine Idee warum? (Ich verwende das OSX-Standardterminal und das IntelliJ-Terminal ... alle machen dasselbe)

-2
Dies ist eine sehr häufig gestellte FAQ. Suchen Sie, bevor Sie fragen. tripleee vor 6 Jahren 0
Inded. https://unix.stackexchange.com/questions/317734/, https://superuser.com/questions/695338/ und viele andere. JdeBP vor 6 Jahren 0

1 Antwort auf die Frage

1
Akilan

Sie müssen alle nicht druckbaren Escape-Sequenzen zwischen \[und einschließen \]. Zum Beispiel:

 PS1="\[\e[1m\]\[\e[38;5;198m\]\u\[\e[0m\] @ " 

[Zeigt nur einen Teil Ihrer Eingabeaufforderung. Machen Sie dasselbe für die Ruhe.]