Ich verbringe die meiste Zeit damit, in Unix-Umgebungen zu arbeiten und Terminalemulatoren zu verwenden. 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? Auf welche Fallstricke sind Sie gestoßen?
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 Nach vielen Experimenten:
- Ich neige dazu,
TERM=xterm-color
festzulegen, was auf den meisten Hosts (aber nicht allen) unterstützt wird. - Ich arbeite auf verschiedenen Hosts, verschiedenen Betriebssystemversionen usw. Ich verwende alles von MacOS X, Ubuntu Linux, RHEL / CentOS / Scientific Linux und FreeBSD. Ich versuche, die Dinge möglichst einfach und allgemein zu halten.
- Ich mache eine Menge Arbeit mit GNU
screen
, was eine weitere Ebene des Spaßes hinzufügt. - Viele Betriebssysteme setzen Dinge wie
dircolors
und standardmäßig, und ich möchte dies nicht auf hundert verschiedenen Hosts ändern. Also versuche ich, mich an die Standardeinstellungen zu halten. Stattdessen optimiere ich die Farbkonfiguration meines Terminals. -
Verwenden Sie Farbe für einige Unix-Befehle (
ls
,grep
,less
,vim
) und das Bash-Eingabeaufforderung . Diese Befehle scheinen die Standard-ANSI-Escape-Sequenzen „ “ zu verwenden. Beispiel:alias less="less --RAW-CONTROL-CHARS" export LS_OPTS="--color=auto" alias ls="ls ${LS_OPTS}"
Ich werde meine .bashrc
posten und meine eigene Frage Jeopardy Style beantworten
Kommentare
- Mein Ansatz (siehe Antwort unten) befasst sich mit Problemen mit OSX- und Linux-Unterschieden, z. B. Farbe auf einem ist ls -G und auf der anderen Seite ist ls –color-auto
- Hat jemand ein Werkzeug zum Färben von Spalten gesehen? Das ist eine
column -t --color
?
Antwort
Hier sind a Einige Dinge, die Sie tun können:
Editoren + Code
Viele Editoren haben Syntax Unterstützung hervorheben. vim
und emacs
sind standardmäßig aktiviert. Sie können es auch unter nano
aktivieren.
Sie können den Code auch auf dem Syntax markieren Terminal mithilfe von Pylements als Befehlszeilenprogramm.
grep
grep --color=auto
hebt alle Übereinstimmungen hervor. Sie können auch export GREP_OPTIONS="--color=auto"
verwenden, um es ohne Alias dauerhaft zu machen. Wenn Sie --color=always
verwenden, wird „ Farbe verwenden, auch wenn Rohrleitungen , was die Dinge verwirrt.
ls
ls --color=always
Farben angegeben durch:
export LS_COLORS="rs=0:di=01;34:ln=01;36:mh=00:pi=40;33"
(Hinweis: dircolors
kann hilfreich sein)
PS1
Sie können Ihre PS1 (Shell-Eingabeaufforderung) so einstellen, dass Farben verwendet werden. Beispiel:
PS1="\e[33;1m\u@\h: \e[31m\W\e[0m\$ "
Erzeugt eine PS1 wie:
[gelb] lucas @ ubuntu: [rot] ~ [normal] $
Damit können Sie wirklich kreativ werden. Als Idee:
PS1="\e[s\e[0;0H\e[1;33m\h \t\n\e[1;32mThis is my computer\e[u[\u@\h: \w]\$ "
Setzt eine Leiste mit zufälligen Informationen oben auf Ihr Terminal. (Für beste Ergebnisse, Verwenden Sie auch alias clear="echo -e "\e[2J\n\n""
.)
Entfernen von Escape-Sequenzen
Wenn etwas bei der Ausgabe von Farbe hängen bleibt, wenn Sie dies nicht möchten, verwende ich diese sed
Zeile zum Entfernen der Escape-Sequenzen:
sed "s/\[^[[0-9;]*[a-zA-Z]//gi"
Wenn Sie eine authentischere Erfahrung wünschen, können Sie auch Zeilen entfernen, die mit , das das Terminal anweist, den Text auszublenden. (Wird nicht allgemein unterstützt.)
sed "s/^\[^[8m.*$//gi"
Beachten Sie auch, dass diese ^ [s tatsächliche, wörtliche ^ [s sein sollten. Sie können sie eingeben, indem Sie ^ B ^ [in Bash drücken, dh Strg + V , Strg + [ .
Kommentare
- Die erste PS1-Zeile sollte folgendermaßen lauten:
PS1='\e[33;1m\u@\h: \e[31m\W\e[0m\$ '
. Nach dem vierten Backslash steht ein überflüssiges x. - Escapes sollten in
\[...\]
eingeschlossen werden, da sonst Befehle in der zweiten Zeile die erste Zeile überschreiben. PS1 = ‚ [ \ e [33; 1 m ] \ u @ \ h: [ \ e [31 m ] \ W \ e [0 m \ $ ‚ - Die
ls --color=always
funktioniert nicht ‚.Der Ansatz von @Michael Durrant ‚ ist hierfür besser:ls --color=al > /dev/null 2>&1 && alias ls='ls -F --color=al' || alias ls='ls -G'
Antwort
Ich verwende auch:
export TERM=xterm-color export GREP_OPTIONS="--color=auto" GREP_COLOR="1;32" export CLICOLOR=1 export LSCOLORS=ExFxCxDxBxegedabagacad
Und wenn Sie Ihre Eingabeaufforderung einfärben möchten, können definierte Farbvarianten verwendet werden Seien Sie nützlich:
export COLOR_NC="\e[0m" # No Color export COLOR_BLACK="\e[0;30m" export COLOR_GRAY="\e[1;30m" export COLOR_RED="\e[0;31m" export COLOR_LIGHT_RED="\e[1;31m" export COLOR_GREEN="\e[0;32m" export COLOR_LIGHT_GREEN="\e[1;32m" export COLOR_BROWN="\e[0;33m" export COLOR_YELLOW="\e[1;33m" export COLOR_BLUE="\e[0;34m" export COLOR_LIGHT_BLUE="\e[1;34m" export COLOR_PURPLE="\e[0;35m" export COLOR_LIGHT_PURPLE="\e[1;35m" export COLOR_CYAN="\e[0;36m" export COLOR_LIGHT_CYAN="\e[1;36m" export COLOR_LIGHT_GRAY="\e[0;37m" export COLOR_WHITE="\e[1;37m"
Und dann lautet meine Eingabeaufforderung ungefähr so:
case $TERM in xterm*|rxvt*) local TITLEBAR="\[\033]0;\u ${NEW_PWD}\007\]" ;; *) local TITLEBAR="" ;; esac local UC=$COLOR_WHITE # user"s color [ $UID -eq "0" ] && UC=$COLOR_RED # root"s color PS1="$TITLEBAR\n\[${UC}\]\u \[${COLOR_LIGHT_BLUE}\]\${PWD} \[${COLOR_BLACK}\]\$(vcprompt) \n\[${COLOR_LIGHT_GREEN}\]→\[${COLOR_NC}\] "
$ (vcprompt) ruft in meinem ~ / sbin ein Python-Skript auf, das Informationen zur Versionskontrolle über den aktuellen Pfad druckt. 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:
Kommentare
- Hier finden Sie die Lösung für ein Leitungsproblem, das ich bei der Verwendung der oben genannten Probleme erhalten habe PS1: stackoverflow.com/questions/5087036/…
- I ‚ Wir haben die Antwort aktualisiert, um die maskierten Klammern für die Farben in der Eingabeaufforderung wiederzugeben. Danke!
-
$LSCOLORS
und$CLICOLOR
sind für BSD ls. GNU ls (Linux) verwendet$LS_COLORS
mit einer anderen Syntax. Da sich GNU für mich wie zu Hause fühlt, verwende ichLSCOLORS=exgxfxDacxBaBaCaCaeaEa
, um die Farben von GNU ‚ auf BSD nachzuahmen. -
grep: warning: GREP_OPTIONS is deprecated; please use an alias or script
- Möglicherweise müssen Sie die Datei
.bashrc
als Quelle angeben, damit die Änderung wirksam wird. Sie können dies mit dem folgenden Befehl tun.source /path/to/.bashrc
Antwort
grep
und ls
wurden bereits erwähnt. Wenn Sie viel mehr Farben wünschen, lesen Sie Generic Coloriser Der ursprüngliche Zweck bestand darin, Protokolldateien einzufärben. Sofort werden jedoch auch ping
, traceroute
, , make
, netstat
, diff
, last
, ldap
und cvs
.
Es ist leicht zu erweitern, wenn Sie Ich kenne ps
und nmap
zur Liste (wenn Sie in grc
Ich werde mehr als froh sein, die .conf-Dateien für diese beiden Tools zu teilen.
(Übrigens, um sie über synaptic
, pacman
, und vielleicht haben Sie auch besseres Glück bei der Suche für „grc“)
Kommentare
-
grc
unterstützt jetztps
standardmäßig. Ich ‚ würde mich für Ihrenmap
Farben 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 das bemerkt. hier ‚ ist meine conf.nmap (und eigentlich alles andere) gist.github.com/sygo/844982#file-conf -nmap – Ich habe festgestellt, dass Sie in infosec arbeiten. Vielleicht finden Sie conf.hexdump interessant. ‚ hat es jedoch noch nicht fertiggestellt.
- Danke @ Sygo. Ich ‚ habe Ihren Kern gegabelt und überarbeitet. Ich ‚ habe noch nie Daten mit git festgeschrieben (geschweige denn die Gists von github ‚), und ich kann nicht herausfinden, wie ich vorschlagen kann, sie wieder zusammenzuführen für Sie (ich ‚ vermute, dass dies daran liegt, dass das Wesentliche zu vereinfacht ist).
- Ich vermute, Sie können ‚ t weil es ‚ ein Kern und kein richtiges Repository ist. Ich habe Ihre Gabel überprüft und ich ‚ versuche definitiv, Ihre Version zu testen. Ich ‚ bin neugierig, was aus diesem Hex-Dump wird …
Antwort
Ich habe meine .bashrc im Laufe der Jahre verbessert, um sowohl unter OSX als auch unter Ubuntu zu arbeiten.
Ich habe sie auch mit kompakten Bedingungsanweisungen auf 28 Zeilen verkleinert.
Damit Meine PS1-Eingabeaufforderung sieht folgendermaßen aus:
mit roter Zeit, Benutzername in grün, Maschinenname in hellblau, pwd in dunklerem Blau und Git-Zweig in Gelb.
Funktion meiner PS1-Eingabeaufforderung:
- zeigt Git-Zweig an!
- lange Verzeichnispfade (mehr als 6 Elemente) sind “ getrimmt „, um die oberen 3 und unteren 3 Verzeichnisse mit
_
zwischen diesen anzuzeigen (das ist derpwd sed
Teil von LOCATION). - Wagenrücklauf am Ende, sodass die Eingabeaufforderung immer links ist!
Die relevanten Zeilen aus meiner .bashrc
-Datei lauten:
git_branch () { git branch 2> /dev/null | sed -e "/^[^*]/d" -e "s/* \(.*\)/\1/"; } HOST="\033[02;36m\]\h"; HOST=" "$HOST TIME="\033[01;31m\]\t \033[01;32m\]" LOCATION=" \033[01;34m\]`pwd | sed "s#\(/[^/]\{1,\}/[^/]\{1,\}/[^/]\{1,\}/\).*\(/[^/]\{1,\}/[^/]\{1,\}\)/\{0,1\}#\1_\2#g"`" BRANCH=" \033[00;33m\]$(git_branch)\[\033[00m\]\n\$ " PS1=$TIME$USER$HOST$LOCATION$BRANCH PS2="\[\033[01;36m\]>"
Für ls mit Farben, sofern verfügbar d keine Fehler, wenn nicht (d.h.OSX):
ls --color=al > /dev/null 2>&1 && alias ls="ls -F --color=al" || alias ls="ls -G"
Kommentare
- Für
ls
unter OS X, aber dies geschieht mitexport CLICOLOR=1
. - @ThomasW, aber nicht unter Linux :-p Der Typ verwendet beide.
- Trotzdem weist ThomasW zu Recht darauf hin, dass die Antwort falsch ist, wenn er sagt, dass Farben mit
ls
unter MacOS 10 nicht verfügbar sind. Die Antwort ist auch insofern falsch, als die Eingabeaufforderungszeichenfolgen sind hier tatsächlich fehlerhaft. Sie
gleichen\[
und\]
und hat Probleme für mindestens eine Person verursacht, die diese Antwort kopiert .
Antwort
Farben für Manpages ( mehr Details ):
function _colorman() { env \ LESS_TERMCAP_mb=$(printf "\e[1;35m") \ LESS_TERMCAP_md=$(printf "\e[1;34m") \ LESS_TERMCAP_me=$(printf "\e[0m") \ LESS_TERMCAP_se=$(printf "\e[0m") \ LESS_TERMCAP_so=$(printf "\e[7;40m") \ LESS_TERMCAP_ue=$(printf "\e[0m") \ LESS_TERMCAP_us=$(printf "\e[1;33m") \ "$@" } function man() { _colorman man "$@"; } function perldoc() { command perldoc -n less "$@" |man -l -; }
Farben für grep (1;32
ist hellgrün, andere Farben finden Sie in anderen Beiträgen hier):
GREP_OPTS="--color=auto" # for aliases since $GREP_OPTIONS is deprecated GREP_COLOR="1;32" # (legacy) bright green rather than default red GREP_COLORS="ms=$GREP_COLOR" # (new) Matching text in Selected line = green alias grep="grep $GREP_OPTS" alias egrep="egrep $GREP_OPTS" alias fgrep="fgrep $GREP_OPTS"
Weitere Farben für GNU ls :
# use the config at ~/.dircolors if it exists, otherwise generate anew eval "$( dircolors --sh $(ls -d ~/.dircolors 2>/dev/null) )" # Usage: _ls_colors_add BASE NEW [NEW...] # Have LS color given NEW extensions the way BASE extension is colored _ls_colors_add() { local BASE_COLOR="${LS_COLORS##*:?.$1=}" NEW if [ "$LS_COLORS" != "$BASE_COLOR" ]; then BASE_COLOR="${BASE_COLOR%%:*}" shift for NEW in "$@"; do if [ "$LS_COLORS" = "${LS_COLORS#*.$NEW=}" ]; then LS_COLORS="${LS_COLORS%%:}:*.$NEW=$BASE_COLOR:" fi done fi export LS_COLORS } _ls_colors_add zip jar xpi # archives _ls_colors_add jpg ico JPG PNG webp # images _ls_colors_add ogg opus # audio (opus now included by default) CLICOLOR=1 # BSD auto-color trigger (like ls -G but for everything) if ls -ld --color=auto / >/dev/null 2>&1 then alias ls="ls -ph --color=auto" else alias ls="ls -ph" fi
Installieren Sie grc
( Generic Colouriser ) und fügen Sie es Ihren Aliasen hinzu:
# using this as a variable allows easier calling down lower export GRC="grc -es --colour=auto" # loop through known commands plus all those with named conf files for cmd in g++ head ld ping6 tail traceroute6 `locate grc/conf.`; do cmd="${cmd##*grc/conf.}" # we want just the command # if the command exists, alias it to pass through grc type "$cmd" >/dev/null 2>&1 && alias "$cmd"="$GRC $cmd" done # This needs run-time detection. We even fake the "command not found" error. configure() { if [[ -x ./configure ]]; then colourify ./configure "$@" else echo "configure: command not found" >&2 return 127 fi } # GRC plus LS awesomeness (assumes you have an alias for ls) unalias ll 2>/dev/null if ls -ld --color=always / >/dev/null 2>&1; then GNU_LS="--color=always"; fi ll() { if [[ -t 1 ]] || [[ -n "$CLICOLOR_FORCE" ]] then colourify ls -l $GNU_LS "$@" else ls -l "$@" fi }
Farben für diff : Zu viel Inhalt für eine Funktion, verwenden Sie ein Skript und aliasen Sie es in Ihrer RC-Datei (nicht erforderlich, wenn Sie grc
installiert haben):
#!/usr/bin/perl use strict; use warnings; open (DIFF, "-|", "diff", @ARGV) or die $!; my $ydiff = 1; while (<DIFF>) { if (not -t 1) { print; next; } chomp; $ydiff = 0 if /^[ <>\@+-]/ or ($. == 1 && /^\d+[a-z]{1,5}\d+$/); my $color = ""; if (! $ydiff && /^[\@+-<>]/) { $color = (/^[<-](?!--$)/ ? 1 : /^[+>]/ ? 2 : 5); } elsif ($ydiff && /\t {6}([<|>])(?:\t|$)/) { $color = ($1 eq "<" ? 1 : $1 eq ">" ? 2 : 4); } $color ? printf ("\e[1;3%dm%s\e[0;0m\n",$color,$_) : print "$_\n"; } close DIFF;
Farben für Bash-Eingabeaufforderung :
# Shorten home dir, cygwin drives, paths that are too long if [ -d /cygdrive ] && uname -a |grep -qi cygwin; then CYGWIN_OS=1; fi function PSWD() { local p="$*" space A B cols="${COLUMNS:-`tput cols 2>/dev/null || echo 80`}" p="${p/$HOME/\~}" # shrink home down to a tilde if [ -n "$CYGWIN_OS" ] && [ "${p#/cygdrive/?/}" != "$p" ]; then p="${p:10:1}:${p:11}" # /cygdrive/c/hi -> c:/hi fi space="$((${#USER}+${#HOSTNAME}+6))" # width w/out the path if [ "$cols" -lt 60 ]; then echo -n "$N "; space=-29; p="$p$N\b"; fi if [ "$cols" -lt "$((space+${#p}+20))" ]; then # < 20 chars for the command A=$(( (cols-20-space)/4 )) # a quarter of the space (-20 for cmd) if [ $A -lt 4 ]; then A=4; fi # 4+ chars from beginning B=$(( cols-20-space-A*2 )) # half (plus rounding) of the space if [ $B -lt 8 ]; then B=8; fi # 8+ chars from end p="${p:0:$A}..${p: -$B}" fi echo "$p" } PSC() { echo -ne "\[\033[${1:-0;38}m\]"; } PR="0;32" # default color used in prompt is green if [ "$(id -u)" = 0 ]; then sudo=41 # root is red background elif [ "$USER" != "${SUDO_USER:-$USER}" ]; then sudo=31 # not root, not self: red text else sudo="$PR" # standard user color fi PROMPT_COMMAND="[ $? = 0 ] && PS1=${PS1[1]} || PS1=${PS1[2]}" PSbase="$(PSC $sudo)\u$(PSC $PR)@\h $(PSC 33)\$(PSWD \w)" PS1[1]="$PSbase$(PSC $PR)\$ $(PSC)" PS1[2]="$PSbase$(PSC 31)\$ $(PSC)" PS1="${PS1[1]}" unset sudo PR PSbase
Kommentare
- Upvote für einen Screenshot
- Meine
PSWD()
-Funktion war früher POSIX-kompatibel, aber ‚ ist viel einfacher zu vereinfachen Verwenden der Behandlung von Bash / Zsh-Teilzeichenfolgen. Siehe Revision 6 für die POSIX-Version, die viele Fragezeichen enthält und ‚ überhaupt nicht an das Terminal anpassbar war Breite. ‚ hat den Screenshot nicht aktualisiert, aber ‚ ist nur eine geringfügige Änderung bei der Breite von 80 Zeichen. -
CLICOLOR=1
funktioniert ‚ bei FREEBSD 11.2 - @SimonC nicht für mich. – Möglicherweise verwenden Sie GNU-Dienstprogramme auf Ihrem FreeBSD-System anstelle der BSD-Dienstprogramme.
CLICOLOR=1 ls
sollte dasselbe tun wiels -G
mit BSD (ls -g
bei älteren BSDs). Wennls --color
funktioniert (kein Fehler), verwenden Sie ‚ GNU ‚ sls
und$CLICOLOR
werden ignoriert. - @SimonC. – Sie müssen Ihre
~/.bashrc
tatsächlich laden, damit Änderungen wirksam werden. Führen Sie entwedersource ~/.bashrc
aus oder starten Sie eine neue Bash-Sitzung (starten Sie ein Terminal oder führen Siebash
aus).
Antwort
Legen Sie eine fett gedruckte Eingabeaufforderung fest. Von cyberciti.biz und dem BashFAQ
# "tput bold" will work regardless of the foreground and background colors. # Place the tput output into variables, so they are only execd once. bold=$(tput bold) # This could also be a color. reset=$(tput sgr0) export PS1="\u@\[$bold\]\h\[$reset\]:\w \$ "
Ich habe es auch geschafft, Farbeinstellungen zu finden, die weitgehend unterstützt werden und in älteren Umgebungen (sogar FreeBSD4!) keine Gobbledygook-Zeichen drucken, und es scheint gut zu funktionieren, wenn TERM = vt100, xterm , xterm-Farbe. (Hauptsächlich). Aus meiner .bashrc:
# Set some options, based on the OS OS=`uname -s` case "$OS" in "SunOS" ) # Solaris ls doesn"t allow color, so use special characters LS_OPTS="-F" alias ls="ls ${LS_OPTS}" ;; "Linux" ) # GNU ls supports colors! # See dircolors to customize colors export LS_OPTS="--color=auto" alias ls="ls ${LS_OPTS}" # Get color support for "less" export LESS="--RAW-CONTROL-CHARS" # Use colors for less, man, etc. [[ -f ~/.LESS_TERMCAP ]] && . ~/.LESS_TERMCAP export GREP_OPTIONS="--color=auto" ;; "Darwin"|"FreeBSD") # Most FreeBSD & Apple Darwin supports colors export CLICOLOR=true # Get color support for "less" export LESS="--RAW-CONTROL-CHARS" # Use colors for less, man, etc. [[ -f ~/.LESS_TERMCAP ]] && . ~/.LESS_TERMCAP export GREP_OPTIONS="--color=auto" ;; * ) echo "Unknown OS [$OS]" ;; esac
Kommentare
- Oder wenn Sie ZSH verwenden möchten, Phil Gold ‚ s Eingabeaufforderung an aperiodic.net/phil/prompt ist ein Kunstwerk.
Antwort
Dinge, die hier noch nicht gesagt wurden:
So färben Sie die Ausgabe Ihrer Kompilierungen mit gcc ein , es gibt colorgcc von Johannes Schlüter
Um Protokolle einzufärben, gibt es Multitail
Um ein stdout einzufärben, habe ich xcol
Ich persönlich verwende diese aus dem xcol-Tool.
#normal=$(tput sgr0) # normal text normal=$"\e[0m" # (works better sometimes) bold=$(tput bold) # make colors bold/bright red="$bold$(tput setaf 1)" # bright red text green=$(tput setaf 2) # dim green text fawn=$(tput setaf 3); beige="$fawn" # dark yellow text yellow="$bold$fawn" # bright yellow text darkblue=$(tput setaf 4) # dim blue text blue="$bold$darkblue" # bright blue text purple=$(tput setaf 5); magenta="$purple" # magenta text pink="$bold$purple" # bright magenta text darkcyan=$(tput setaf 6) # dim cyan text cyan="$bold$darkcyan" # bright cyan text gray=$(tput setaf 7) # dim white text darkgray="$bold"$(tput setaf 0) # bold black = dark gray text white="$bold$gray" # bright white text
Ich verwende diese Variablen in meinen Skripten wie folgt:
echo "${red}hello ${yellow}this is ${green}coloured${normal}"
Ich mag auch diese kleine Funktion colouredEcho (gefunden bei Stack Overflow)
function coloredEcho(){ local exp=$1; local color=$2; if ! [[ $color =~ "^[0-9]$" ]] ; then case $(echo $color | tr "[:upper:]" "[:lower:]") in black) color=0 ;; red) color=1 ;; green) color=2 ;; yellow) color=3 ;; blue) color=4 ;; magenta) color=5 ;; cyan) color=6 ;; white|*) color=7 ;; # white or invalid color esac fi tput setaf $color; echo $exp; tput sgr0; } coloredEcho "This text is green" green
Es ist leider nicht erlaubt, weitere Links zu posten
Kommentare
- Hallo, wie erstellen Sie die Flags für den Eingabeaufforderungspfad? Ich erwähne die rechteckigen Balken mit Dreiecksenden. Danke
- funktioniert es auch in einem Ubuntu-Gnu-Terminal?
- lnav ist auch ein großartiges Werkzeug, um farbige Protokolldateien anzuzeigen.
Antwort
Es gibt ein gutes Werkzeug zum Einrichten Ihrer Farben für den Befehl ls – http://geoff.greer.fm/lscolors/
Antwort
Ich schlage vor, Sie überprüfen ZSH und sein Plugin oh-my-zsh mit einer der leistungsstärksten Konsolenfunktionen, die ich gesehen habe. Eine davon ist die Auswahl eines Themas für 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 es lieben werden!
Kommentare
- Wenn ich könnte, würde ich dies für das Oh-My-ZSH ablehnen Vorschlag: Als Systemingenieur, der ausgiebig im Terminal arbeitet, und als jemand, der versucht hat, zsh / oh-my-zsh in meinen Workflow aufzunehmen, habe ich Ich kann ehrlich sagen, dass ich ZSH niemandem empfehlen würde. Natürlich können Sie zsh mit einer Datei verknüpfen, die nach einer anderen Shell benannt ist, und diese Shell emulieren, aber wenn Sie dies tun, liest ‚ Ihre .bashrc, .bash_profile usw. nicht können Sie
emulate bash
nicht in Ihre .zprofile- oder .zshrc-Dateien einfügen. Für alle, die mit erweiterten Funktionen in BASH arbeiten, gibt es viele Feinheiten, die Sie beißen werden. BASH ist ein besserer Sh. - Das einzige, was ZSH sofort hat, das besser als BASH ist, ist die Befehlsvervollständigung, aber selbst das ist in BASH programmierbar. Vielleicht sollte jemand, der die Shell nicht ‚
verwendet, außer für gelegentliche weltliche Aufgaben, ZSH übernehmen, aber ‚ ist nicht für jemanden geeignet, der dies benötigt Verwenden Sie die Shell ausgiebig. Der Operator=~
kann Sie beißen, die Art und Weise, wie ZSH mit Arrays umgeht, kann Sie beißen usw. Nachdem ich ZSH / Oh-My-ZSH etwa 9 Monate lang 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. ‚ habe nie zurückgeschaut. Jetzt mache ich mir keine Sorgen mehr um die Portabilität.
Antwort
Verwenden Sie zum Anzeigen der Diff-Ausgabe in Farbe colordiff .
sudo apt-get install colordiff
Pipe Beliebige Ausgabe im Diff-Format in Colordiff:
Dies schließt einige der alternativen Formate von diff ein, wie -y
(nebeneinander).
Alternativ, wenn es eigenständig aufgerufen wird ( ohne dass etwas hineingeleitet wird), dann fungiert es als Wrapper um „diff“ und färbt die Ausgabe. Daher habe ich dies in meinem .bashrc, um den Alias „diff“ an colordiff zu senden.
# if colordiff is installed, use it if type colordiff &>/dev/null ; then alias diff=colordiff
Kommentare
- Im Beispiel
.bashrc
fehlt das endgültigefi
und kann in einen einzeiligen Befehl konvertiert werden:type colordiff &> /dev/null && alias diff='colordiff'
Antwort
Einige Textdekorationen (fett) zur einfachen Unterscheidung zwischen Root- und Nicht-Root-Shell. Für Zsh:
if test $UID = 0 then PS1="%B${PS1}%b " fi
Für Bash:
if test $UID = 0 then PS1="\033[1m${PS1}\033[0m" fi
Kommentare
- Bitte geben Sie Ihre Shell an. Die Frage ‚ s einziges Shell-spezifisches Tag ist bash , aber ich glaube, Ihr Code ist nicht
bash
. - @manatwork: Entschuldigung, ich habe vergessen zu erwähnen, dass es Zsh war. Mein Beitrag wurde aktualisiert.
Antwort
Ich habe mich nur das Gleiche gefragt. Ich habe meinen eigenen Ansatz, aber ich suche nach Alternativen.
Ich schreibe Bash-Wrapper um Programmaufrufe und leite deren Ausgabe über sed
. Was mir gefällt sed
bedeutet, dass jede Zeile sofort geändert und wiedergegeben wird => nicht viel Pufferung. Ich mag es jedoch nicht, dass bei jedem Aufruf eines umschlossenen Programms die sed
Code wird analysiert und kompiliert.
Zum Beispiel färbe ich die Ausgabe von ip
:
# # Colorcodes # NORMAL=`echo -e "\033[0m"` RED=`echo -e "\033[31m"` GREEN=`echo -e "\033[0;32m"` LGREEN=`echo -e "\033[1;32m"` BLUE=`echo -e "\033[0;34m"` LBLUE=`echo -e "\033[1;34m"` YELLOW=`echo -e "\033[0;33m"` # # command: ip # highlight ip addresses, default route and interface names # IP4=$GREEN IP6=$LBLUE IFACE=${YELLOW} DEFAULT_ROUTE=$LBLUE IP_CMD=$(which ip) function colored_ip() { ${IP_CMD} $@ | sed \ -e "s/inet [^ ]\+ /${IP4}&${NORMAL}/g"\ -e "s/inet6 [^ ]\+ /${IP6}&${NORMAL}/g"\ -e "s/^default via .*$/${DEFAULT_ROUTE}&${NORMAL}/"\ -e "s/^\([0-9]\+: \+\)\([^ \t]\+\)/\1${IFACE}\2${NORMAL}/" } alias ip="colored_ip"
Antwort
Zum Festlegen der Eingabeaufforderung habe ich dies in meiner .bashrc-Datei.
#Set variables for foreground colors fgRed=$(tput setaf 1) ; fgGreen=$(tput setaf 2) ; fgBlue=$(tput setaf 4) fgMagenta=$(tput setaf 5) ; fgYellow=$(tput setaf 3) ; fgCyan=$(tput setaf 6) fgWhite=$(tput setaf 7) ; fgBlack=$(tput setaf 0) #Set variables for background colors bgRed=$(tput setab 1) ; bgGreen=$(tput setab 2) ; bgBlue=$(tput setab 4) bgMagenta=$(tput setab 5) ; bgYellow=$(tput setab 3) ; bgCyan=$(tput setab 6) bgWhite=$(tput setab 7) ; bgBlack=$(tput setab 0) #Set variables for font weight and text decoration B=$(tput bold) ; U=$(tput smul) ; C=$(tput sgr0) #NOTE: ${C} clears the current formatting if [[ $USER = "root" ]]; then PS1="${B}${fgRed}\u${C}@\h(\s): ${fgGreen}\w${C} > " else PS1="${B}${fgCyan}\u${C}@\h(\s): ${fgGreen}\w${C} > " fi
Dies gibt mir eine Eingabeaufforderung, die ungefähr so aussieht:
user@host(bash): ~/bin >
Das Arbeitsverzeichnis ist grün Und der Benutzername ist fett und cyan, es sei denn, ich habe die Shell mit sudo
ausgeführt. 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. Es erleichtert auch das Bearbeiten der Eingabeaufforderung viel .
Der Grund, warum ich tput
verwende, ist, dass es allgemeiner unterstützt werden soll als die seltsamen 033[01;31m\]
Sequenzen. Wenn Sie als zusätzlichen Bonus echo $PS1
an der Eingabeaufforderung ausführen, wird die rohe Eingabeaufforderung mit angezeigt Farben anstelle dieser unverständlichen Kontrollsequenzen.
Antwort
Sie können ein Projekt ausprobieren, das auch beim Kolorieren der Skriptausgabe hilft. Es heißt ScriptEchoColor bei source forge: http://scriptechocolor.sourceforge.net/
Beispiel:
echoc "@{lr}text output in light red" echoc "@{bLGu}text outpus in blue, light green background and underlined" echoc "you @{lr} can @{bLGu} mix @{-a} it all too" echoc -x "ls" #executes ls command and colorizes it automatically to be easy to be seen
Die automatischen Farben sind konfigurierbar.
Dies ist ein Beispiel dafür:
Antwort
Ein großartiges universelles 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 von N Farben. Jeder Text, der einer Gruppe entspricht, wird in der entsprechenden Farbe angezeigt.
Wenn Sie beispielsweise eine Testausgabe betrachten:
python -m unittest discover -v
Dann können Sie sie auffrischen up with:
python -m unittest discover -v 2>&1 | colout "(.*ERROR$)|(.*FAIL$)|(\(.*\))" red,yellow,black bold
Sehen Sie, wie meine Regex drei Gruppen (die Klammer) gefolgt von drei Farben (und optional drei Stilen) hat, aber ich habe eine Kurzform verwendet, um alle Farben auf „fett“ zu setzen. Daher wird die „schwarze“ Gruppe, die mit Text in Klammern übereinstimmt, dunkelgrau angezeigt.)
Beachten Sie auch, wie ich am Ende 2>&1
hinzufügen musste des Python-Aufrufs, da die Ausgabe von unittest auf stderr ist, habe ich sie auf stdout übertragen, damit ich sie in colout weiterleiten kann.
Dies ist im Allgemeinen so einfach zu verwenden, dass ich häufig neue erstellte colout invocat Ionen im laufenden Betrieb und deren Wiederverwendung oder Änderung aus meinem Befehlszeilenverlauf.
Der einzige Nachteil ist, dass es sich um ein Python-Paket handelt, nicht um eine eigenständige ausführbare Datei. Sie müssen es also installieren es mit pip oder sudo python setup.py install
.
Antwort
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
Antwort
Sie können mein cf zum Färben von Dateinamen in der Befehlszeile verwenden. Es ist ein schneller kleiner awk-basierter Colorizer, der über Pipes funktioniert – Färben von Dateinamen in Truecolor sRGB.
Es hat eine helle Farbe Standardkonfiguration und im Gegensatz zu ls tritt beim Hinzufügen neuer Farben keine Leistungseinbußen auf. (ls muss den gesamten LS_COLORS-String nach jedem Fehler durchsuchen).
https://github.com/AdamDanischewski/cf
Antwort
Für Mac können Sie Folgendes wie angegeben verwenden: hier
if [ "$TERM" = xterm ]; then TERM=xterm-256color; fi
Antwort
Ich verwende Farbverpackung .
cw ist ein nicht aufdringlicher Echtzeit-ANSI-Farbwrapper für gängige Unix-basierte Befehle unter GNU / Linux. cw wurde entwickelt, um die Umgebung der ausgeführten Befehle zu simulieren. Wenn eine Person „du“, „df“, „ping“ usw. in ihre Shell eingibt, wird die Ausgabe gemäß einer Definition automatisch in Echtzeit eingefärbt Datei mit dem gewünschten Farbformat. cw unterstützt Platzhalter-Match-Farben, Token-Farben, Kopf- und Fußzeilen, Fall-Szenario-Farben, befehlszeilenabhängige Definitionsfarben und enthält über 50 vorgefertigte Definitionsdateien.
Es ist fast nahtlos, aber als ich herausfand, dass ps in der interaktiven Shell unterschiedliche Ausgaben zurückgibt, vergleicht ps in einer Pipe.
Antwort
Wenn Sie Ihre vim
so bunt wie ich gestalten möchten, empfehlen wir Ihnen, zwei Schritte auszuführen:
- lernen, wie man sie einschaltet Folgen Sie diesem Link: Aktivieren Sie die Hervorhebung der Farbsyntax in vi oder vim .
Schlüsselschritte im Link:
Bearbeiten Sie die Datei ~ / .vimrc, indem Sie den folgenden Befehl eingeben: vi ~ /.vimrc
Fügen Sie die folgende Option hinzu: Syntax für
Speichern und schließen Sie die Datei
Testen Sie es, indem Sie den Befehl vim ausführen: vim foo.sh
- Suchen Sie ein Farbschema, das Ihnen gefällt, und verwenden Sie es. Das Schema, das ich verwende: das Schema, das ich verwende
Kommentare
- Wenn Sie Links zu externen Quellen verwenden, sollten Sie das Kontrollkästchen “ Kontext für Links bereitstellen “ (Wichtige Teile zitieren) des relevanten Teils des Handbuchs: unix.stackexchange.com/help/how-to-answer
Antwort
Wenn Sie Bash wählen, empfehle ich oh-my-bash . Wenn Sie zsh wählen, empfehle ich oh-my-zsh . Beide unterstützen die Kolorierung Ihres Terminals und unterschiedliche Ausgaben.
Antwort
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"
gibt Ihnen Folgendes:
Derzeit kann diese Bibliothek in vier Sprachen C, C ++, D und Python verwendet werden, abgesehen von der Verwendung der Befehlszeile in Ihrer bevorzugten Shell .
Beachten Sie, dass die Ausgabe anderer Programme nicht automatisch eingefärbt wird. Es handelt sich vielmehr um ein Hilfsprogramm, das Ihnen dabei hilft, nicht h Ich möchte mich an die abstrusen Codes erinnern. Sie müssen nur die offensichtlichen Farbnamen oder deren leicht zu merkenden rgb cmyk w (hite) (von) f verwenden Abkürzungen.
Weitere Informationen finden Sie unter im Textattr-Repo .