Bei Verwendung einer farbigen Eingabeaufforderung wird auf meinem System die letzte Zeile der Ausgabe des vorherigen Befehls überschrieben, wenn das letzte Zeichen der Ausgabe keine neue Zeile ist.
Beispiel: Unter Verwendung der nicht farbigen Standard-Bash-Eingabeaufforderung haben wir:
[meinbenutzername @ meinhostname dirname] $ echo -n foo-bar foo-bar [meinbenutzername @ meinhostname dirname] $
Dies wird erwartet.
Verwenden Sie jedoch die folgende kolorierte Eingabeaufforderung:
PS1='\[\033[1;32m\]\u@\h\[\033[0m\]:\[\033[1;34m\]\w\[\033[0m\]\$ '
Wir haben (hier ohne die Farbe gezeigt):
meinbenutzername @ meinhostname: ~ / pfad / zu / dirname $ echo -n foo-bar meinbenutzername @ meinhostname: ~ / pfad / zu / dirname $ rname $
Der Cursor befindet sich jetzt auf dem letzten "r" in der Zeile. Wenn Sie an der Eingabeaufforderung einige Zeichen eingeben, wird der letzte "rname $" überschrieben. Das Endergebnis ist, dass, wenn die Ausgabe des vorherigen Befehls nicht in einer neuen Zeile endet, ich nicht sehen kann, was es ist. Dies ist das Wichtigste, was zu beheben ist. Die Art und Weise, wie die zusätzlichen Zeichen angezeigt werden, aber überschreibbar sind, stört mich nicht sonderlich, wäre aber auch nett zu beheben.
Ich habe dies mit anderen kolorierten Eingabeaufforderungen aus der Bash-Dokumentation und einigen kolorierten Eingabeaufforderungen aus anderen Superuser-Antworten zu kolorierten Eingabeaufforderungen versucht, und alle verhalten sich genau gleich.
$ bash --version GNU Bash, Version 3.1.17 (1) -Release (x86_64-redhat-linux-gnu) Copyright (C) 2005 Free Software Foundation, Inc.
Ich bin mir nicht sicher, aber ich denke, es ist CentOS. Ich weiß nicht, welche Version. Geben Sie mir den Befehl, das Betriebssystem zu überprüfen, und ich werde es ausführen.
quelle
PROMPT_COMMAND
, um festzustellen , ob das Verhalten weiterhin besteht. Es wäre auch hilfreich, wenn Sie Ihre Bash-Version (runbash -- version
) und Ihr Betriebssystem angeben würden .unset PROMPT_COMMAND
hilft nicht$ echo $PROMPT_COMMAND
gibtecho -ne "\033_${USER}@${HOSTNAME%%.*}:${PWD/#$HOME/~}"; echo -ne "\033\\"
Antworten:
Meine bevorzugte Lösung besteht einfach darin, die Eingabeaufforderung immer mit einem Zeilenumbruch zu beginnen. Auf diese Weise habe ich zwischen der letzten Befehlsausgabe immer eine Leerzeile (außer natürlich in diesem Fall), was sich für mich natürlicher anfühlt. Und der schlimmste Fall ist, dass ich keine Leerzeile dazwischen bekomme, anstatt Text zu überschreiben, wie Sie es sehen. Ich kann es nur wärmstens empfehlen, wenn Sie es eine Weile ausprobieren und es einfach nicht aushalten können.
Ein zusätzlicher Vorschlag, wenn Sie dazu bereit sind: Ich verwende auch eine mehrzeilige Eingabeaufforderung, um die Befehlszeile vor dem Zeilenumbruch so lang wie möglich zu gestalten (oder einen Bildlauf durchzuführen, wenn Ihr Terminal oder Ihre Shell dafür konfiguriert ist). Ich möchte auch die Versionsnummer kennen. Diese beiden zusammen:
Schließlich möchte ich auch Zeitstempel vor und nach dem Ausführen von Befehlen drucken lassen. Eine vereinfachte Version von dem, was ich dafür benutze, ist:
Kopf drehen noch? :)
quelle