Die meiste Zeit arbeite ich in Unix-Umgebungen und verwende Terminalemulatoren. Ich versuche, Farbe in der Befehlszeile zu verwenden, da Farbe die Ausgabe nützlicher und intuitiver macht.
Welche Optionen gibt es, um meiner Terminalumgebung Farbe hinzuzufügen? Welche Tricks benutzt du? Welche Fallstricke sind Ihnen begegnet?
Leider variiert die Unterstützung für Farben je nach Terminaltyp, Betriebssystem, TERM-Einstellung, Dienstprogramm, fehlerhaften Implementierungen usw.
Hier sind einige Tipps aus meinem Setup, nachdem ich viel experimentiert habe:
- Ich neige dazu einzustellen
TERM=xterm-color
, was auf den meisten Hosts (aber nicht allen) unterstützt wird. - Ich arbeite auf einer Reihe von verschiedenen Hosts, verschiedenen Betriebssystemversionen usw. Ich verwende alles von MacOS X, Ubuntu Linux, RHEL / CentOS / Scientific Linux und FreeBSD. Ich versuche, die Dinge so einfach und allgemein wie möglich zu halten.
- Ich arbeite
screen
viel mit GNU , was mir noch mehr Spaß macht. - Viele Betriebssysteme stellen Dinge wie
dircolors
und standardmäßig ein, und ich möchte dies nicht auf hundert verschiedenen Hosts ändern. Also versuche ich mich an die Vorgaben zu halten. Stattdessen ändere ich die Farbkonfiguration meines Terminals. Verwendung Farbe für einige Unix - Befehle (
ls
,grep
,less
,vim
) und die Schlag - Eingabeaufforderung . Diese Befehle scheinen die Standard- " ANSI-Escape-Sequenzen " zu verwenden. Zum Beispiel:alias less='less --RAW-CONTROL-CHARS' export LS_OPTS='--color=auto' alias ls='ls ${LS_OPTS}'
Ich poste meine .bashrc
und beantworte meine eigene Frage Jeopardy Style.
column -t --color
?Antworten:
Hier sind ein paar Dinge, die Sie tun können:
Editoren + Code
Viele Editoren unterstützen die Syntaxhervorhebung.
vim
undemacs
standardmäßig aktiviert haben. Sie können es auch unter aktivierennano
.Sie können den Code für die Syntaxhervorhebung im Terminal auch mithilfe von Pygments als Befehlszeilentool verwenden.
grep
grep --color=auto
hebt alle Übereinstimmungen hervor. Sie können es auchexport GREP_OPTIONS='--color=auto'
ohne Alias persistent machen. Wenn Sie--color=always
diese Option verwenden, wird die Farbe auch beim Leiten verwendet , was die Dinge verwirrt.ls
ls --color=always
Farben angegeben von:
(Hinweis:
dircolors
kann hilfreich sein)PS1
Sie können Ihre PS1 (Shell-Eingabeaufforderung) so einstellen, dass sie Farben verwendet. Zum Beispiel:
Erzeugt eine PS1 wie:
[gelb] lucas @ ubuntu: [rot] ~ [normal] $
Sie können damit wirklich kreativ werden. Als Idee:
Setzt eine Leiste mit zufälligen Informationen oben auf Ihr Terminal. (Für beste Ergebnisse auch verwenden
alias clear="echo -e '\e[2J\n\n'"
.)Befreien Sie sich von Escape-Sequenzen
Wenn etwas feststeckt und Farbe ausgibt, wenn Sie dies nicht möchten, benutze ich diese
sed
Zeile, um die Escape-Sequenzen zu entfernen:Wenn Sie ein authentischeres Erlebnis wünschen, können Sie auch Zeilen entfernen
\e[8m
, die mit beginnen , wodurch das Terminal angewiesen wird, den Text auszublenden. (Nicht weit verbreitet.)Beachten Sie auch, dass diese ^ [s tatsächliche, wörtliche ^ [s sein sollten. Sie können sie eingeben, indem Sie ^ V ^ [in bash drücken, das heißt Ctrl+ V, Ctrl+ [.
quelle
PS1='\e[33;1m\u@\h: \e[31m\W\e[0m\$ '
. Nach dem vierten Backslash steht ein überflüssiges x.\[...\]
in die zweite Zeile eingeschlossen werden, da sonst Befehle die erste Zeile überschreiben. PS1 = '[\ e [33; 1 m] \ u @ \ h: [\ e [31 m] \ w \ e [ls --color=always
geht nicht. @Michael Durrant Ansatz ist besser dafür:ls --color=al > /dev/null 2>&1 && alias ls='ls -F --color=al' || alias ls='ls -G'
Ich benutze auch:
Und wenn Sie Ihre Eingabeaufforderung einfärben möchten, können definierte Farbvariablen hilfreich sein:
Und dann ist meine Aufforderung ungefähr so:
$ (vcprompt) ruft in my ~ / sbin ein Python-Skript auf, das Informationen zur Versionskontrolle über den aktuellen Pfad ausgibt. Es enthält Unterstützung für Mercurial, Git, Svn, Cvs usw. Der Autor des Skripts hat hier die Quelle .
Dies ist die vollständige Quelle meiner Eingabeaufforderungskonfiguration:
quelle
$LSCOLORS
und$CLICOLOR
sind für BSD ls. GNU ls (Linux) verwendet$LS_COLORS
eine andere Syntax. Da sich GNU für mich wie zu Hause anfühlt, ahme ichLSCOLORS=exgxfxDacxBaBaCaCaeaEa
die Farben von GNU unter BSD nach.grep: warning: GREP_OPTIONS is deprecated; please use an alias or script
.bashrc
Datei als Quelle angeben, damit die Änderung wirksam wird. Sie können dies mit dem folgenden Befehl tun.source /path/to/.bashrc
grep
undls
werden bereits erwähnt, wenn Sie viel mehr Farben Karo heraus wollen Generika Coloriser , sein ursprüngliches Ziel war es , Logfiles einfärben, sondern direkt aus der Box um ihn koloriert auchping
,traceroute
,gcc
,make
,netstat
,diff
,last
,ldap
, undcvs
.Es ist leicht zu erweitern, wenn Sie reguläre Ausdrücke kennen. Ich habe
ps
undnmap
zu der Liste hinzugefügt (wenn Siegrc
dazukommen, teile ich die .conf-Dateien für diese beiden Tools gerne mit Ihnen).(Btw, zu installieren es über
synaptic
,pacman
und ebenso könnte man mehr Glück für „GRC“ gesucht hat)quelle
grc
jetztps
standardmäßig unterstützt . Ich würde mich für deinenmap
Färbungen interessieren . Siehe auch meine Antwort für das Aliasing all dieser Elemente auf eine Weise, die neue Befehle absorbiert, wenn Sie grc aktualisieren.Ich habe meine .bashrc im Laufe der Jahre verbessert, um sowohl unter OSX als auch unter Ubuntu zu arbeiten.
Ich habe es auch auf 28 Zeilen mit kompakten Bedingungsanweisungen verkleinert.
Damit sieht meine PS1-Eingabeaufforderung folgendermaßen aus:
mit der zeit in rot, benutzername in grün, maschinenname in hellblau, pwd in dunkelblau und git branch in gelb.
Funktion meiner PS1-Eingabeaufforderung:
_
dazwischen anzuzeigen (das ist derpwd sed
Teil von LOCATION).Die relevanten Zeilen aus meiner
.bashrc
Datei sind:Für ls mit Farben, wenn verfügbar und keine Fehler, wenn nicht (dh OSX):
quelle
ls
OS X verfügbar , dies geschieht jedoch mithilfe vonexport CLICOLOR=1
.ls
MacOS 10 keine Farben verfügbar sind . Die Antwort ist auch falsch, da die Eingabeaufforderungszeichenfolgen hier tatsächlich fehlerhaft sind. Sie haben nicht richtig auszubalancieren\[
und\]
, und haben für mindestens eine Person Kopieren dieser Antwort verursacht Probleme .Farben für Manpages ( mehr Details ):
Farben für grep (
1;32
ist hellgrün, siehe andere Beiträge hier für andere Farben):Weitere Farben für GNU ls :
Installieren Sie
grc
( Generic Colouriser ) und fügen Sie es Ihren Aliasen hinzu:Farben für Unterschiede : Zu viel Inhalt für eine Funktion, verwenden Sie ein Skript und geben Sie einen Alias in Ihrer RC-Datei ein (nicht erforderlich, wenn Sie es installiert haben
grc
):Farben für bash prompt :
quelle
PSWD()
Früher war meine Funktion POSIX-kompatibel, aber die Verwendung von bash / zsh-Teilzeichenfolgen erleichtert die Arbeit erheblich. Siehe Revision 6 für die POSIX-Version, die viele Fragezeichen enthält und überhaupt nicht an die Terminalbreite anpassbar war. Ich habe den Screenshot nicht aktualisiert, aber es ist nur eine kleine Änderung bei der Breite von 80 Zeichen.CLICOLOR=1
funktioniert bei mir nicht mit FREEBSD 11.2CLICOLOR=1 ls
sollte dasselbe tun wiels -G
mit BSD (ls -g
auf älteren BSDs). Wenn diesls --color
funktioniert (kein Fehler), verwenden Sie den GNU-ls
Befehl und$CLICOLOR
werden ignoriert.~/.bashrc
damit Änderungen wirksam werden. Führen Siesource ~/.bashrc
eine neue Bash-Sitzung aus oder starten Sie sie (starten Sie ein Terminal oder führen Sie sie ausbash
).Stellen Sie eine fett / farbige Eingabeaufforderung ein. Von cyberciti.biz und der BashFAQ
Ich habe es auch geschafft, Farbeinstellungen zu finden, die weitgehend unterstützt werden und in älteren Umgebungen (sogar FreeBSD4!) Keine Gobbledy-Gook-Zeichen ausgeben, und die gut funktionieren, wenn TERM = vt100, xterm, xterm-color. (Hauptsächlich). Aus meiner .bashrc:
quelle
Es gibt ein gutes Tool zum Einrichten der Farben für den Befehl ls - http://geoff.greer.fm/lscolors/
quelle
Dinge, die hier noch nicht gesagt wurden:
Um die Ausgabe Ihrer Zusammenstellungen mit gcc einzufärben, gibt es colorgcc von Johannes Schlüter
Zum Einfärben von Protokollen gibt es Multitail
Um etwas einzufärben, habe ich xcol zusammengestellt
Ich persönlich benutze diese aus dem Xcol-Tool.
Ich benutze diese Variablen in meinen Skripten so
Ich mag auch diese kleine Funktion colouredEcho (gefunden bei Stack Overflow)
Es tut uns leid, aber ich darf keine weiteren Links posten
quelle
Ich schlage vor, dass Sie sich ZSH und sein Plugin oh-my-zsh ansehen, das eine der leistungsstärksten Konsolenfunktionen bietet, die ich gesehen habe. Eines davon ist die Themenauswahl für Ihr Terminal. Dies ist ein Beispiel für mein Thema ... In tty sind die Farben nicht so warm, aber sie sind die gleichen wie auf diesem Bild ... Wie auch immer, Sie werden es lieben!
quelle
emulate bash
Ihre .zprofile- oder .zshrc-Dateien nicht einfügen Dateien. Für alle, die mit erweiterten Funktionen in BASH arbeiten, gibt es viele Feinheiten, die Sie beißen werden. BASH ist eine bessere sh.=~
Operator kann Sie beißen, die Art, wie ZSH Arrays handhabt, kann Sie beißen usw. Nachdem ich ZSH / Oh-My-ZSH für ungefähr 9 Monate verwendet hatte, hatte ich genug davon. Ich habe ein benutzerdefiniertes Thema verwendet, das ich selbst geschrieben habe, ich habe es auf BASH portiert und meine eigene Git-Eingabeaufforderung geschrieben, und ich habe nie zurückgeschaut. JetztVerwenden Sie zum Anzeigen der Diff-Ausgabe in Farbe den Farbton .
Pipe jede Ausgabe im Diff-Format in das Colordiff:
Dies schließt einige der alternativen Formate von diff ein, wie
-y
(Side-by-Side.)Alternativ dazu fungiert es, wenn es als eigenständiges Programm aufgerufen wird (ohne dass etwas in das Programm geleitet wird), als Wrapper um 'diff' und färbt die Ausgabe. Daher habe ich dies in meinem .bashrc, um alias "diff" zu Colordiff.
quelle
.bashrc
Beispiel fehlt das Finalefi
und es könnte in einen einzeiligen Befehl umgewandelt werden:type colordiff &> /dev/null && alias diff='colordiff'
Einige Textdekorationen (fett) zur einfachen Unterscheidung zwischen Root- und Nicht-Root-Shell. Für Zsh:
Für Bash:
quelle
bash
.Ich habe mich nur das Gleiche gefragt. Ich habe meinen eigenen Ansatz, suche aber nach Alternativen.
Ich schreibe Bash-Wrapper um Programmaufrufe und leite ihre Ausgabe trotzdem weiter
sed
. Was mir gefälltsed
ist, dass es jede Zeile sofort modifiziert und wiedergibt => nicht viel Pufferung. Ich mag es jedoch nicht, dass bei jedem Aufruf eines umschlossenen Programms dersed
Code analysiert und kompiliert wird.Zum Beispiel ist das, was ich tue, um die Ausgabe von zu färben
ip
:quelle
Zum Einstellen der Eingabeaufforderung habe ich diese in meiner .bashrc-Datei.
Dies gibt mir eine Eingabeaufforderung, die ungefähr so aussieht:
Das Arbeitsverzeichnis ist grün. Und der Benutzername ist fett und cyan, es sei denn, ich habe die Shell mit ausgeführt
sudo
. In diesem Fall wird der Benutzername ("root") fett und rot angezeigt.Ich persönlich mag es sehr, wenn die Formatierungssteuerzeichen in Variablen gespeichert werden, da dies das Lesen des Codes zum Festlegen der Eingabeaufforderung erleichtert. Dies erleichtert auch die Bearbeitung der Eingabeaufforderung erheblich .
Der Grund, den ich benutze,
tput
ist, dass es allgemeiner unterstützt werden soll als die seltsamen033[01;31m\]
Sequenzen. Wenn Sie diesecho $PS1
an der Eingabeaufforderung tun , sehen Sie als zusätzlichen Bonus die unformatierte Eingabeaufforderung mit Farben anstelle dieser unverständlichen Kontrollsequenzen.quelle
Sie können ein Projekt ausprobieren, das auch beim Einfärben der Skriptausgabe hilft. Es heißt ScriptEchoColor in Source Forge: http://scriptechocolor.sourceforge.net/
Ex.:
Die automatischen Farben sind konfigurierbar.
Dies ist ein Beispiel dafür:
quelle
Ein großartiges Allzweck- Python- Tool zum Färben der Ausgabe von Befehlen ist ' colout '.
Sie geben ihm einen regulären Ausdruck mit N Gruppen, gefolgt von einer durch Kommas getrennten Liste mit N Farben. Jeder Text, der einer Gruppe entspricht, wird in der entsprechenden Farbe angezeigt.
Wenn Sie sich zum Beispiel eine Testausgabe ansehen:
dann kannst du es aufpeppen mit:
Sehen Sie, wie meine Regex drei Gruppen (die Klammern) hat, gefolgt von drei Farben (und optional drei Stilen), aber ich habe eine Kurzform verwendet, um alle Farben auf 'fett' zu setzen, also die 'schwarze' Gruppe, die mit Text in Klammern übereinstimmt kommt dunkelgrau heraus.)
Beachten Sie auch, wie ich
2>&1
am Ende des Python-Aufrufs hinzufügen musste , da die Ausgabe von unittest auf stderr liegt. Ich habe es also auf stdout übertragen, damit ich es in colout umleiten konnte.Dies ist im Allgemeinen so einfach zu bedienen, dass ich häufig spontan neue Colout-Aufrufe erstelle und diese aus meinem Befehlszeilenverlauf wiederverwende oder ändere.
Der einzige Nachteil ist, dass es sich um ein Python-Paket handelt und nicht um eine eigenständige ausführbare Datei. Sie müssen es also mit pip oder installieren
sudo python setup.py install
.quelle
Ich finde Solarized nützlich. Es ist ein ordentliches Projekt mit einheitlichen Farben für viele Anwendungen.
http://ethanschoonover.com/solarized https://github.com/altercation/solarized
quelle
Ich benutze Color Wrapper .
Es ist fast nahtlos, aber als ich herausfand, dass ps in der interaktiven Shell eine andere Ausgabe liefert als ps in einer Pipe.
quelle
Für Mac können Sie wie hier angegeben Folgendes verwenden
quelle
wenn du dein
vim
farbenfroh machen willst wie ich, empfehle ich dir zwei schritte zu befolgen:quelle
Wenn bash Ihre Wahl ist, empfehle ich oh-my-bash . Wenn Sie zsh wählen, empfehle ich oh-my-zsh . Beide unterstützen die Einfärbung Ihres Terminals und unterschiedliche Ausgaben.
quelle
Ich möchte demütig für meine kürzlich erschienene Veröffentlichung von
ta
oder textattr werben , einem Bibliotheks- und Befehlszeilentool, mit dem das Hinzufügen von Farben und Attributen vereinfacht werden soll, um die Terminalausgabe Ihres Programms zu verschönern, indem für Menschen lesbare Spezifikationen in ANSI-Escape-Codes übersetzt werden.Zum Beispiel:
echo "The Git repo $(ta yellow)${CUR_REPO}$(ta off) is $(ta green)up-to-date$(ta off)"
oder noch kürzer:
echo "The Git repo $(ta y)${CUR_REPO}$(ta f) is $(ta g)up-to-date$(ta f)"
oder eine Alternative:
tawrite "The Git repo " @y ${CUR_REPO} @f " is " @g up-to-date @f "\n"
wird dir etwas geben wie:
Gegenwärtig kann diese Bibliothek in vier Sprachen (C, C ++, D und Python) verwendet werden, abgesehen von der Verwendung über die Befehlszeile in Ihrer bevorzugten Shell.
Beachten Sie, dass die Ausgabe anderer Programme nicht automatisch eingefärbt wird. Es ist eher ein Hilfsprogramm, um Ihnen dabei zu helfen, sich die abstrusen Codes nicht merken zu müssen. Sie müssen nur die offensichtlichen Farbnamen oder ihre leicht zu merk verwenden rgb cmyk w (hite) (von) f Abkürzungen.
Weitere Informationen finden Sie im Textattr Repo .
quelle