Linux: Beim Einfärben der Bash-Eingabeaufforderung wird der Wagenrücklauf unterbrochen

7855
Abonec

Wenn ich versuche, die bashEingabeaufforderung so einzufärben :

export PS1="\e[0;31m[\u@\h \W]\$ \e[m " 

es bricht den Wagenrücklauf (anstatt in eine neue Zeile zu springen, wenn die Zeile voll ist, beginnt sie in derselben Zeile und löscht den eingegebenen Text).

Wenn ich die Farbsequenz entferne, funktioniert es gut.
Ich benutze Ubuntu 11.10 und Terminal (Guake hat auch den gleichen Fehler).

21
Seltsam. Es funktioniert ohne Probleme unter RedHat 5 und Mac OS X Matteo vor 12 Jahren 0
mögliches Duplikat von [PS1-Problem, Cmd wird wiederholt] (http://superuser.com/questions/311511/ps1-problem-cmd-is-looping) grawity vor 12 Jahren 0

2 Antworten auf die Frage

37
grawity

You must wrap all escape sequences between \[ and \] in order for 'readline' to correctly calculate the prompt's visible length. Without them, 'readline' thinks the prompt is longer than it is, and doesn't know when the text reaches the margin.

PS1="\[\e[;31m\][\u@\h \W]\$ \[\e[m\]" 
Danke vielmals!! Ich habe versucht, Dokumentation in den offiziellen Dokumenten zu finden, konnte es aber nicht - die Aufforderung "Standard" verwendet diesen "Trick" und ich hatte zunächst Schwierigkeiten, herauszufinden, wofür es genau war. Danke, dass Sie das geklärt haben up --- Übrigens, ich habe tatsächlich die Dokumentationsquelle in 'man readline 3' um Zeile 684 gefunden, und es heißt, dass dies eigentlich 'überspringen-csi-Sequenz' für diejenigen heißt, die wissen möchten, wo die Dokumentation dazu ist. Ich glaube nicht, dass ich es gefunden hätte, ohne dass Sie mich auf readline (3) aufmerksam gemacht hätten, obwohl ich davon wusste, dass die Verbindung nicht hergestellt werden konnte. osirisgothra vor 11 Jahren 3
Was bedeutet "wickeln"? Meinen Sie damit, das Ganze * IN * ein `\ [`, `\]` einzuwickeln? Ich denke schon, aber es scheint nicht für mich zu funktionieren. Max Howell vor 10 Jahren 0
@osirisgothra: In der Dokumentation geht es eigentlich um eine andere Sache - `skip-csi-sequence 'soll ** durch spezielle Tasten erzeugte Eingabesequenzen unterdrücken. grawity vor 9 Jahren 1
@MaxHowell müssen Sie jede `\ e [xxm'-Sequenz einschließen, nicht die gesamte Zeichenfolge. Enrico vor 7 Jahren 1
Vielen Dank. In meinem Fall habe ich einfach `\ e [39m`] durch` \ [\ e [; 39m \] `ersetzt und es funktioniert gut Herrgott vor 5 Jahren 0
Beachten Sie, dass "\ e [; 39m" zu "\ e [0; 39m" erweitert wird. Dies bedeutet "alle Formatierungen zurücksetzen, _dann die Farbe auf 39 setzen". Es ist gut in Eingabeaufforderungen, aber es hängt in keiner Weise mit meinem Beitrag über `\ [\]` zusammen. grawity vor 5 Jahren 0
1
stonefruit

der [and] tip funktionierte auch auf OS X 10.8.2.

Ich benutze:

PS1 = "[\ e [0; 37m \ W \ $ (git branch 2> / dev / null | grep -e '*' | sed 's / ^ .. (. *) / {\ 1} /') \ $ \ e [m] "

was zeigt mir meine momentane git branch im einsatz.

Kennen Sie "__git_ps1"? rafak vor 10 Jahren 0
nopes. Welche magische Sache wird es tun? stonefruit vor 10 Jahren 0