Kann STDOUT und STDERR verwenden Sie verschiedene Farben unter XTerm / Konsole?
Ist es auch erreichbar?
Müssen wir STDERR
(ie. andere streams dann STDOUT
) haben verschiedene colo(u)r". Zum Beispiel rot.
Verwenden wir bash
terminal sollte Konsole
(XTerm, gnome-terminal oder verwendbar).
Dank, wenn Sie wissen,: -)
- Sollte es nicht eine Angelegenheit für ein Programm writer? Sicherlich kann man aufbringen, etwas (wie in der vorgeschlagenen Antworten, aber es wird wohl komplettes Chaos aus-Programme, die bereits Farbe Ihren Ausgang.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Hier ist eine Lösung, die kombiniert einige der guten Ideen bereits vorgestellt.
Erstellen eine Funktion in einem bash-Skript:
Verwenden Sie es wie diese:
Es wird sich zeigen, der Befehl ist
stderr
in rot.Lesen Sie weiter für eine Erklärung, wie es funktioniert. Es gibt einige interessante features gezeigt, die von diesem Befehl.
color()...
— Erstellt eine bash-Funktion, die auch Farbe genannt wird.set -o pipefail
— Dies ist ein shell-option, wo der Fehler return-code ein Befehl, dessen Ausgabe wird über eine Pipe in ein anderes Kommando. Dies geschieht in einer subshell, die durch die Klammern, damit Sie nicht zu ändern, die pipefail option in der äußeren Schale."$@"
— Führt die Argumente, die der Funktion einen neuen Befehl."$@"
entspricht"$1" "$2" ...
2>&1
— Leitet diestderr
von der Befehlstdout
so, dass es immersed
'sstdin
.>&3
— Die Kurzform für1>&3
, dieser leitetstdout
auf eine neue temporäre Datei-Deskriptor3
.3
wird zurückgeleitet instdout
später.sed ...
— Wegen der Umleitungen obensed
'sstdin
ist diestderr
des ausgeführten Befehls. Seine Funktion ist, umgeben Sie jede Zeile mit Farbe codes.$'...'
Eine bash-Konstrukt, das es verursacht, zu verstehen backslash-escaped Zeichen.*
— Entspricht der gesamten Linie.\e[31m
— Die ANSI-escape-Sequenz, die bewirkt, dass die folgenden Zeichen werden rot&
— Diesed
ersetzen von Zeichen erweitert, dass der gesamte gematchte string (die gesamte Zeile in diesem Fall).\e[m
— Die ANSI-escape-Sequenz, setzt sich die Farbe.>&2
— Die Kurzform für1>&2
, dieser leitetsed
'sstdout
zustderr
.3>&1
— Leitet die temporäre Datei-Deskriptor3
zurück instdout
.Hier ist eine Erweiterung mit dem gleichen Konzept, das auch die macht STDOUT grün:
color
Funktion ist, dass der exit-code wird verloren, es sei denn, Sie legen vorset -o pipefail
(siehe bclary.com/blog/2006/07/20/pipefail-testing-pipeline-exit-codes)Können Sie auch überprüfen, stderred: https://github.com/sickill/stderred
.bashrc
). Trotzdem danke!Ich kann nicht sehen, dass es irgendeinen Weg gibt, für den terminal-emulator, dies zu tun.
Die Schnittstelle zwischen dem terminal-emulator und der shell/app erfolgt über ein pseudo-tty, wo der terminal-emulator ist auf der master-Seite und die shell/app auf die andere. Die shell/app haben sowohl stdout und stderr mit dem gleichen pty, so dass, wenn der terminal-emulator liest aus der pty-für die shell/app-Ausgabe kann es nicht mehr sagen, die war auf stdout geschrieben werden und die auf stderr.
Verwenden Sie eine der Lösungen, die die Daten abfängt, die zwischen der Anwendung und der slave-pty und fügt escape-codes zur Steuerung der terminal-Ausgabe colo(u)r.
Hier ist ein kleines Awk-Skript, das drucken alles, was Sie passieren in rot.
Es einfach druckt jede Zeile, die es erhält, auf stdin innerhalb der erforderlichen escape-codes für die Anzeige im roten. Es ist gefolgt von einem escape-code zum zurücksetzen des Terminals.
(Wenn Sie eine andere Farbe, ändern Sie die 31)
Speichern Sie es auf colr.awk, ein
chmod a+x
, und verwenden Sie es wie so:Es hat den Nachteil, dass die Zeilen möglicherweise nicht angezeigt in Ordnung, weil
stderr
geht direkt an die Konsole, währendstdout
geht zuerst durch einen zusätzlichen Prozess.Ich glaube, Sie sollten die standard-escape-Sequenzen auf stderr. Haben Sie einen Blick auf diese.
Hilite dies tun wird. Es ist eine leichte Lösung, aber Sie haben, um es aufzurufen für jeden Befehl, zB.
hilite gcc myprog.c
. Einen radikaleren Ansatz wurde in meiner experimentellen shell Gush die zeigt, stderr aus alle Befehle ausführen, rot, stdout in schwarz. So oder so ist sehr nützlich für software-builds wo man viel Leistung mit ein paar Fehlermeldungen, die man leicht verpasst, wenn nicht hervorgehoben.Einfache Lösung, um Farbe STDOUT in rot mit
grep
:Das funktionieren sollte, ohne irgendetwas installieren zu mehr. (
grep
sollte bereits überall installiert.)Genommen hier von Dennis Kommentar superuser.com.