Again what learned: BASH Prompt und Escape Sequenzen beachten

24. Januar 2020

Beim Setzen eines eigenen Prompts gilt es zu beachten, das derjenige Text, der nicht escaped werden muss (und soll) auch nicht zwischen die Escape-Sequenzen gelangt! Der folgende Prompt ist zum Beispiel falsch:

PS1="\[\e[32m\]\[\e[m\]\[\e[31m\]\u\[\e[33m\]@\[\e[m\]\[\e[32m\]\h\[\e[m\]:\[\e[36m\w\] \[\e[33m\]\[\e[1m\]\$ \[\e[0m\]"

Und zwar deshalb, weil \w innerhalb einer \[\] Sequenz steht. Richtig ist daher folgender Prompt:

PS1="\[\e[32m\]\[\e[m\]\[\e[31m\]\u\[\e[33m\]@\[\e[m\]\[\e[32m\]\h\[\e[m\]:\[\e[36m\]\w \[\e[33m\]\[\e[1m\]\$ \[\e[0m\]"


Das \w steht hinter der Escape-Sequenz! Und das Ergebnis im konkreten Fall schaut dann so aus:


\w steht für das aktuelle Verzeichnis, ist damit reiner (ASCII) Text und hat damit \[hier nichts zu suchen\]. Wenn man sich daran hält, bekommt man einen schönen farbigen Prompt ohne Quirks und Probleme. Andernfalls kommt es jedoch zu lustigen Effekten, wie, das der Cursor beim navigieren oder bei der Benutzung von TAB plötzlich irgendwohin an den Anfang der Befehlszeile springt - oder ähnliches Ungemach. Zu beachten ist weiterhin, dass das $-Zeichen ebenfalls escaped werden muss, wie jedes andere Zeichen auch, das für die Shell ein Sonderzeichen darstellt.