Jeg bruker mesteparten av tiden min på å jobbe i Unix-miljøer og bruker terminalemulatorer. Jeg prøver å bruke farger på kommandolinjen, fordi farger 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 støtt på?
Dessverre varierer støtten for farger avhengig av terminaltype, operativsystem, TERM-innstilling, verktøy, buggy-implementeringer osv.
Her er noen tips fra mitt oppsett, etter mye eksperimentering:
Jeg pleier å sette TERM=xterm-color
, som støttes på de fleste verter (men ikke alle).
Jeg jobber på 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 enkelt og generisk, hvis mulig.
Jeg gjør en haug med arbeid ved hjelp av GNU screen
, som legger til et annet lag med moro.
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 standardinnstillingene. I stedet justerer jeg terminalens fargekonfigurasjon.
Bruk farge for noen Unix-kommandoer (ls
, grep
, less
, vim
) og Bash-prompten. Disse kommandoene ser ut til å bruke standard "ANSI escape-sekvenser ". For eksempel
alias less='less --RAW-CONTROL-CHARS'
export LS_OPTS='--color=auto'
alias ls='ls ${LS_OPTS}'
Jeg skal legge ut min .bashrc
og svare på mitt eget spørsmål Jeopardy Style.
Her er et par ting du kan gjøre:
Editorer + Kode
Mange editorer har støtte for syntaksutheving. vim
og emacs
har det på som standard. Du kan også aktivere det under nano
.
Du kan også syntaksutheve kode på terminalen ved å bruke Pygments som et kommandolinjeverktøy.
grep
grep --color=auto
uthever alle treff. Du kan også bruke export GREP_OPTIONS='--color=auto'
for å gjøre det vedvarende uten et alias. Hvis du bruker --color=always
, vil det bruke farge selv ved 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 nyttig)
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:
[yellow]lucas@ubuntu: [red]~[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 informasjon. (For best resultat, bruk også alias clear="echo -e '\e[2J\n\n'"
).
Bli kvitt rømningssekvenser
Hvis noe sitter fast og gir ut farge når du ikke vil det, bruker jeg denne sed
-linjen 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 begynner med \e[8m
, som instruerer terminalen til å skjule teksten. (Ikke allment støttet.)
sed "s/^\[^[8m.*$//gi"
Legg også merke til at disse ^[s skal være faktiske, bokstavelige ^[s. Du kan skrive dem ved å trykke ^V^[ i bash, det vil si Ctrl + V, Ctrl + [.
grep
og ls
har allerede blitt nevnt, hvis du vil ha mange flere farger, sjekk ut Generic Coloriser, dens opprinnelige formål var å fargelegge loggfiler, men rett ut av esken fargelegger den også ping
, traceroute
, gcc
, make
, netstat
, diff
, last
, ldap
og cvs
.
Det er lett utvidet hvis du kjenner regexer. Jeg har lagt ps
og nmap
til listen (hvis du kommer inn i grc
vil jeg mer enn gjerne dele .conf-filene for disse to verktøyene).
(Btw, for å installere det via synaptic
, pacman
og lignende kan du ha bedre hell med å søke etter " grc ")
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 bredt, 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-color. (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