Frage
Ich werde von Linux verwendet, um eine farbige Eingabeaufforderung in meinen Shells zu haben, und möchte dies auch in meinem OS X -Terminal implementieren. Der Terminal reagiert jedoch unterschiedlich. Wenn ich meinen normalen PS1 -Code benutze, wird die rechte Seite einer Zeile an einem seltsamen Punkt abgeschnitten (sicherlich nicht das rechte Ende des Terminalfensters). Und auch die nächste Zeile zeigt sich nicht in der nächsten Zeile, sondern in derselben Zeile.
Erwartete Reaktion:
erik2:~[06:46 am]$ expectedexpectedexpectedexpectedexpectedexpectedexpect
edexpected_
Wirkliche Reaktion:
ectedexpected_am]$ expectedexpectedexpectedexpectedexp
Ist das normal für Terminal? Gibt es eine Alternative? Habe ich gerade etwas falsch codiert? Schauen Sie sich meinen PS1 -Code an:
export PS1="\033[0;34m\u:\W\e[0;32m[\@]\e[m\033[0;34m$\033[m "
Lösung
Sie müssen den nicht druckenden Teilen der Eingabeaufforderung entkommen, indem Sie sie mit ihnen umgeben \[…\]
.
export PS1="\[\033[0;34m\]\u:\W\[\e[0;32m\][\@]\[\e[m\033[0;34m$\033[m\] "
Andernfalls wird Readline über den verbleibenden Platz in der Befehlszeile verwirrt.