Seltsames Verhalten im Terminal mit benutzerdefiniertem .bash_profile

8

Es ist schwer, das Verhalten zu beschreiben, aber hier ist ein kurzer Clip:

http://www.youtube.com/watch?v=9KqHBA94FPI

Grundsätzlich geht der Einfügeblock bei der Eingabe mehrzeiliger Befehle am Ende der ersten Zeile zum Anfang der ersten Zeile zurück, schreibt über die erste Zeile und fährt dann wie gewohnt mit der zweiten, dritten usw. Zeile fort . Beim Löschen kann ich den gesamten Befehl sowie die Leerzeichen in der Zeile über dem Befehl löschen (ich habe ihn so eingerichtet, dass Befehle nach einer Zeile eingefügt werden, die Benutzer- @ Host- / Verzeichnisinformationen enthält. Anschließend kann ich sogar den Befehl löschen Der letzte Teil des Verzeichnisses und des Hosts, den ich oben beschrieben habe. Tut mir leid, dass ich das schrecklich erklären kann. Das Video wird einen besseren Job machen.

Hier ist der Inhalt meines .bash_profile:

export PS1="\e[31m\u\e[0m@\e[34m\h\e[33m\w\n \$ \e[0m "
Blair Beckwith
quelle

Antworten:

12

Sie sollten Ihre nicht druckbaren Zeichen (in diesem Fall Ihre ANSI-Escape-Sequenzen) mit Bash-Escape-Sequenzen umgeben: \[und \]. Auf diese Weise erkennt bash, dass die eingeschlossenen Zeichen nicht sichtbar sind, d. H. sie nehmen keinen Platz ein, dh. Sie sollten nicht in die vom Zeilenumbruch verwendete Wortlängenberechnung einbezogen werden.

Mit anderen Worten: Ändern Sie Ihre PS1Definition:

export PS1="\e[31m\u\e[0m@\e[34m\h\e[33m\w\n \$ \e[0m "

… Zu:

export PS1="\[\e[31m\]\u\[\e[0m\]@\[\e[34m\]\h\[\e[33m\]\w\n \$ \[\e[0m\] "

Und hier ist der gleiche PS1Wert, nur für das Lesen durch Menschen, mit möglicherweise verbesserter Lesbarkeit (ANSI-Escapezeichen in der unteren Reihe, Bash-Escapezeichen in der Mitte und Drucken von Zeichen in der oberen Zeile).

          \u          @          \h          \w\n \$
\[      \]  \[     \] \[      \]  \[      \]        \[     \] 
  \e[31m      \e[0m     \e[34m      \e[33m            \e[0m    

Weiterführende Literatur:

Jari Keinänen
quelle
Das ist perfekt, hat mein Problem gelöst. Vielen Dank für die Hilfe!
Blair Beckwith
Blair, willkommen bei Ask Different! Wenn Sie eine Antwort auf Ihre Frage mögen, stimmen Sie dieser zu und akzeptieren Sie sie.
Nohillside
0

Ich alle,

Ich hatte ähnliche Probleme und fand eine Lösung, indem ich meine PS1-Variable von der ursprünglichen in eine sehr einfache änderte, nur meinen Namen: export PS1 = Alex

Jetzt hat mein Terminal kein seltsames Verhalten mehr.

Hoffe es wird helfen.

Alex (auf Mac Lion 10.8)

user43414
quelle