Fargelegge terminal- og skallmiljøet ditt?

Jeg bruker mesteparten av tiden min på å jobbe i Unix-miljøer og bruke terminalemulatorer. Jeg prøver å bruke farge på kommandolinjen, fordi farge gjør utdataene mer nyttige og intuitive.

Hvilke alternativer finnes for å legge til farger i terminalmiljøet mitt? Hvilke triks bruker du? Hvilke fallgruver har du møtt?

Støtte for farger varierer dessverre avhengig av terminaltype, OS, TERM-innstilling, verktøy, buggy-implementeringer osv.

Her er noen tips fra oppsettet mitt , etter mye eksperimentering:

  1. Jeg pleier å sette TERM=xterm-color, som støttes av de fleste verter (men ikke alle).
  2. Jeg jobber med en rekke forskjellige verter, forskjellige OS-versjoner osv. Jeg bruker alt fra macOS X, Ubuntu Linux, RHEL / CentOS / Scientific Linux og FreeBSD. Jeg prøver å holde ting enkle og generiske, hvis det er mulig.
  3. Jeg gjør et stort arbeid med GNU screen, som gir et nytt lag med moro.
  4. Mange operativsystemer setter ting som dircolors og som standard, og jeg vil ikke endre dette på hundre forskjellige verter. Så jeg prøver å holde meg til standardene. I stedet justerer jeg terminalens fargekonfigurasjon.
  5. Bruk farge for noen Unix-kommandoer (ls, grep, less, vim) og Bash prompt . Disse kommandoene ser ut til å bruke standarden « ANSI escape-sekvenser «. For eksempel:

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

Jeg legger ut .bashrc og svarer på mitt eget spørsmål Jeopardy Style .

Kommentarer

  • fyi min tilnærming (se svaret nedenfor) adresserer problemer med OSX og Linux forskjeller, for eksempel er farge på en ls -G og på den andre er ls –color-auto
  • Så noen et verktøy for å farge kolonner? Det er et column -t --color?

Svar

Her er et noen ting du kan gjøre:

Redaktører + kode
Mange redaktører har syntaks fremhever støtte. vim og emacs har den på som standard. Du kan også aktivere det under nano .

Du kan også syntaks markere kode på terminal ved å bruke Pygments som kommandolinjeverktøy.

grep
grep --color=auto fremhever alle kampene. Du kan også bruke export GREP_OPTIONS="--color=auto" for å gjøre det vedvarende uten et alias. Hvis du bruker --color=always, bruker den «ll farge selv når du piping , noe som forvirrer ting.

ls

ls --color=always

Farger spesifisert av:

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

(hint: dircolors kan være nyttige)

PS1
Du kan stille inn PS1 (shell prompt) til å bruke farger. For eksempel:

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

Vil produsere en PS1 som:

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

Du kan bli veldig 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]\$ " 

Setter en stolpe øverst på terminalen din med litt tilfeldig info. (For best resultat, bruk også alias clear="echo -e "\e[2J\n\n"".)

Bli kvitt rømningssekvenser

Hvis noe setter seg fast og skriver ut farger når du ikke vil ha det, bruker jeg denne sed linje for å fjerne rømningssekvensene:

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

Hvis du vil ha en mer autentisk opplevelse, kan du også kvitte deg med linjer som starter med \e[8m, som instruerer terminalen om å skjule teksten. (Støttes ikke allment.)

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

Vær også oppmerksom på at disse ^ [sene skal være faktiske, bokstavelige ^ [s. Du kan skrive dem ved å trykke ^ V ^ [i bash, det vil si Ctrl + V , Ctrl + [ .

Kommentarer

  • Den første PS1-linjen skal lyde slik: PS1='\e[33;1m\u@\h: \e[31m\W\e[0m\$ '. Det er overflødig x etter fjerde tilbakeslag.
  • Rømninger bør være omsluttet av \[...\], ellers vil kommandoer i andre linje overskrive første linje. PS1 = ‘ [ \ e [33; 1m ] \ u @ \ h: [ \ e [31m ] \ W \ e [0m \ $ ‘
  • ls --color=always fungerer ikke ‘ t.@Michael Durrant ‘ s tilnærming er bedre for dette: ls --color=al > /dev/null 2>&1 && alias ls='ls -F --color=al' || alias ls='ls -G'

Svar

Jeg bruker også:

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

Og hvis du liker å fargelegge forespørselen din, kan definerte farger 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å blir ledeteksten min slik:

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) kaller et python-skript i ~ / sbin som skriver ut versjonskontrollinformasjon om den nåværende banen. Den inkluderer støtte for Mercurial, Git, Svn, Cvs, etc. Forfatteren av skriptet har kilden her .

Skjermbilde av Bash prompt

Dette er full kilde for min hurtige konfigurasjon:

Kommentarer

  • Se her for løsningen på et linjeproblem jeg fikk da jeg brukte ovennevnte PS1: stackoverflow.com/questions/5087036/…
  • I ‘ har oppdatert svaret for å gjenspeile de rømte parentesene for fargene i ledeteksten. Takk!
  • $LSCOLORS og $CLICOLOR er for BSD ls. GNU ls (Linux) bruker $LS_COLORS med en annen syntaks. Da GNU føles som hjemme for meg, bruker jeg LSCOLORS=exgxfxDacxBaBaCaCaeaEa for å etterligne GNU ‘ s farger på BSD.
  • grep: warning: GREP_OPTIONS is deprecated; please use an alias or script
  • Det kan hende du må kilden til .bashrc -filen for at endringen skal være effektiv. Du kan gjøre det med følgende kommando. source /path/to/.bashrc

Svar

grep og ls har allerede blitt nevnt, hvis du vil ha mange flere farger, sjekk ut Generic Coloriser , det opprinnelige formålet var å fargelegge loggfilene, men rett ut av boksen fargelegger det også ping, traceroute, gcc, make, netstat, diff, last, ldap og cvs.

Det utvides lett hvis du vet regexes. Jeg har lagt til ps og nmap til listen (hvis du kommer inn i grc Jeg vil mer enn gjerne dele .conf-filene for de to verktøyene)

(Btw, for å installere den via synaptic, pacman, og du kan også ha bedre lykke til å søke for «grc»)

Kommentarer

  • grc støtter nå ps som standard. Jeg ‘ ville være interessert i nmap fargestoffer. Se også svaret mitt for aliasing av alle disse på en måte som vil absorbere nye kommandoer når du oppgraderer grc.
  • Jeg la merke til det. her ‘ er min conf.nmap (og alt annet, egentlig) gist.github.com/sygo/844982#file-conf -nmap – Jeg la merke til at du jobber i infosec, du kan finne conf.hexdump interessant, jeg har ikke ‘ ikke ferdig ennå.
  • Takk @Sygo. Jeg ‘ har forkledd og revidert kjernen din. Jeg ‘ har aldri begått data med git (enn si github ‘ s gists) og jeg kan ikke finne ut hvordan jeg kan foreslå å slå det sammen til deg (jeg ‘ jeg gjetter at dette er fordi gists er for forenklet).
  • Jeg mistenker at du kan ‘ t fordi det ‘ er en kjernen og ikke et riktig lager. Jeg sjekket ut gaffelen din, og jeg ‘ gir definitivt versjonen din en sjanse. Jeg ‘ er nysgjerrig på hva den sekskantede dumpen vil bli til …

Svar

Jeg har pusset .bashrc opp gjennom årene for å jobbe med både OSX og Ubuntu.
Jeg har også redusert den i størrelse til 28 linjer med kompakte tilstandsuttalelser.
Med den , PS1-ledeteksten min ser ut: skriv inn bildebeskrivelse her

med tiden i rødt, brukernavnet i grønt, maskinnavnet i lyseblått, pwd i mørkere blått og git gren i gult.

Feature of my PS1 prompt:

  • shows git branch!
  • lange katalogbaner (mer enn 6 elementer) er » trimmet «for å vise topp 3 og nederste 3 kataloger med _ mellom da (det er pwd sed delen av LOCATION).
  • vognretur på slutten slik at ledeteksten alltid er til venstre!

De relevante linjene fra .bashrc -filen min 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 farger når tilgjengelig d ingen feil når ikke (dvs.OSX):

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

Kommentarer

Svar

Farger for mansider ( 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 -; } 

Farger for grep (1;32 er lysegrønn, se andre innlegg her for andre farger):

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 farger for 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 fargestoff ) og legg den til i aliasene dine:

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

Farger for diff : For mye innhold for en funksjon, bruk et skript og alias det i rc-filen din (unødvendig hvis du installerte 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; 

Farger for 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 av bash prompt

Kommentarer

  • Stem på et skjermbilde
  • Min PSWD() -funksjonen pleide å være POSIX-kompatibel, men den ‘ er så mye lettere forenklet bruker bash / zsh underlagshåndtering. Se revisjon 6 for POSIX-versjonen, som involverer mange spørsmålstegn og ikke var ‘ t i det hele tatt tilpassbar til terminal bredde. Jeg ‘ t oppdaterte skjermbildet, men det ‘ er bare en liten endring på 80 tegn bredde.
  • CLICOLOR=1 fungerer ikke ‘ for meg med FREEBSD 11.2
  • @SimonC. – Du bruker kanskje GNU-verktøy på FreeBSD-systemet ditt i stedet for BSD-enhetene. CLICOLOR=1 ls bør gjøre det samme som ls -G ved å bruke BSD (ls -g på eldre BSD-er). Hvis ls --color fungerer (ingen feil), bruker du ‘ GNU ‘ s ls kommando og $CLICOLOR ignoreres.
  • @SimonC. – Du må faktisk laste inn ~/.bashrc for at endringene skal tre i kraft. Enten kjør source ~/.bashrc eller start en ny bash-økt (start en terminal eller kjør bash).

Svar

Angi en fet / farget ledetekst. 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å klart å finne fargeinnstillinger som støttes mye, og som ikke skriver ut gobbledygook-tegn i eldre miljøer (til og med FreeBSD4!), og ser ut til å fungere bra hvis TERM = vt100, xterm , xterm-farge. (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 som ikke er sagt allerede her:

For å fargelegge utdataene fra kompileringene dine med gcc , det er colorgcc av Johannes Schlüter

For å fargelegge logger, det er multitail

For å fargelegge hvilken som helst stdout, satte jeg sammen xcol

xcol-eksempel

Jeg bruker personlig disse fra xcol-verktøyet.

#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 bruker disse variablene i skriptene mine slik

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

Jeg liker også denne lille funksjonen colouredEcho (funnet 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, har ikke lov til å legge ut flere lenker

Kommentarer

  • Hei, hvordan lager du flaggene for hurtigveien? Jeg nevner de rektangulære stolpene med trekantendene Takk
  • fungerer det også i en ubuntu GNU-terminal?
  • lnav er også et flott verktøy for å vise fargede loggfiler

Svar

Det er et godt verktøy for å sette opp fargene dine for kommandoen ls – http://geoff.greer.fm/lscolors/

Svar

Jeg foreslår at du sjekker ut ZSH og dens plugin oh-my-zsh som har en av de kraftigste konsollfunksjonene jeg så. En av dem er å velge tema for terminalen din. Dette er et eksempel på temaet mitt … Fargene er ikke så varme, men de er de samme som på dette bildet … Uansett hvordan du vil elske det!

skriv inn bildebeskrivelse her

Kommentarer

  • Hvis jeg kunne, vil jeg nedstemme dette for Oh-My-ZSH som systemingeniør som jobber mye i terminalen, og som noen som prøvde å ta i bruk zsh / oh-my-zsh i arbeidsflyten min, kan ærlig si at jeg aldri vil anbefale ZSH til noen. Visst, du kan symlink zsh til en fil oppkalt etter et hvilket som helst annet skall og etterligne det skallet, men når du gjør det, leser det ikke ‘ .bashrc, .bash_profile osv. Også. , du kan ikke plassere emulate bash i .zprofile- eller .zshrc-filene. For alle som jobber med avanserte funksjoner i BASH, er det mange finesser som vil bite deg. BASH er en bedre sh.
  • Det eneste ZSH har utenfor boksen som er bedre enn BASH er kommandofullføring, men selv det er programmerbart i BASH. Kanskje noen som ikke ‘ ikke bruker skallet bortsett fra sporadiske, verdslige oppgaver, bør ta i bruk ZSH, men det ‘ er ikke for noen som trenger det bruk skallet mye. =~ operatøren kan bite deg, slik ZSH håndterer arrays, kan bite deg osv. Etter å ha brukt ZSH / Oh-My-ZSH i omtrent 9 måneder hadde jeg nok av det. Jeg brukte et tilpasset tema som jeg skrev selv, jeg overførte det til BASH og skrev min egen git promptline, og jeg ‘ har aldri sett meg tilbake. Nå bekymrer jeg meg ikke lenger for bærbarhet
  • » den har en av de kraftigste konsollfunksjonene jeg så. En av dem er å velge tema for terminalen din. »
  • @JonathanHartley, kommentaren din ser ut som du la den være ufullstendig. ?
  • Takk for at du bekymrer deg, men kommentaren min sier alt jeg hadde tenkt å si.

Svar

For å se diff-utdata i farger, bruk colordiff .

sudo apt-get install colordiff 

Pipe hvilken som helst diff-format utgang til colordiff:

utdata fra diff piped i colordiff

Dette inkluderer noen av forskjellige alternative formater, som -y (side om side.)

Alternativt, hvis påkalt frittstående ( uten noe ledet inn i den), fungerer den som en omslag rundt «diff», og farger utgangen. Derfor har jeg dette i .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 siste fi, og kan konverteres til en enkeltlinjekommando: type colordiff &> /dev/null && alias diff='colordiff'

Svar

Noe tekstdekorasjon (fet skrift) for enkelt å skille mellom 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

  • Oppgi skallet ditt. Spørsmålet ‘ s eneste skallspesifikke tag er bash , men jeg føler at koden din ikke er bash.
  • @manatwork: beklager, glemte å nevne at det var Zsh. Oppdaterte innlegget mitt.

Svar

Jeg lurte bare på det samme. Jeg har min egen tilnærming, men jeg ser etter alternativer.

Jeg skriver bash-omslag rundt programanrop og piper utdataene deres selv om sed. Det jeg liker med sed er at den vil endre og ekko hver linje med en gang => ikke mye buffering. Jeg liker imidlertid ikke at for hver samtale til et innpakket program sed -koden blir analysert og kompilert.

Dette er for eksempel det jeg gjør for å fargelegge utdataene til 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 å stille inn spørringen har jeg dette i .bashrc-filen.

#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 gir meg en melding som ser slik ut:

user@host(bash): ~/bin > 

Arbeidskatalogen er i grønt Og brukernavnet er fet og cyan med mindre jeg kjørte skallet med sudo, i så fall viser brukernavnet («root») fet skrift og rødt.

Jeg personlig liker veldig godt at formateringskontrolltegnene er lagret i variabler, fordi det gjør det enkelt å lese koden for å stille inn spørringen. Det gjør også redigering av forespørselen mye lettere.

Grunnen til at jeg bruker tput er at den skal støttes mer universelt enn de rare 033[01;31m\] -sekvensene. Hvis du gjør echo $PS1 som en ekstra bonus, vil du også se den rå ledeteksten med farger i stedet for de uforståelige kontrollsekvensene.

Svar

Du kan prøve et prosjekt som hjelper til med å fargelegge skriptutdata også, det heter ScriptEchoColor at source source: 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 fargene kan konfigureres.

Dette er et eksempel gjort med det: skriv inn bildebeskrivelse her

Svar

Et flott generelt Python verktøy for å fargelegge utdataene fra kommandoer er « colout «

Du gir den en regex med N-grupper, etterfulgt av en kommaadskilt liste over N-farger. Tekst som samsvarer med en gruppe vil vises i tilsvarende farge.

Så hvis du for eksempel ser på noen testutdata:

python -m unittest discover -v 

Ufarget utdata fra noen Python-ikke-prøver

så kan du granere den opp med:

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

Farget utdata fra noen Python-unittests

Se hvordan regexen min har tre grupper (parentes) etterfulgt av tre farger (og eventuelt tre stiler, men jeg har brukt en stenografi for å sette alle fargene til «fet» , så den «svarte» gruppen, som samsvarer med tekst i parentes, kommer ut som mørk grå.)

Legg også merke til hvordan jeg måtte legge til 2>&1 til slutt av Python-påkallingen, fordi utgangen av unittest er på stderr, så jeg overførte den til stdout slik at jeg kunne pipe den inn i colout.

Dette er generelt så enkelt å bruke at jeg ofte finner meg selv i å skape nye colout invocat ioner på farten, og gjenbruk eller modifisering av dem fra kommandolinjehistorikken min.

Den eneste ulempen med det er at den kommer som en Python-pakke, ikke som en frittstående kjørbar, så du må installere det ved hjelp av pip, eller sudo python setup.py install.

Svar

Jeg synes Solarized er nyttig. Det er et pent prosjekt med ensartede farger for mange applikasjoner.

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

Svar

Du kan bruke min cf for å fargelegge filnavnet på kommandolinjen, det er en rask, liten awk-basert fargelegger som fungerer via rør – fargelegger filnavn i Truecolor sRGB.

Den har en farget farget standardkonfigurasjon, og i motsetning til ls, lider det ikke ytelsesstraff for å legge til nye farger. (ls må skanne hele LS_COLORS-strengen for hver glipp).

https://github.com/AdamDanischewski/cf

cf bruk

cf skjermbilde

Svar

For Mac kan du bruke følgende som angitt her

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

Svar

Jeg bruker fargeomslag .

cw er en ikke-påtrengende sanntids ANSI-fargepapir for vanlige unix-baserte kommandoer på GNU / linux. cw er designet for å simulere miljøet til kommandoene som utføres, slik at hvis en person skriver «du», «df», «ping» osv. i skallet, vil den automatisk farge utdataene i sanntid i henhold til en definisjon filen som inneholder ønsket fargeformat. cw har støtte for jokertegn-fargelegging, tokenisert fargelegging, topptekster / bunntekster, fargesetting på sak, kommandolinjeavhengig definisjonsfarging, og inkluderer over 50 forhåndslagde definisjonsfiler.

Det er nesten sømløst, men når jeg en gang fant ut at ps i interaktivt skall returnerer forskjellig output sammenlignende ps i et rør.

Svar

hvis du vil gjøre vim fargerikt akkurat som meg, foreslår jeg at du følger to trinn:

  1. lær hvordan du slår på funksjonen ved å følge denne lenken: slå på fargesyntaksutheving i vi eller vim .

viktige trinn i lenken:

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

  2. Legg til følgende alternativ: syntaks på

  3. Lagre og lukk filen

  4. Test det ved å kjøre vim-kommando: vim foo.sh

  1. finn et fargevalg du liker, og bruk det. Ordningen som jeg bruker: skjemaet jeg bruker

Kommentarer

Svar

Hvis bash er ditt valg, anbefaler jeg oh-my-bash . Hvis du velger zsh, anbefaler jeg oh-my-zsh . Begge støtter fargelegging av terminalen din og forskjellige utdata.

Svar

Jeg vil ydmykt annonsere min nylige publikasjon av ta eller textattr , et bibliotek og kommandolinjeverktøy som har som mål å gjøre det lettere å legge til farger og attributter for å forskjønne terminalutgangen til programmet ditt ved å oversette menneskelesbare spesifikasjoner til ANSI-rømningskoder.

For eksempel:

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

eller enda 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"

gir deg noe sånt som:

skriv inn bildebeskrivelse her

For øyeblikket er dette biblioteket brukbart fra fire språk C, C ++, D og Python bortsett fra kommandolinjebruk fra favorittskallet ditt .

Merk at det ikke automatisk fargelegger utdataene fra andre programmer. Det er heller et verktøy som hjelper deg med ikke h aving å huske de abstrakte kodene. Du trenger bare å bruke de åpenbare fargenavnene eller deres lett å huske rgb cmyk w (hite) (of) f forkortelser.

For mer informasjon besøk tekstattr repo .

Legg igjen en kommentar

Din e-postadresse vil ikke bli publisert. Obligatoriske felt er merket med *