Ik werk het grootste deel van mijn tijd in Unix omgevingen en gebruik terminal emulators. Ik probeer kleur te gebruiken op de commandoregel, omdat kleur de uitvoer bruikbaarder en intuïtiever maakt.
Welke opties bestaan er om kleur toe te voegen aan mijn terminal omgeving? Welke trucs gebruik jij? Welke valkuilen ben je tegengekomen?
Helaas varieert de ondersteuning voor kleur afhankelijk van het terminal type, OS, TERM instelling, hulpprogramma, buggy implementaties, enz.
Hier zijn enkele tips van mijn opstelling, na veel experimenteren:
TERM=xterm-color
in te stellen, wat ondersteund wordt op de meeste hosts (maar niet allemaal).Ik werk op een aantal verschillende hosts, verschillende OS versies, etc. Ik gebruik alles van macOS X, Ubuntu Linux, RHEL/CentOS/Scientific Linux en FreeBSD. Ik'probeer dingen eenvoudig en generiek te houden, indien mogelijk.
Ik doe een hoop werk met GNU screen
, wat nog een laag plezier toevoegt.
Veel OS'en stellen dingen als dircolors
en standaard in, en ik'wil dit niet op honderd verschillende hosts wijzigen. Dus ik probeer me aan de standaardwaarden te houden. In plaats daarvan tweak ik de kleurenconfiguratie van mijn terminal's.
Gebruik kleur voor sommige Unix commando's (ls
, grep
, less
, vim
) en de Bash prompt. Deze commando's lijken gebruik te maken van de standaard "ANSI escape sequences". Bijvoorbeeld:
alias less='less --RAW-CONTROL-CHARS'
export LS_OPTS='--color=auto'
alias ls='ls ${LS_OPTS}'
Ik'zal mijn .bashrc
posten en mijn eigen vraag Jeopardy Style beantwoorden.
Hier zijn een paar dingen die je kunt doen:
Editors + Code
Veel editors hebben ondersteuning voor syntax highlighting. Bij vim
en emacs
staat het standaard aan. Je kunt het ook inschakelen onder nano
.
U kunt ook syntax highlighting code op de terminal door gebruik te maken van Pygments als een command-line tool.
grep
grep --color=auto
markeert alle overeenkomsten. Je kunt ook export GREP_OPTIONS='--color=auto'
gebruiken om het persistent te maken zonder een alias. Als je --color=altijd
gebruikt, zal het'kleur gebruiken, zelfs bij piping]1, wat dingen verwart.
ls
ls --color=always
Kleuren gespecificeerd door:
export LS_COLORS='rs=0:di=01;34:ln=01;36:mh=00:pi=40;33'
(hint: dircolors
kan nuttig zijn)
PS1 U kunt uw PS1 (shell prompt) instellen om kleuren te gebruiken. Bijvoorbeeld:
PS1='\e[33;1m\u@\h: \e[31m\W\e[0m\$ '
Geeft een PS1 zoals:
[geel]lucas@ubuntu: [red]~[normal]$
Je kan hier echt creatief mee worden. Als een idee:
PS1='\e[s\e[0;0H\e[1;33m\h \t\n\e[1;32mThis is my computer\e[u[\u@\h: \w]\$ '
Zet een balk bovenaan in je terminal met wat willekeurige info. (Voor het beste resultaat, gebruik ook alias clear="echo -e '\e[2J\n'"
).
Verwijderen van Escape Sequences
Als iets vastzit in het uitvoeren van kleuren terwijl je dat niet wilt, gebruik ik deze sed
regel om de escape-sequenties te verwijderen:
sed "s/\[^[[0-9;]*[a-zA-Z]//gi"
Als u een meer authentieke ervaring wilt, kunt u ook regels verwijderen die beginnen met `{10800521}}, wat de terminal opdraagt om de tekst te verbergen. (Niet algemeen ondersteund.)
sed "s/^\[^[8m.*$//gi"
Merk ook op dat die ^[s echte, letterlijke ^[s moeten zijn. Je kunt ze typen door in bash op ^V^[ te drukken, dat is Ctrl + V, Ctrl + [.
grep
en ls
zijn al genoemd, als je nog veel meer kleuren wilt, kijk dan eens naar Generic Coloriser, het oorspronkelijke doel was om logfiles te kleuren, maar zo uit de doos kleurt het ook ping
, traceroute
, gcc
, make
, netstat
, diff
, last
, ldap
, en cvs
.
Het is gemakkelijk uit te breiden als je regexes kent. Ik heb ps
en nmap
aan de lijst toegevoegd (als je in grc
komt ben ik meer dan blij om de .conf bestanden voor die twee tools te delen)
(Btw, om het te installeren via synaptic
, pacman
, en dergelijke heb je misschien meer geluk met het zoeken naar "grc")
Een vette/gekleurde prompt instellen. Van cyberciti.biz en de 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 \$ "
Ik'ben er ook in geslaagd om kleurinstellingen te vinden die breed ondersteund worden, en die'geen gobbledygook tekens afdrukken in oudere omgevingen (zelfs FreeBSD4!), en lijkt prima te werken als TERM=vt100, xterm, xterm-color. (Voor het grootste deel). Van mijn .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