Farbiger Text, der mit PS1 eingerichtet wurde, und farbige Ausgaben von Befehlen bringen sich gegenseitig durcheinander

Farbiger Text, der mit PS1 eingerichtet wurde, und farbige Ausgaben von Befehlen bringen sich gegenseitig durcheinander

Ich habe PS1das 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 lsals 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=autodie 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, PS1ist 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 guakeTerminaleinstellungen. Auf diese Weise bleibt die Vordergrundfarbe grün und die Befehle mit farbiger Ausgabe verwenden diese Farbe, um normalen Text anzuzeigen. Setzen Sie Ihre PS1Eingabeaufforderung 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.

verwandte Informationen