
Ich habe PS1
das mit einer einleitenden Farbsequenz (wie \[\e[0;32m\]
) beendet, um den gesamten Text im Terminal farbig zu machen (in diesem Fall grün). Wenn ich jedoch einen Befehl wie verwende (der in meinem ls
als Alias verwendet wird ), sind die Farben in der Ausgabe ein wenig durcheinander: grün bis zum ersten „farbigen“ Wort und der folgende ungefärbte Text ist weiß statt grün.ls --color=auto
.bashrc
Gibt es eine Möglichkeit, in allen Fällen eine saubere Ausgabe zu erhalten? Ich bin mit Weiß als „Standard“-Textfarbe einverstanden, wenn die Ausgabe Farben enthält, aber ich möchte, dass es konsistent ist.
Am liebsten wäre mir natürlich eine Lösung, die automatisch auf alle Befehle angewendet wird und bei der ich die Art und Weise, wie ich sie aufrufe, nicht ändern muss.
Persönlich habe ich keine Ideen. Vielleicht kann man etwas tun, um „on the fly“ nach Escape-Sequenzen in der Ausgabe zu suchen und einige Ersetzungen vorzunehmen? Ich weiß jedoch nicht, wie man das umsetzt, insbesondere so, dass es „hinter den Kulissen“ geschieht.
Antwort1
Der Grund ist, dass Sie es falsch machen.
Sie sagten, dass Sie am Ende Ihrer Eingabeaufforderung eine „offene“ Farbsequenz haben. Das ist falsch. Farbennicht nisten. Es gibt kein „Öffnen“ und „Schließen“. Es heißt „Wechseln zu ...“ oder „Auf Standard zurücksetzen“ (was eigentlich „Wechseln zu 0“ heißt). Wenn also ls --color=auto
die Farbe für etwas geändert wird, wird nach Abschluss die Sequenz zum Zurücksetzen auf den Standard ausgegeben. Es heißt nicht „Zurück zum vorherigen Zustand“.
Stellen Sie das Terminal so ein, dass die Textfarbe verwendet wird, die Sie als „Standard“ festlegen möchten (d. h. Palettennummer 0). Wenn Sie dann für Ihre Eingabeaufforderung eine andere Farbe wünschen, legen Sie diese am Anfang fest und setzen Sie sie am Ende zurück.
Weitere Informationen finden Sie im Bash Prompt HOWTOKapitel 6. ANSI-Escape-Sequenzen: Farben und CursorbewegungDokumentation.
Antwort2
Wie bereits zuvor beantwortet, PS1
ist es keine gute Idee, ein Ende mit einer öffnenden Farbsequenz zu haben. Dadurch wird die Ausgabe farbiger Befehle falsch. Wenn Sie die Vordergrundfarbe Ihres Terminals (die normale Textfarbe) grün haben möchten, stellen Sie sie in den Einstellungen Ihres Terminalemulators auf beiden Maschinen einfach auf Grün ein – in diesem Fall Ihre guake
Terminaleinstellungen. Auf diese Weise bleibt die Vordergrundfarbe grün und die Befehle mit farbiger Ausgabe verwenden diese Farbe, um normalen Text anzuzeigen. Setzen Sie Ihre PS1
Eingabeaufforderung zurück, wie es mit erfolgen sollte \[\e[0m\]
.
Antwort3
So erstelle ich verschiedenfarbige Eingabeaufforderungen für verschiedene Maschinen.
case $HOSTNAME in
host1*) PSC="\e[32m" ;;
host2*) PSC="\e[33m" ;;
host3*) PSC="\e[34m" ;;
host4*) PSC="\e[35m" ;;
*) PSC="\e[36m" ;;
esac
PS1="[\j]\[${PSC}\]\u@\h(\l) \[\e[37m\][ \w ]\[\e[00m\]\n\[\e[1m\]\#\[\e[0m\] \$ "
Den Rest können Sie nach Belieben anpassen. Legen Sie eine Kopie dieser ~/.bashrc auf jedem Rechner ab, den Sie verwenden. Wenn Sie ein NFS-gemountetes Home verwenden, geschieht dies ganz automatisch.