Fix für Bash-Zeilenumbruch und Backspace-Anzeige unter Mac OS X?

14

Wenn ich Terminal öffne (unter Mac OS X 10.5.8) und eine lange Befehlszeile eingebe: Alt-Text

... der Text geht nicht in die nächste Zeile, wenn er umbrochen wird: Alt-Text Alt-Text

Manchmal, wenn ich einen Befehl eingebe und dann die Rücktaste (oder den Aufwärtspfeil oder ^ U) drücke: Alt-Text

... die gesamte Zeile wird nicht gelöscht und ich kann nicht weiter als bis zu einem bestimmten Punkt zurücksetzen: Alt-Text Alt-Text

Ist dies ein bekannter Bash-Fehler (unter Mac OS X)? Gibt es eine Lösung?

Update: Juliano war korrekt, das Problem wurde durch falsches Abgrenzen einer Konsolencodesequenz in meiner PS1-Variablen verursacht. Ändern:

export PS1='\[\033[1;34m\]\$\]\033[0m\] '

... in meinem .bashrcan:

export PS1='\[\033[1;34m\]\$\[\033[0m\] '

...Problem gelöst.

Daryl Spitzer
quelle
1
+1 für die schönsten Screenshots eines Terminalbildschirms, den ich je gesehen habe.
Bis auf weiteres angehalten.
1
Die beiden Codezeilen, die Sie in Ihrem Update angezeigt haben, sind identisch.
Magne
Guter Fang, @Magne. Es ist schon vier Jahre her, dass ich mir das angeschaut habe, also erinnere ich mich nicht genau, aber ich gehe davon aus, dass das "Vorher" ein fehlte \].
Daryl Spitzer
sie sind nicht identisch: der 1. hat \]statt '[`
Ohad Cohen

Antworten:

19

Das Verhalten ist konsistent damit, dass Sie Konsolencodes in Ihrer Eingabeaufforderung haben (um die Farbe usw. zu ändern) und diese dann nicht richtig markieren, damit bash weiß, dass sie unsichtbar sind.

Tun Sie vor allem Folgendes:

PS1='\w\$ '

Und dann nochmal versuchen. Wenn das Problem behoben ist, sind meine Vermutungen richtig.

Jede Konsolencode-Sequenz muss mit \[und \]in der PS1-Variablen abgegrenzt werden. Sie sagen bash, dass alles, was sich dort befindet, die Cursorposition nicht verschiebt. Lesen Sie das Bash-Handbuch für weitere Informationen.

Juliano
quelle
Das war das Problem. Vielen Dank! Ich werde meine Frage mit Details aktualisieren.
Daryl Spitzer
Und was ist, wenn es das Problem nicht löst?
Levesque
3

Versuchen Sie http://www.kirsle.net/wizards/ps1.html, um eine bereinigte Eingabeaufforderung zu generieren. Es ist ziemlich beeindruckend. Sei einfach vorsichtig mit Klammern in deiner Eingabeaufforderung, es versucht ihnen zu entkommen oder so.

Dan Green
quelle
+1 Während die Antwort von @ Juliano technisch korrekt ist, setzt dieser Link hier die korrekten tputBefehle - mit festen Zeilenumbrüchen, `` Zeilenumbrüchen und anderen Korrekturen für "history + backspacing", die mit anderen ANSI-Codes nicht behoben werden konnten.
Eric Duncan