Ich habe eine benutzerdefinierte PS1-Farbe, in der ich die tatsächlichen Shell-Befehle in einer bestimmten Farbe habe, damit ich schnell sehen kann, welche Befehle ich eingegeben habe, und sie von der Befehlsausgabe selbst trennen kann.
Angenommen, die Farbe in PS1 ist für die Eingabeaufforderung auf "Blau" gesetzt und die Standardfarbe in meiner Shell ist Weiß.
- Ich gebe einen Befehl ein, zB ls, (ls -l ist blau gefärbt)
- Die Ausgabe, die es erzeugt, erste Zeile ist immer noch blau
- Alle verbleibenden Zeilen sind weiß
Was ich möchte, ist, dass die gesamte Ausgabe nach dem Befehl 'weiß' ist.
Ein anderes Beispiel:
- Ich tippe einen Befehl 'Katze', Farbe ist blau
- Die Ausgabe kommt, die gesamte Ausgabe ist blau
Ich möchte, dass die Ausgabe "weiß" ist, während die Eingabeaufforderung beibehalten wird, die ich "blau" eingegeben habe.
Bei einigen Befehlen ist es in Ordnung, bei anderen Befehlen fließt dieselbe Farbe in die erste Zeile der Ausgabe über, und dann wird die Standardfarbe aktiviert. Bei einigen anderen Befehlen hat die gesamte Ausgabe (z. B. cat) dieselbe Farbe.
Gibt es eine Möglichkeit, nur die Befehle, die ich eingegeben habe, in einer Farbe und den Rest auf der Standardeinstellung zu halten?
Ich bin auf OSX.
EDIT # 1
Hier ist ein Screenshot, auf den @ derobert in den Kommentaren verlinkt ist und der zeigt, wonach ich suche.
Antworten:
Grundsätzlich möchten Sie die Terminalfarbe zurücksetzen, bevor bash den Befehl ausführt. Dies kann mit einem erfolgen
trap
.Beispielsweise:
Bash führt den
DEBUG
Trap unmittelbar vor dem Befehl aus, sodasstput sgr0
vor jedem Befehl (wodurch die Formatierungsattribute zurückgesetzt werden) ausgeführt wird.Das
[[ -t 1 ]]
ist eine Sicherheitsprüfung , um sicherzustellen , dass STDOUT ist eigentlich ein Terminal. In einigen Fällen ist STDOUT von bash nicht mit einem Terminal verbunden (Piping, Remote-SSH usw.), sodass Sie keinetput
Terminal-Escape-Codes senden möchten .quelle
.bashrc
(oder wo$PS1
immer eingestellt ist). Ich würde es direkt neben die$PS1
Definition setzen, damit Sie wissen, dass sie verwandt sind.