Farvelægning af dit terminal- og shell-miljø?

Jeg bruger det meste af min tid på at arbejde i Unix-miljøer og bruge terminalemulatorer. Jeg prøver at bruge farve på kommandolinjen, fordi farve gør output mere nyttigt og intuitivt.

Hvilke muligheder findes der for at tilføje farve til mit terminalmiljø? Hvilke tricks bruger du? Hvilke faldgruber er du stødt på?

Desværre varierer understøttelse af farve afhængigt af terminaltype, OS, TERM-indstilling, hjælpeprogram, buggy-implementeringer osv.

Her er nogle tip fra min opsætning , efter en masse eksperimenter:

  1. Jeg har tendens til at indstille TERM=xterm-color, som understøttes af de fleste værter (men ikke alle).
  2. Jeg arbejder på en række forskellige værter, forskellige OS-versioner osv. Jeg bruger alt fra macOS X, Ubuntu Linux, RHEL / CentOS / Scientific Linux og FreeBSD. Jeg prøver at holde tingene enkle og generiske, hvis det er muligt.
  3. Jeg gør en masse arbejde ved hjælp af GNU screen, hvilket tilføjer endnu et sjovt lag.
  4. Mange OS indstiller ting som dircolors og som standard, og jeg vil ikke ændre dette på hundrede forskellige værter. Så jeg prøver at holde fast ved standardindstillingerne. I stedet justerer jeg min terminal “farvekonfiguration.
  5. Brug farve til nogle Unix-kommandoer (ls, grep, less, vim) og Bash-prompt . Disse kommandoer ser ud til at bruge standarden “ ANSI escape-sekvenser “. For eksempel:

    alias less="less --RAW-CONTROL-CHARS" export LS_OPTS="--color=auto" alias ls="ls ${LS_OPTS}" 

Jeg sender min .bashrc og besvarer mit eget spørgsmål Jeopardy Style .

Kommentarer

  • fyi min tilgang (se svar nedenfor) løser problemer med OSX og Linux forskelle, for eksempel er farve på en ls -G og på den anden side er ls –color-auto
  • Så nogen et værktøj til at farve kolonner? Det er et column -t --color?

Svar

Her er en et par ting, du kan gøre:

Redaktører + kode
Mange redaktører har syntaks fremhæver support. vim og emacs har det som standard aktiveret. Du kan også aktivere det under nano .

Du kan også syntaks markere kode på terminal ved at bruge Pygments som kommandolinjeværktøj.

grep
grep --color=auto fremhæver alle kampe. Du kan også bruge export GREP_OPTIONS="--color=auto" til at gøre det vedvarende uden et alias. Hvis du bruger --color=always, bruger den “ll farve, selv når du rører , hvilket forvirrer ting.

ls

ls --color=always

Farver angivet af:

export LS_COLORS="rs=0:di=01;34:ln=01;36:mh=00:pi=40;33" 

(tip: dircolors kan være nyttige)

PS1
Du kan indstille din PS1 (shell prompt) til at bruge farver. For eksempel:

PS1="\e[33;1m\u@\h: \e[31m\W\e[0m\$ " 

Vil producere en PS1 som:

[gul] lucas @ ubuntu: [rød] ~ [normal] $

Du kan blive virkelig kreativ med dette. Som en idé:

PS1="\e[s\e[0;0H\e[1;33m\h \t\n\e[1;32mThis is my computer\e[u[\u@\h: \w]\$ " 

Sætter en bjælke øverst på din terminal med nogle tilfældige oplysninger. (For de bedste resultater, brug også alias clear="echo -e "\e[2J\n\n"".)

Slippe af med flugtsekvenser

Hvis noget sidder fast, når der ikke er farve, når du ikke vil have det, bruger jeg denne sed linje for at strippe escape-sekvenserne:

sed "s/\[^[[0-9;]*[a-zA-Z]//gi" 

Hvis du vil have en mere autentisk oplevelse, kan du også slippe af med linjer, der starter med \e[8m, som instruerer terminalen om at skjule teksten. (Understøttes ikke bredt.)

sed "s/^\[^[8m.*$//gi" 

Bemærk også, at disse ^ [s skal være faktiske, bogstavelige ^ [s. Du kan skrive dem ved at trykke på ^ V ^ [i bash, det vil sige Ctrl + V , Ctrl + [ .

Kommentarer

  • Den første PS1-linje skal lyde således: PS1='\e[33;1m\u@\h: \e[31m\W\e[0m\$ '. Der er et overflødigt x efter det fjerde tilbageslag.
  • Undslipper skal være lukket i \[...\] ellers kommandoer i anden linje overskriver den første linje. PS1 = ‘ [ \ e [33; 1m ] \ u @ \ h: [ \ e [31m ] \ W \ e [0m \ $ ‘
  • ls --color=always fungerer ikke ‘ t.@Michael Durrant ‘ s tilgang er bedre til dette: ls --color=al > /dev/null 2>&1 && alias ls='ls -F --color=al' || alias ls='ls -G'

Svar

Jeg bruger også:

export TERM=xterm-color export GREP_OPTIONS="--color=auto" GREP_COLOR="1;32" export CLICOLOR=1 export LSCOLORS=ExFxCxDxBxegedabagacad 

Og hvis du kan lide at farvelægge din prompt, kan definerede farver vars være nyttig:

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" 

Og så er min prompt noget som dette:

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) kalder et python-script i min ~ / sbin, der udskriver informationskontroloplysninger om den aktuelle sti. Det inkluderer support til Mercurial, Git, Svn, Cvs osv. Forfatteren af scriptet har kilden her .

Bash-skærmbillede

Dette er fuld kilde til min hurtige konfiguration:

Kommentarer

  • Se her for løsningen på et linjeproblem, jeg fik, da jeg brugte ovenstående PS1: stackoverflow.com/questions/5087036/…
  • I ‘ har opdateret svaret for at afspejle de undtagne parenteser for farverne i prompten. Tak!
  • $LSCOLORS og $CLICOLOR er til BSD ls. GNU ls (Linux) bruger $LS_COLORS med en anden syntaks. Da GNU føles som hjemme for mig, bruger jeg LSCOLORS=exgxfxDacxBaBaCaCaeaEa til at efterligne GNU ‘ s farver på BSD.
  • grep: warning: GREP_OPTIONS is deprecated; please use an alias or script
  • Det kan være nødvendigt at hente .bashrc -filen for at ændringen skal være effektiv. Du kan gøre det med følgende kommando. source /path/to/.bashrc

Svar

grep og ls er allerede nævnt, hvis du vil have mange flere farver, se Generic Coloriser , dets oprindelige formål var at farve logfiler, men lige ud af boksen farvelægger det også ping, traceroute, gcc, make, netstat, diff, last, ldap og cvs.

Det udvides let, hvis du kender regexes. Jeg har tilføjet ps og nmap til listen (hvis du kommer ind i grc Jeg vil være mere end glad for at dele .conf-filerne til disse to værktøjer)

(Btw, for at installere det via synaptic, pacman, og ligesom du måske har bedre held med at søge for “grc”)

Kommentarer

  • grc understøtter nu ps som standard. Jeg ‘ ville være interesseret i dine nmap farvestoffer. Se også mit svar til aliasing af alle disse på en måde, der absorberer nye kommandoer, når du opgraderer grc.
  • Jeg bemærkede det. her ‘ er min conf.nmap (og alt andet, virkelig) gist.github.com/sygo/844982#file-conf -nmap – Jeg bemærkede, at du arbejder i infosec, du måske finder conf.hexdump interessant, jeg har ikke ‘ dog ikke færdig med det.
  • Tak @Sygo. Jeg ‘ har forkælet og revideret din kerne. Jeg ‘ har aldrig faktisk begået data med git (endsige github ‘ s gists) og jeg kan ikke finde ud af, hvordan jeg kan foreslå at slå dem sammen igen til dig (jeg ‘ jeg gætter på, at det er fordi gists er for forenklet).
  • Jeg formoder, at du kan ‘ t fordi det ‘ er en kerne og ikke et ordentligt lager. Jeg tjekkede dog din gaffel, og jeg ‘ giver bestemt din version en chance. Jeg ‘ er nysgerrig efter, hvad den hex-dump man vil blive til …

Svar

Jeg har gennem årene slibet min .bashrc til at arbejde på både OSX og Ubuntu.
Jeg har også reduceret størrelsen til 28 linjer med kompakte tilstandsangivelser.
Med det , min PS1-meddelelse ser ud som: indtast billedbeskrivelse her

med tiden i rødt, brugernavn i grønt, maskinnavn i lyseblå, pwd i mørkere blå og git-gren i gult.

Feature af min PS1-prompt:

  • viser git-gren!
  • lange biblioteksstier (mere end 6 elementer) er ” trimmet “for at vise top 3 og bund 3 mapper med _ mellem derefter (at” det er pwd sed del af LOCATION).
  • vognretur i slutningen, så prompten altid er til venstre!

De relevante linjer fra min .bashrc -fil er:

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\]>" 

For ls med farver, når det er tilgængeligt, d ingen fejl, når ikke (dvs.OSX):

ls --color=al > /dev/null 2>&1 && alias ls="ls -F --color=al" || alias ls="ls -G" 

Kommentarer

Svar

Farver til man-sider ( flere detaljer ):

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 -; } 

Farver til grep (1;32 er lysegrøn, se andre indlæg her for andre farver):

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" 

Flere farver til 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 

Installer grc ( Generisk farvestof ) og tilføj det til dine aliasser:

# 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 } 

Farver til diff : For meget indhold til en funktion, brug et script og alias det i din rc-fil (unødvendigt, hvis du installerede grc):

#!/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; 

Farver til bash prompt :

# 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 

demo af bash-prompt

Kommentarer

  • Opvote til et screenshot
  • Min PSWD() -funktion plejede at være POSIX-kompatibel, men den ‘ er så meget lettere lette ved hjælp af bash / zsh substringhåndtering. Se revision 6 for POSIX-versionen, der involverer mange spørgsmålstegn og var slet ikke ‘ t tilpasset terminal bredde. Jeg opdaterede ‘ ikke skærmbilledet, men det ‘ er kun en lille ændring ved 80 tegn bredde.
  • CLICOLOR=1 fungerer ikke ‘ for mig med FREEBSD 11.2
  • @SimonC. – Du bruger muligvis GNU-værktøjer på dit FreeBSD-system snarere end BSD-dem. CLICOLOR=1 ls skal gøre det samme som ls -G ved hjælp af BSD (ls -g på ældre BSDer). Hvis ls --color fungerer (ingen fejl), bruger du ‘ GNU ‘ s ls kommando og $CLICOLOR ignoreres.
  • @SimonC. – Du skal faktisk indlæse din ~/.bashrc for at eventuelle ændringer skal træde i kraft. Kør enten source ~/.bashrc eller start en ny bash-session (start en terminal, eller kør bash).

Svar

Indstil en fed / farvet prompt. Fra cyberciti.biz og 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 \$ " 

Jeg har også formået at finde farveindstillinger, der understøttes bredt, og som ikke udskriver gobbledygook-tegn i ældre miljøer (endda FreeBSD4!), og synes at fungere fint, hvis TERM = vt100, xterm , xterm-farve. (For det meste). Fra min .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 

Kommentarer

Svar

Ting, der ikke allerede er sagt her:

At farvelægge output af dine kompileringer med gcc , der er colorgcc af Johannes Schlüter

For at farvelægge logfiler er der multitail

For at farve enhver stdout satte jeg sammen xcol

xcol-eksempel

Jeg bruger personligt disse fra værktøjet xcol.

#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 

Jeg bruger disse variabler i mine scripts sådan

echo "${red}hello ${yellow}this is ${green}coloured${normal}" 

Jeg kan også lide denne lille funktion colouredEcho (fundet på 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 

Beklager, jeg har ikke tilladelse til at sende flere links

Kommentarer

  • Hej, hvordan laver man flagene til den hurtige vej? Jeg nævner de rektangulære søjler med trekantender Tak
  • fungerer det også i en ubuntu GNU-terminal?
  • lnav er også et godt værktøj til at vise farvede logfiler

Svar

Der er et godt værktøj til opsætning af dine farver til kommandoen ls – http://geoff.greer.fm/lscolors/

Svar

Jeg foreslår, at du tjekker ZSH og dets plugin oh-my-zsh , som har en af de mest kraftfulde konsolfunktioner, som jeg så. En af dem vælger tema til din terminal. Dette er et eksempel på mit tema … Farverne er ikke så varme, men de er de samme som på dette billede … På enhver måde vil du elske det!

indtast billedebeskrivelse her

Kommentarer

  • Hvis jeg kunne, ville jeg nedstemme dette til Oh-My-ZSH forslag. Som systemingeniør, der arbejder meget i terminalen, og som nogen, der forsøgte at vedtage zsh / oh-my-zsh i min arbejdsgang, kan ærligt sige, jeg vil aldrig anbefale ZSH til nogen. Sikker på, du kan symlink zsh til en fil opkaldt efter en hvilken som helst anden skal og efterligne den skal, men når du gør det, læser den ikke ‘ ikke din .bashrc, .bash_profile osv. Også , du kan ikke placere emulate bash i dine .zprofile- eller .zshrc-filer. For enhver, der arbejder med avancerede funktioner i BASH, er der mange finesser, der vil bide dig. BASH er en bedre sh.
  • Det eneste, ZSH har uden for boksen, der er bedre end BASH, er kommandofuldførelse, men selv det kan programmeres i BASH. Måske skal nogen, der ikke ‘ ikke bruger skallen undtagen lejlighedsvise verdslige opgaver, vedtage ZSH, men det ‘ er ikke for nogen, der har brug for Brug skallen i vid udstrækning. =~ operatøren kan bide dig, som ZSH håndterer arrays, kan bide dig osv. Efter at have brugt ZSH / Oh-My-ZSH i cirka 9 måneder havde jeg nok af det. Jeg brugte et tilpasset tema, som jeg selv skrev, jeg overførte det til BASH og skrev min egen git promptline, og jeg ‘ har aldrig set mig tilbage. Nu bekymrer jeg mig ikke længere om bærbarhed
  • ” den har en af de mest kraftfulde konsolfunktioner, som jeg så. En af dem vælger tema til din terminal. ”
  • @JonathanHartley, din kommentar ser ud til at du har efterladt den ufuldstændig. ?
  • Tak for din bekymring, men min kommentar siger alt, hvad jeg havde tænkt mig at sige.

Svar

For at se diff output i farve skal du bruge colordiff .

sudo apt-get install colordiff 

Pipe ethvert diff-format output til colordiff:

output fra diff piped into colordiff

Dette inkluderer nogle af diffs alternative formater, som -y (side om side.)

Alternativt, hvis påberåbt standalone ( uden noget ledes ind i det), fungerer det som en indpakning omkring “diff” og farver output. Derfor har jeg dette i min .bashrc, til alias “diff” til colordiff.

# if colordiff is installed, use it if type colordiff &>/dev/null ; then alias diff=colordiff 

Kommentarer

  • .bashrc -eksemplet mangler det sidste fi og kunne konverteres til en enkeltlinjekommando: type colordiff &> /dev/null && alias diff='colordiff'

Svar

Noget tekstdekoration (fed) for let at skelne mellem root og non-root shell. For Zsh:

if test $UID = 0 then PS1="%B${PS1}%b " fi 

For Bash:

if test $UID = 0 then PS1="\033[1m${PS1}\033[0m" fi 

Kommentarer

  • Angiv din shell. Spørgsmålet ‘ s eneste shell-specifikke tag er bash , men jeg føler, at din kode ikke er bash.
  • @manatwork: undskyld, glemte at nævne, at det var Zsh. Opdateret mit indlæg.

Svar

Jeg spekulerede bare på det samme. Jeg har min egen tilgang, men jeg leder efter alternativer.

Jeg skriver bash-indpakninger omkring programopkald og sender deres output gennem sed. Hvad jeg kan lide ved sed er, at det vil ændre og ekko hver linje med det samme => ikke meget buffering. Jeg kan ikke lide, at for hvert opkald til et indpakket program skal sed -koden parses og kompileres.

For eksempel er det, hvad jeg gør for at farve output af 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" 

Svar

For at indstille prompten har jeg dette i min .bashrc-fil.

#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 

Dette giver mig en prompt, der ser sådan ud:

user@host(bash): ~/bin > 

Arbejdsmappen er i grøn Og brugernavnet er fed og cyan, medmindre jeg kørte skallen med sudo, i hvilket tilfælde brugernavnet (“root”) viser fed og rød.

Jeg personligt kan virkelig godt lide at have formateringskontroltegnene gemt i variabler, fordi det gør det lettere at læse koden for at indstille prompten. Det gør det også nemmere at redigere meddelelsen meget .

Årsagen til, at jeg bruger tput, er at den skal understøttes mere universelt end de underlige 033[01;31m\] sekvenser. Også som en ekstra bonus, hvis du echo $PS1 ved prompten, vil du se den rå prompt med farver i stedet for de uforståelige kontrolsekvenser.

Svar

Du kan prøve et projekt, der hjælper med at farvelægge scriptsoutput også, det hedder ScriptEchoColor ved kildesmed: http://scriptechocolor.sourceforge.net/

ex .:

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 

De automatiske farver kan konfigureres.

Dette er et eksempel gjort med det: indtast billedbeskrivelse her

Svar

Et stort Python -værktøj til almindeligt formål til farvning af output af kommandoer er “ colout

Du giver det en regex med N-grupper efterfulgt af en komma-adskilt liste over N-farver. Enhver tekst, der matcher en gruppe, vises i den tilsvarende farve.

Så hvis du f.eks. “Ser på noget testoutput:

python -m unittest discover -v 

Ufarvet output af nogle Python-ikke-test

så kan du granere det op med:

python -m unittest discover -v 2>&1 | colout "(.*ERROR$)|(.*FAIL$)|(\(.*\))" red,yellow,black bold 

Farvet output fra nogle Python-ikke-test

Se hvordan min regex har tre grupper (parentes) efterfulgt af tre farver (og eventuelt tre stilarter, men jeg har brugt en stenografi til at sætte alle farverne til “fed” , så den “sorte” gruppe, der matcher tekst i parentes, kommer ud som mørkegrå.)

Bemærk også, hvordan jeg skulle tilføje 2>&1 til slutningen af Python-påkaldelsen, fordi output fra unittest er på stderr, så jeg overførte den til stdout, så jeg kunne pibe den i colout.

Dette er generelt så let at bruge, at jeg ofte finder mig selv at skabe nyt colout invocat ioner on-the-fly og genbrug eller ændring af dem fra min kommandolinjehistorik.

Den eneste ulempe ved det er, at den kommer som en Python-pakke, ikke som en enkeltstående eksekverbar, så du skal installere det ved hjælp af pip eller sudo python setup.py install.

Svar

Jeg finder Solarized nyttig. Det er et pænt projekt med ensartede farver til mange applikationer.

http://ethanschoonover.com/solarized https://github.com/altercation/solarized

Svar

Du kan bruge min cf til filnavnfarvning på kommandolinjen, det er en hurtig lille awk-baseret farvelægning, der fungerer via rør – farvelægning af filnavne i Truecolor sRGB.

Den har en farvet farvet standardkonfiguration og i modsætning til ls lider det ikke over en ydeevne for at tilføje nye farver. (ls skal scanne hele LS_COLORS-strengen for hver miss).

https://github.com/AdamDanischewski/cf

cf-brug

cf screenshot

Svar

For Mac kan du bruge følgende som angivet her

if [ "$TERM" = xterm ]; then TERM=xterm-256color; fi 

Svar

Jeg bruger farveindpakning .

cw er en ikke-påtrængende ANSI-farveindpakning i realtid til almindelige unix-baserede kommandoer på GNU / linux. cw er designet til at simulere miljøet for de kommandoer, der udføres, så hvis en person skriver “du”, “df”, “ping” osv. i deres shell, vil den automatisk farve output i realtid efter en definition fil, der indeholder det ønskede farveformat. cw har understøttelse af farvelægning af jokertegn, tokeniseret farvning, sidehoved / sidefod, farveskift på scenarie, kommandolinjeafhængig definitionsfarvning og inkluderer over 50 foruddefinerede definitionsfiler.

Det er næsten problemfrit, men når jeg først fandt ud af, at ps i interaktiv skal returnerer forskellige output sammenlignet med ps i et rør.

Svar

hvis du vil gøre din vim farverig ligesom mig, foreslår jeg dig at følge to trin:

  1. lære at tænde funktionen ved at følge dette link: Aktivér farvesyntaksfremhævning i vi eller vim .

nøgletrin i linket:

  1. Rediger ~ / .vimrc-fil ved at skrive kommandoen: vi ~ /.vimrc

  2. Tilføj følgende mulighed: syntaks på

  3. Gem og luk filen

  4. Test det ved at køre vim kommando: vim foo.sh

  1. find et farveskema, du kan lide, og brug det. Det skema, som jeg bruger: det skema, jeg bruger

Kommentarer

Svar

Hvis bash er dit valg, anbefaler jeg oh-my-bash . Hvis zsh er dit valg, anbefaler jeg oh-my-zsh . Begge understøtter farvelægning af din terminal og forskellige output.

Svar

Jeg vil gerne ydmygt reklamere for min seneste publikation af ta eller textattr , et bibliotek og kommandolinjeværktøj der har til formål at gøre det lettere at tilføje farve og attributter til at forskønne terminaludgangen på dit program ved at oversætte menneskelig læsbare specifikationer til ANSI-flugtkoder.

For eksempel:

echo "The Git repo $(ta yellow)${CUR_REPO}$(ta off) is $(ta green)up-to-date$(ta off)"

eller endnu kortere:

echo "The Git repo $(ta y)${CUR_REPO}$(ta f) is $(ta g)up-to-date$(ta f)"

eller en alternativ:

tawrite "The Git repo " @y ${CUR_REPO} @f " is " @g up-to-date @f "\n"

giver dig noget som:

indtast billedebeskrivelse her

I øjeblikket kan dette bibliotek bruges fra fire sprog C, C ++, D og Python bortset fra kommandolinjebrug fra din yndlingsskal .

Bemærk, at det ikke automatisk farvelægger output fra andre programmer. Det er snarere et hjælpeprogram til at hjælpe dig med ikke h afing at huske de abstruse koder. Du behøver kun at bruge de tydelige farvenavne eller deres let at huske rgb cmyk w (hite) (of) f forkortelser.

For flere detaljer, besøg textattr repo .

Skriv et svar

Din e-mailadresse vil ikke blive publiceret. Krævede felter er markeret med *