Meine Bash-Eingabeaufforderung, die ich, wie ich zugeben muss, von einigen Stellen geklaut und zusammengeschustert habe, fügt beim Scrollen durch den Bash-Verlauf mit den Auf-/Ab-Pfeilen manchmal Teile vorheriger Befehle zu ihrer Länge hinzu.
Meine vorherigen Befehle wären beispielsweise:
ls
cd /home/caleb
vim .bashrc
Wenn ich bei meiner Eingabeaufforderung war und zweimal nach oben gescrollt habe, könnte es so aussehen:
$ vim .bcd /home/caleb
Wobei die ersten fünf Zeichen vom letzten Befehl übrig bleiben.
Hat jemand eine Idee, warum das passiert und wie es gestoppt werden kann?
Meine Eingabeaufforderung wird mit diesem Code festgelegt (viel zu lang, um ihn hier einzufügen):https://gist.github.com/1679352
Antwort1
Irgendwo ist Ihre Eingabeaufforderung fubar. Normalerweise passiert das, dass Ihre Shell denkt, sie gebe nicht druckbare Termcodes aus und erwartet, dass diese Platz beanspruchen. Der beste Rat, den ich Ihnen geben kann, ist, Ihrer Eingabeaufforderung systematisch etwas hinzuzufügen (oder wegzunehmen), bis dieses Verhalten aufhört, um den Code zu isolieren, der dieses Problem verursacht.
Antwort2
Die Farbcodes müssen in eckige Klammern gesetzt werden. Die Klammern informieren bash, dass der eingeschlossene Text nicht gedruckt werden soll
Aufbauend auf dem Beispiel von @Phreditor zeigt dies, dass jede Formatierung nach dem Zeilenumbruch zum ursprünglichen Problem führt:
export PS1="\n\n\[\033[01;33m[\w]\033[00m\n\033[0;90m\$ "
Das Einschließen des Formatcodes in [] stellt sicher, dass störendes Verhalten nie auftritt:
export PS1="\n\[\[\033[01;33m\][\w]\[\033[00m\]\n\[\033[0;90m\]\$ "
Die Dokumentation:http://tldp.org/HOWTO/Bash-Prompt-HOWTO/nonprintingchars.html
Da die Werte durch die PS1-Formatierung sehr lang und schwer lesbar werden, habe ich die Formatcodes in Variablen eingefügt:
BYELLOW='\[\033[01;33m\]'
IBLACK='\[\033[0;90m\]'
PS_CLEAR='\[\033[0m\]'
export PS1="\n${BYELLOW}[\w]${PS_CLEAR}\n${IBLACK}\$ "
Antwort3
Ich hatte das gleiche Problem und es hing mit den Farbdefinitionen zusammen.
In meinem Fall habe ich eine mehrzeilige Eingabeaufforderung (bietet den meisten Platz für den aktuellen Befehl, unabhängig von der in der Eingabeaufforderung angezeigten Pfadlänge).
Schlechte Version:
export PS1="\n\n\[\033[01;33m[\w]\n\033[00m\$ "
Gute Version:
export PS1="\n\n\[\033[01;33m[\w]\033[00m\n\$ "
\033[00m
beendet die Farbe. Wenn es nach der neuen Zeile ( \n
) steht, verhindert es das ordnungsgemäße Neuzeichnen im Terminal, da vorherige Befehle mit der Hintergrundfarbe überschrieben werden. Das Verschieben hinter die neue Zeile hat das Problem gelöst.
(mit Terminal unter Mac OS 10.8)
Antwort4
Ich hatte dieses Problem. Was habe ich festgestellt?
Wenn Sie Farben innerhalb der PS1-Variable haben (Beispiel: "\e[35m"), müssen diese IMMER von "\[" und "\]" umgeben sein (Beispiel: "\[\e[35m\]").
Als ich alle Farben in PS1 gemäß dieser Regel markiert habe, hat es funktioniert!
Keine Probleme mehr beim Scrollen durch den Bash-Verlauf.
SCHLECHTES BEISPIEL:PS1="\e[0;36m[\u@\h[\e[1;31m$ORACLESID\e[0;36m] \W]\e[0m"; PS1 exportieren
GUTES BEISPIEL:PS1="\[\e[0;36m\][\u@\h[\[\e[1;31m\]$ORACLESID\[\e[0;36m\]]\W]\[\e[0m\] "; exportiere PS1