Diese Frage ähnelt der Frage Kann ich meine Shell so konfigurieren, dass STDERR und STDOUT in verschiedenen Farben gedruckt werden?
Ich suche jedoch nach einer Lösung, mit der ich sowohl STDOUT als auch STDERR in EINE Farbe ändern kann . Ich versuche nicht, für STDOUT und STDERR unterschiedliche Farben festzulegen, da dies problematisch ist und Probleme verursachen kann, die in der Antwort über den obigen Link erwähnt werden.
Ich entschuldige mich, da ich nicht viel über Unix und Linux weiß. Ich suche nach einer Lösung, die es mir ermöglicht, ein paar Zeilen zu meinem .bashrc
oder hinzuzufügen .bash_profile
und die Farbe von STDOUT und STDERR dauerhaft zu ändern.
Antworten:
STDOUT und STDERR haben keine Farben. Was Farbe hat, ist Ihr Terminal (Emulator); Es ist jeweils ein Vordergrund (und eine Hintergrundfarbe) eingestellt.
Es sollte auch beachtet werden, dass STDOUT und STDERR nicht singulär sind - sie sind pro Prozessausgabestreams . Es gibt kein globales STDOUT, das für alle Programme gilt. Diese Streams werden an Ihr Terminal weitergeleitet, sind jedoch für jeden Prozess unterschiedlich.
Terminalemulatoren haben normalerweise Möglichkeiten, die Palette über ein Menü festzulegen , sodass der Standardvordergrund (angewendet auf Daten, die sowohl über STDOUT- als auch über STDERR-Streams empfangen werden ) beliebig sein kann. Sie können auch gelten ANSI - Farbcodes in Ihrem prompten und wenn Sie nicht die Farbe zurückgesetzt Sie mit
\[\033[0m\]
am Ende, wird es weiterhin anzuwenden. Beachten Sie, dass einige Anwendungen diese verwenden und zurücksetzen. Dies ist daher keine sehr ideale Methode, da beim Zurücksetzen die Standardeinstellungen des Terminals wiederhergestellt werden.Wenn Sie den Terminal-Vordergrund nicht einstellen möchten, können Sie STDOUT / STDERR pro Prozess filtern. siehe die Vorschläge hier .
quelle
.bashrc
..bashrc
Skript hinzufüge und der Effekt wird dauerhaft sein?echo
ing ANSI - Escape - Codes erwähnt in verschiedenen Links und Antworten (und ein Intro hier , aber auch hier aufpassen , dass was auch immer Sie diese außer Kraft laufen kann).Mit
zsh
Anschlüssen, die 16 Farben oder mehr à la unterstützenxterm
:Beachten Sie, dass Befehle die Vordergrundfarbe des Terminals selbst ändern können.
quelle
.bashrc
. Aber nichts passiert. Warum passiert dies ?.bashrc
ist für diebash
Shell. Diese Lösung ist fürzsh
.bash
gleichwertige, aber da Sie auf OS sind / X, gibt es keinen Grund , warum Sie nicht verwenden ,zsh
da sie standardmäßig installiert werden soll (es verwendet auch die System - Shell , dort zu sein).Dies scheint eine Frage mit dem XY-Problem zu sein - es ist nicht das Richtige, um die gewünschte Lösung zu finden:
Angenommen, die Ausgabe ist farbig und der leere Teil des Bildschirms hat eine andere Farbe oder ist mit einem Zeichen gefüllt.
Überlegen Sie, wie die Ausgabe für diese Fälle aussehen soll:
Eine leere Zeile? Zeilen, die nur mit Leerzeichen gefüllt sind? Zeilen mit nur einem Leerzeichen ? Mit einem Tab? Mit einem Leerzeichen und einer Registerkarte? Mit einer Registerkarte und einem Leerzeichen? Ja, sie sehen alle unterschiedlich aus !
Oder möchten Sie, dass eine leere Zeile aussieht - nur eine leere Zeile ?
Wenn dies der Fall ist, möchten Sie die Ausgabestreams nicht wirklich färben, und diese Antwort gilt .
Ich werde einen ähnlichen Ansatz für die Lösung von @ StéphaneChazelas geben, aber "invers":
Sie können , technisch gesehen , Farbe STDOUT und STDERR, Zeile für Zeile , mit dem Hinzufügen der richtigen Codes Farbe Flucht zu Beginn und Ende der Leitung auf beiden Strömen.
Sie müssten darauf achten, die Farbe mindestens jeder Zeile zurückzusetzen, da sonst jedes Programm, das Farbe verwendet, Ihr Terminal durcheinander bringen
ls
würde . Sie haben einfach nicht viel Kontrolle über die Ausgabefarbe - daher ist es schwierig, bestenfalls das Richtige zu finden.Aber: Sie haben die Kontrolle über alle anderen verwendeten Farben, oder?
Und Sie brauchen in diesem Fall nur eine Farbe? Großartig!
Stellen Sie die Standardfarbe der Terminals auf die Farbe STDOUT / STDERR ein und färben Sie den Rest wie gewünscht.
Sie können Ihre Shell-Eingabeaufforderung einfärben - und den Eingabeaufforderungscode verwenden, um auch andere Teile einzufärben.
Zugegeben, es ist etwas schwierig, die Befehlszeile zu färben , in der Sie Ihren Befehl bearbeiten, aber es ist sicherlich möglich. Aber versuchen Sie das nicht mit,
bash
wenn Sie es verwenden könnenzsh
, da der Code für die Eingabeaufforderung dort viel flexibler ist - das ist es, was Sie brauchen.Stellen Sie nun die Standardvordergrundfarbe Ihres Terminals auf Grau und möglicherweise auf Hintergrund ein - versuchen Sie jedoch, diese als transparent / undefiniert zu belassen.
Um die Hintergrundfarbe der Befehlszeile festzulegen, sehen Sie sich dieses Beispiel unter Ändern der Hintergrundfarbe der Befehlszeile in zsh an, wenn ich das Eingabeaufforderungsthema ändere :
(Der schwierige Teil besteht darin, die nicht verwendeten Endabschnitte der Lins in verschiedenen Situationen richtig zu machen.)
quelle