Unterschiedliche Farbe für Befehl und Ausgabe


13

Ich habe mich gefragt, ob es möglich ist, die Farbe der Ausgabe eines Befehls in Linux in eine andere Farbe als die der Befehlszeile zu ändern, in die ich eingebe. Es ist etwas eintönig und schwer zu finden, wo die Ausgabe beginnt. mögen,

@USER/Destop$ ----> blue
/*
--------------
output file in white
-----------
*/

Vielen Dank


2
Vielleicht können Sie mit precmd_functions die Farbe der Eingabeaufforderung ändern und sie vor preexec_functions zurücksetzen, oder so ähnlich. (in zsh, ich weiß nicht, ob es eine Entsprechung für andere Muscheln gibt)
pataluc

Ich habe gerade versucht, meinen Vorschlag, aber ich bekomme den Befehl nicht farbig ... :(
pataluc

1
@pataluc: Es ist mir gelungen preexec () { echo -n "\\e[40;34m" }; Die precmdFunktion ist IMHO nicht notwendig, es scheint, dass zsh die Farbe selbst zurücksetzt, bevor die Eingabeaufforderung angezeigt wird. Dies funktioniert jedoch nur bei Befehlen, die die Farbe selbst nicht verändern (prominentes Beispiel ist ls), wie von Aaron hervorgehoben. Mit cat, bc, eingebauten Shell - Befehlen usw. (auch alpine) das funktioniert gut.
mpy

@mpy Ich habe es auch geschafft, mit allen Befehlen, vorausgesetzt, Raj will den Befehl und nicht das Ergebnis färben, ich fügte "\\e[40;34m"an das Ende meines PROMPTvar, und setzen Sie es wieder auf weiß mit preexec () { echo -n "\\e[40;37m" }...
pataluc

1
@pataluc: Entschuldigung, jetzt verstehe ich den Punkt. Um die Befehlszeile einzufärben, verwenden Sie einfach zle_highlight=(default:fg=cyan)eine aktuelle zsh-Version. Zsh bietet auch dynamische Färbung an, wie fish; siehe den abschnitt CHARACTER HIGHLIGHTING in man zshzle.
mpy

Antworten:


5

Nicht wirklich; Die Farbe der Ausgabe eines bestimmten Programms wird vom Befehl und nicht vom Terminal gesteuert.

Vorausgesetzt, Ihr Terminal versteht die ANSI-Escape-Codes für Farbe (die meisten tun dies), können Sie mit Escape-Codes die gewünschte Aufforderungsfarbe am Anfang der Aufforderung und die gewünschte Ausgabefarbe am Ende festlegen. Dies würde dazu führen, dass Ihre Befehlszeilen auch in der Farbe angezeigt werden, die Sie für die Ausgabe festgelegt haben. Dies ist jedoch wahrscheinlich so ähnlich, wie Sie es möchten. Zum Beispiel das Folgende:

$ export PS1='\[\033[00;35m\]\u\[\033[00m\]@\[\033[00;35m\]\H\[\033[00m\]:\[\033[00;33m\]\W\[\033[00m\] \$\[\033[00;34m '

Sie erhalten eine Eingabeaufforderung, die wie folgt aussieht:

user@host:wd $ _

mit 'user' und 'host' in lila, 'wd' (dein cwd) in braun (dunkelgelb) und allem nach dem '$' in was auch immer dein terminal für hellblau verwendet. (Ein Standard-xterm gibt dies in Cyan wieder. Das Gnome-Terminal scheint standardmäßig einen schönen Farbton von Kornblumenblau zu haben.)

Der tatsächliche Farbcode, wie er in dem für bash erforderlichen Format angegeben ist, ist beispielsweise \[\033[00;35m\], wo 00;35sich die tatsächliche Farbspezifikation befindet; Das führende 00ändert sich selten, kann aber IIRC-Fettdruck- (01), Unterstreichungs- (??) und Umkehrvideoeffekte (??) erzeugen, während das nachfolgende '35' die tatsächliche Farbe ist, die in diesem Fall lila ist.

Es ist überraschend schwer, eine anständige Liste von ANSI-Farbcodes zu finden, aber die Vordergrundfarben reichen von 30 bis 37 und die Hintergrundfarben von 40 bis 47 wie folgt:

color        fg  bg
black        30  40
red          31  41
green        32  42
yellow       33  43
blue         34  44
purple       35  45
cyan         36  46
gray/white   37  47

Denken Sie daran, dass Programme, die Sie ausführen und deren Farben nicht über Escape-Codes festgelegt wurden, diese Farbe annehmen, da Sie für alles, was Ihrer Eingabeaufforderung folgt, eine Standardfarbe festlegen Pager wird die Ausgabe wahrscheinlich in der Farbe angezeigt, die Sie für andere Befehle festgelegt haben. Inzwischen Befehle , die sie ihre eigenen Farben über Escape - Codes gesetzt werden Ihre Bemühungen völlig ignorieren.


1
Anstelle von Escape-Codes habe ich festgestellt, dass die Verwendung tputzum Kolorieren viel besser lesbar ist. Beispiel: Meine Eingabeaufforderung (in Bash) export PS1="[\t \[$(tput setaf 9)\]\u\[$(tput setaf 15)\]@\[$(tput setaf 12)\]\h \[$(tput sgr0)\]\w ] \$ "gibt die Uhrzeit aus, dann den Benutzernamen in einer Farbe @und den Hostnamen in einer dritten (derzeit rot, weiß und blau). Anschließend werden PWD und ausgegeben $ . Es ist sehr leicht auf einen Blick zu erkennen, wo sich die Eingabeaufforderungen befinden, wenn Sie durch den Verlauf zurückblättern.
MattDMo

Du bist großartig ... das ist alles, was ich jemals wollte. Danke, können Sie mir sagen, welche Werte ich ändern soll, wenn ich jemals die Farben ändern möchte?
raj

Und gibt es eine Möglichkeit, die letzte Farbe so zu erhalten, wie sie zuvor gefärbt war?
raj

und warum ist die Änderung nicht dauerhaft, jedes Mal, wenn ich mich anmelde, muss ich sie neu einfärben
raj

1
Die Änderung ist nicht dauerhaft, es sei denn, Sie fügen sie der Initialisierungsdatei Ihrer Shell hinzu ~/.bashrc. Suchen Sie die Zeile, in der PS1 (Ihre Eingabeaufforderungszeichenfolge) festgelegt ist, und ändern Sie sie wie in der Antwort beschrieben. Was Sie ändern müssen, hängt davon ab, wie Ihre Eingabeaufforderungszeichenfolge eingerichtet ist. Die meisten wichtigen Details sind jedoch in meiner Antwort enthalten. Den Rest finden Sie, indem Sie ein wenig googeln. Ich bin mir nicht sicher, was Sie mit "gibt es eine Möglichkeit, die letzte Farbe so zu halten, wie sie vorher war?"
Aaron Miller

7

Sie können die Ausgabe an ein Programm übergeben, das die Färbung vornimmt. Zum Beispiel gibt es Programme wie pycolor:

pycolor module.py

So bauen Sie Ihre eigenen:

red="$(tput setaf 1)"
reset="$(tput sgr0)"
echo $'foo\nbar' | sed -e "s/\(bar\)/$red\1$reset/"

Mehr zur Farbausgabe.


3

Ja, ich arbeite für Bash, zumindest unter Linux und Mac OS.

Stellen Sie zuerst einige Attributvariablen ein und die PS1-Eingabeaufforderung, um das Terminal mit den gewünschten Befehlszeilenattributen zu belassen. Beispiel:

bold="\[$(tput bold)\]"
none="$(tput sgr0)"
export PS1="\$ $bold"

Verwenden Sie dann den bash DEBUG-Trap, der unmittelbar vor jedem Befehl ausgeführt wird, um die Textattribute für die Befehlsausgabe zu ändern:

trap 'echo -ne "${none}"' DEBUG

1

Eine andere Alternative (befehlsbezogen) ist grc - generic colorizer. Das Einrichten der regulären Ausdrücke zum Einfärben von Objekten ist sehr aufwändig. Ich habe es hier erfahren:

https://unix.stackexchange.com/questions/8414/how-to-have-tail-f-show-colored-output?newsletter=1&nlcode=17737|321c

und hier:

https://unix.stackexchange.com/questions/26313/colored-find-output

Ich bin kein Blitz mit Regexen, also habe ich nicht viel mit diesen Befehlen gearbeitet.


Ich benutze dies mit allen meinen Tail-Log-Skripten. Fabelhaft.
Stefgosselin

1

Werfen Sie diese in Ihre .bashrc-Datei und geben Sie die Datei nach dem Speichern als Quelle ein.

blk=$'\x1b[90m' # Sets text to black
red=$'\x1b[31m' # Sets text to red
grn=$'\x1b[92m' # Sets text to green
ylw=$'\x1b[93m' # Sets text to yellow
blu=$'\x1b[94m' # Sets text to blue
pur=$'\x1b[95m' # Sets text to purple
cyn=$'\x1b[96m' # Sets text to cyan
wht=$'\x1b[97m' # Sets text to white
rst=$'\x1b[0m'  # resets to default terminal color

Sobald dies erledigt ist, können Sie diese in Ihrem Terminal dauerhaft verwenden oder bis Sie die Variablen entweder auskommentieren oder vollständig löschen. Sie können sie in Skripten auf Ihrem Computer oder mit Befehlsersetzung oder was auch immer verwenden. Hier ist ein Beispiel, wie ich sie persönlich benutze:

echo -e "${red}This text is red.${rst}"
printf "${grn}This text is green.\n${rst"

Normalerweise verwende ich diese mit einzelnen Befehlen echound / oder printfBefehlen, aber Sie können sie verwenden, um andere Befehle wie den pingBefehl einzufärben . Fügen Sie Folgendes hinzu .bashrc, um die Effekte zu erhalten. Geben Sie dann eine Quelle für Ihre .bashrcDatei ein und führen Sie den cpingBefehl zur Verwendung pingmit lila Text aus. Sie können jede Befehlsfunktion so einstellen, dass jede Farbe verwendet wird, die Ihr Terminal unterstützt.

# Add this to your .bashrc file
colored_ping() {

    echo -e "${pur}$(ping $1)${rst}"
}

alias cping='colored_ping'

Dann versuche es:

user@linux:~# cping superuser.com

Ihre Ausgabe für cpingwird lila sein. Wenn Sie mehrere Farben in derselben Ausgabe verwenden möchten, können Sie diese auf einzigartige Weise hinzufügen. Wie Sie es machen, liegt ganz bei Ihnen. Zum Beispiel:

echo -e "${red}This is red and ${blu}this is blue and ${grn}this is green.${rst}

0

Sie sollten sich den Befehl hl ansehen, der auf git hub verfügbar ist:
github: git clone http://github.com/mbornet-hl/hl
und auf:
http://www.flashnux.com/notes/page_000022_US.html
hl ist ein in C geschriebener Linux-Befehl, der speziell zum Färben einer Textdatei oder der Ausgabe eines Befehls entwickelt wurde. Sie können bis zu 42 Farben gleichzeitig verwenden und mithilfe einer Konfigurationsdatei die Befehlszeilen vereinfachen. Sie können die Ausgabe jedes Befehls einfärben, der an einen anderen Befehl weitergeleitet werden kann. Und wenn Sie wissen, was reguläre Ausdrücke sind, können Sie sie ganz einfach verwenden. Sie können die Manpage verwenden, um zu verstehen, wie sie verwendet wird.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.