Farb-Codes bringen Bash durcheinander

Ich habe mir mit ANSI-Escape-Codes wie \e[34;47m einen bunten Prompt für meine Bash gebaut. Leider verhält sich die Shell jetzt sehr seltsam. Was läuft falsch?

In Pocket speichern vorlesen Druckansicht 5 Kommentare lesen
Lesezeit: 1 Min.

Ich habe mir mit ANSI-Escape-Codes wie \e[34;47m (blauer Text auf weißem Grund) einen schön bunten Prompt für meine Bash gebaut. Leider verhält sich die Shell jetzt sehr seltsam, wenn ich längere Befehle eingebe. Zeilen werden zu früh umgebrochen, der Cursor springt und überschreibt Text teilweise. Kann man das beheben?

Wahrscheinlich bringen die Escape-Codes Ihre Bash beim Berechnen der Länge des Prompts durcheinander, schließlich werden diese Zeichen nicht dargestellt. Die Shell nimmt dann an, der Prompt bestünde aus mehr (sichtbaren) Zeichen, als tatsächlich angezeigt werden. Dieser Unterschied führt zu den beschriebenen Problemen.

Die Lösung ist zum Glück einfach, macht die Prompt-Konfiguration aber leider schwerer lesbar: Umrahmen Sie jede Sequenz von Escape-Codes mit \[ und \], Ihr Beispiel-Code lautet dann also: \[\e[34;47m\]. Diese Klammern markieren für die Bash den Inhalt als nicht druckbare Zeichen und sorgen so für eine korrekte Berechnung der Länge. (syt)