Meine Bash-Eingabeaufforderung, von der ich zugeben werde, dass sie von einigen Stellen gestohlen und zusammengeschustert wurde, fügt manchmal einen Teil der vorherigen Befehle zu ihrer Länge hinzu, wenn der Bash-Verlauf mit den Auf- / Ab-Pfeilen gescrollt wird.
Zum Beispiel, wenn meine vorherigen Befehle waren:
ls
cd /home/caleb
vim .bashrc
Wenn ich an meiner Eingabeaufforderung war und zweimal hochgescrollt 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 dies geschieht und wie es gestoppt werden kann?
Meine Eingabeaufforderung wird mit diesem Code festgelegt (viel zu lang, um ihn hier einzuschließen ): https://gist.github.com/1679352
Antworten:
Irgendwo ist Ihre Aufforderung fubar. In der Regel geht Ihre Shell davon aus, dass sie nicht druckbare Termcodes ausgibt und Speicherplatz beansprucht. Der beste Rat, den ich Ihnen geben kann, ist, Ihre Eingabeaufforderung systematisch zu ergänzen (oder von ihr zu entfernen), bis dieses Verhalten aufhört, den Code zu isolieren, der dieses Problem verursacht.
quelle
Die Farbcodes müssen in eckige Klammern gesetzt werden. Die Klammern informieren bash, dass der beigefügte Text nicht gedruckt werden soll
Aufbauend auf dem Beispiel von @ Phreditor zeigt dies, dass jede Formatierung nach dem Zeilenumbruch zu dem ursprünglichen Problem führt:
Das Einschließen des Formatcodes in [] stellt sicher, dass kein störendes Verhalten auftritt:
Die Dokumentation: http://tldp.org/HOWTO/Bash-Prompt-HOWTO/nonprintingchars.html
Da die PS1-Formatierung dazu führt, dass der Wert so lang und schwer lesbar ist, habe ich die Formatcodes in Variablen eingefügt:
quelle
\033
NICHT maskiert werden sollten. Es dürfen nur die umhüllenden eckigen Klammern entfernt werden.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 von der Eingabeaufforderung angezeigten Pfadlänge).
Schlechte Version:
Gute Version:
\033[00m
beendet die Farbe. Befindet es sich hinter der neuen Zeile (\n
), wird das korrekte Neuzeichnen im Terminal verhindert, um vorherige Befehle mit Hintergrundfarbe zu überschreiben. Das Verschieben hinter die neue Zeile löste das Problem.(Verwenden von Terminal unter Mac OS 10.8)
quelle
\n
war auch der Schuldige für mich. Vielen Dank!Ich denke tatsächlich, dass dies mit einem fehlenden Trennzeichen für nicht druckbare Zeichen zu tun hat. Ich hatte genau das gleiche Problem, aber das Verschieben vor dem Zeilenwechsel (\ n) hat es nicht behoben. Stattdessen habe ich alle nicht druckbaren Zeichen (hier Farbbefehle) korrekt mit '\ [' und '\]' umgeben.
Schlecht (funktioniert, hat aber das oben beschriebene Problem mit dem Verlaufspülung):
Gut (Umgeben von allen Farbbefehlen mit '\ [' und '\]' - zeigt den Verlauf der gestampften Befehle nicht an):
Und wenn Sie dies in so etwas wie SecureCRT setzen, um es bei der Anmeldung an ein System automatisch zu senden, müssen Sie möglicherweise alles doppelt maskieren (überall doppelte Backslashes setzen), wenn das automatische Anmeldesystem den ersten Backslash selbst verwendet, um das zu sendende Zeichen zu bestimmen :
(Dies gilt auf jeden Fall für SecureCRT und möglicherweise auch für andere, z. B. PuTTY oder TeraTerm - Tests, die Ihrerseits erforderlich sind.)
quelle