Uw terminal- en shell-omgeving inkleuren?

Ik breng het grootste deel van mijn tijd door met werken in Unix-omgevingen en het gebruik van terminalemulators. Ik probeer kleur te gebruiken op de opdrachtregel, omdat kleur de uitvoer nuttiger en intuïtiever maakt.

Welke opties zijn er om kleur toe te voegen aan mijn terminalomgeving? Welke trucs gebruik je? Welke valkuilen ben je tegengekomen?

Helaas varieert de ondersteuning voor kleur afhankelijk van het type terminal, het besturingssysteem, de TERM-instelling, het hulpprogramma, buggy-implementaties, enz.

Hier zijn enkele tips van mijn setup , na veel experimenteren:

  1. Ik heb de neiging om TERM=xterm-color in te stellen, wat wordt ondersteund op de meeste hosts (maar niet alle).
  2. Ik werk op een aantal verschillende hosts, verschillende OS-versies, enz. Ik gebruik alles van macOS X, Ubuntu Linux, RHEL / CentOS / Scientific Linux en FreeBSD. Ik “probeer de dingen eenvoudig en algemeen te houden, indien mogelijk.
  3. Ik doe veel werk met GNU screen, wat nog een leuke laag toevoegt.
  4. Veel besturingssystemen stellen dingen in zoals dircolors en standaard, en ik wil dit niet wijzigen op honderd verschillende hosts. Dus ik probeer vast te houden aan de standaardinstellingen. In plaats daarvan pas ik de kleurconfiguratie van mijn terminal aan.
  5. Gebruik kleur voor sommige Unix-opdrachten (ls, grep, less, vim) en de Bash-prompt . Deze opdrachten lijken de standaard “ ANSI-escape-reeksen ” te gebruiken. 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 .

Opmerkingen

  • fyi mijn benadering (zie antwoord hieronder) lost problemen op met OSX- en Linux-verschillen, bijvoorbeeld kleur op de ene is ls -G en aan de andere kant is ls –color-auto
  • Heeft iemand een tool gezien om kolommen te kleuren? Dat is een column -t --color?

Antwoord

Hier is een een paar dingen die u kunt doen:

Editors + Code
Veel editors hebben syntaxis benadrukken ondersteuning. vim en emacs hebben het standaard ingeschakeld. U kunt het ook inschakelen onder nano .

U kunt ook syntaxismarkeringscode op de terminal door Pygments te gebruiken als een opdrachtregelprogramma.

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 u --color=always gebruikt, “ll gebruikt u zelfs kleur als piping , wat verwarring veroorzaakt.

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
Je kunt je PS1 (shell-prompt) instellen om kleuren te gebruiken. Bijvoorbeeld:

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

Zal een PS1 produceren zoals:

[geel] lucas @ ubuntu: [rood] ~ [normaal] $

Je kunt hier heel 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 je terminal met wat willekeurige informatie. (Voor de beste resultaten, gebruik ook alias clear="echo -e "\e[2J\n\n"".)

Ontdoen van ontsnappingsreeksen

Als er iets vastzit bij het uitvoeren van kleur terwijl je dat niet wilt, gebruik ik dit sed regel om de escape-reeksen 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 \e[8m, wat de terminal instrueert om de tekst te verbergen. (Niet algemeen ondersteund.)

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

Merk ook op dat die ^ [s feitelijke, letterlijke ^ [s moeten zijn. Je kunt ze typen door op ^ V ^ [in bash te drukken, dat is Ctrl + V , Ctrl + [ .

Opmerkingen

  • De eerste PS1-regel zou als volgt moeten luiden: PS1='\e[33;1m\u@\h: \e[31m\W\e[0m\$ '. Er is een overbodige x na de vierde backslash.
  • Escapes moeten tussen \[...\] worden geplaatst, anders zullen opdrachten op de tweede regel de eerste regel overschrijven. PS1 = ‘ [ \ e [33; 1m ] \ u @ \ h: [ \ e [31m ] \ W \ e [0m \ $ ‘
  • De ls --color=always werkt niet ‘ niet.@Michael Durrant ‘ s aanpak is hier beter voor: ls --color=al > /dev/null 2>&1 && alias ls='ls -F --color=al' || alias ls='ls -G'

Antwoord

Ik gebruik ook:

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

En als u uw prompt wilt inkleuren, kunnen gedefinieerde kleurvars nuttig zijn:

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" 

En dan is mijn prompt ongeveer zo:

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) roept een python-script aan in mijn ~ / sbin dat versiebeheerinformatie over het huidige pad afdrukt. Het bevat ondersteuning voor Mercurial, Git, Svn, Cvs, etc. De auteur van het script heeft de bron hier .

Schermafbeelding van bash-prompt

Dit is de volledige bron van mijn promptconfiguratie:

Opmerkingen

  • Zie hier voor de oplossing voor een lijnprobleem dat ik kreeg toen ik het bovenstaande gebruikte PS1: stackoverflow.com/questions/5087036/…
  • I ‘ hebben het antwoord bijgewerkt om de ontsnapte haakjes voor de kleuren in de prompt weer te geven. Bedankt!
  • $LSCOLORS en $CLICOLOR zijn voor BSD ls. GNU ls (Linux) gebruikt $LS_COLORS met een andere syntaxis. Omdat GNU voor mij als thuis aanvoelt, gebruik ik LSCOLORS=exgxfxDacxBaBaCaCaeaEa om de kleuren van GNU ‘ op BSD na te bootsen.
  • grep: warning: GREP_OPTIONS is deprecated; please use an alias or script
  • Mogelijk moet u het .bashrc -bestand zoeken om de wijziging effectief te laten zijn. U kunt het doen met het volgende commando. source /path/to/.bashrc

Antwoord

grep en ls zijn al genoemd, als je veel meer kleuren wilt, ga dan naar Generic Coloriser , het oorspronkelijke doel was om logfiles in te kleuren, maar het kleurt meteen ook ping, traceroute, gcc, make, netstat, diff, last, ldap, en cvs.

Het is gemakkelijk uit te breiden als u ken regexes. Ik “heb ps en nmap toegevoegd aan de lijst (als je grc Ik zal met plezier de .conf-bestanden voor die twee tools delen)

(Trouwens, om het te installeren via synaptic, pacman, en u zult wellicht meer geluk hebben met zoeken for “grc”)

Reacties

  • grc ondersteunt nu ps standaard. Ik ‘ zou geïnteresseerd zijn in uw nmap kleuringen. Zie ook mijn antwoord voor het aliassen van al deze op een manier die nieuwe commandos absorbeert wanneer je grc opwaardeert.
  • Dat heb ik gemerkt. hier ‘ s mijn conf.nmap (en al het andere eigenlijk) gist.github.com/sygo/844982#file-conf -nmap – Ik heb gemerkt dat je in infosec werkt, misschien vind je conf.hexdump interessant, ik heb ‘ nog niet afgemaakt.
  • Bedankt @Sygo. Ik ‘ heb gevorkt en je kern herzien. Ik ‘ heb nooit echt gegevens vastgelegd met git (laat staan github ‘ s gists) en ik kan niet bedenken hoe ik moet voorstellen om het weer samen te voegen aan jou (ik ‘ vermoed dat dit komt omdat gists te vereenvoudigd zijn).
  • Ik vermoed dat je ‘ t omdat het ‘ een kern is en geen goede repository. Ik heb je fork wel gecontroleerd en ik ‘ ben zeker bezig met je versie. Ik ‘ ben benieuwd waar die hexadecimale dump in zal veranderen …

Antwoord

Ik heb mijn .bashrc door de jaren heen aangescherpt om aan zowel OSX als Ubuntu te werken.
Ik heb het ook verkleind tot 28 regels met compacte toestandsverklaringen.
Met het , mijn PS1-prompt ziet er als volgt uit: voer de afbeeldingsbeschrijving hier in

met tijd in rood, gebruikersnaam in groen, machinenaam in lichtblauw, pwd in donkerder blauw en git branch in geel.

Feature van mijn PS1-prompt:

  • toont git branch!
  • lange mappaden (meer dan 6 elementen) zijn ” bijgesneden “om de bovenste 3 en de onderste 3 mappen weer te geven met _ ertussen (dat” is het pwd sed deel van LOCATION).
  • regelterugloop aan het einde zodat de prompt altijd aan de linkerkant staat!

De relevante regels uit mijn .bashrc -bestand zijn:

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

Voor ls met kleuren indien beschikbaar en d geen fouten als dat niet het geval is (d.w.z.OSX):

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

Reacties

Antwoord

Kleuren voor man-paginas ( meer 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 -; } 

Kleuren voor grep (1;32 is heldergroen, zie andere berichten hier voor andere kleuren):

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" 

Meer kleuren voor 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 

Installeer grc ( Generieke kleurmaker ) en voeg het toe aan uw aliassen:

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

Kleuren voor diff : Te veel inhoud voor een functie, gebruik een script en alias het in je rc-bestand (niet nodig als je grc hebt geïnstalleerd):

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

Kleuren voor 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 van bash-prompt

Reacties

  • Upvote voor een screenshot
  • Mijn PSWD() -functie was voorheen POSIX-compatibel, maar het ‘ is zo veel gemakkelijker gefaciliteerd met behulp van bash / zsh-substringverwerking. Zie revisie 6 voor de POSIX-versie, die veel vraagtekens bevat en die helemaal niet ‘ kon worden aangepast aan de terminal breedte. Ik heb ‘ de schermafbeelding niet bijgewerkt, maar het ‘ is slechts een kleine wijziging bij de breedte van 80 tekens.
  • CLICOLOR=1 werkt niet ‘ voor mij met FREEBSD 11.2
  • @SimonC. – Mogelijk gebruikt u GNU-hulpprogrammas op uw FreeBSD-systeem in plaats van de BSD-hulpprogrammas. CLICOLOR=1 ls zou hetzelfde moeten doen als ls -G met BSD (ls -g op oudere BSDs). Als ls --color werkt (geen fout), ‘ gebruikt GNU ‘ s ls commando en $CLICOLOR wordt genegeerd.
  • @SimonC. – U moet uw ~/.bashrc daadwerkelijk laden om eventuele wijzigingen door te voeren. Voer ofwel source ~/.bashrc uit of start een nieuwe bash-sessie (start een terminal of start bash).

Answer

Stel een vetgedrukte / gekleurde prompt in. 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 worden ondersteund, en die geen gobbledygook-tekens afdrukken in oudere omgevingen (zelfs FreeBSD4!), en die prima lijken te werken als TERM = vt100, xterm , xterm-kleur. (Voor het grootste gedeelte). 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 

Reacties

Antwoord

Dingen die hier nog niet zijn gezegd:

Om de output van je compilaties in te kleuren met gcc , er is colorgcc door Johannes Schlüter

Om logs in te kleuren, is er multitail

Om elke stdout in te kleuren, heb ik xcol

xcol voorbeeld

Ik gebruik persoonlijk deze uit de 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 

Ik gebruik deze variabelen in mijn scripts als volgt

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

Ik hou ook van deze kleine functie colouredEcho (gevonden op 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 

Sorry, het is niet toegestaan om meer links te plaatsen

Opmerkingen

  • Hallo, hoe maak je de vlaggen voor het promptpad? Ik noem de rechthoekige staven met driehoekige uiteinden. Bedankt
  • werkt het ook in een ubuntu GNU-terminal?
  • lnav is ook een geweldig hulpmiddel om gekleurde logbestanden weer te geven.

Antwoord

Er “een goede tool om je kleuren in te stellen voor het ls commando – http://geoff.greer.fm/lscolors/

Answer

Ik raad je aan om ZSH en zijn plug-in oh-my-zsh die een van de krachtigste consolefuncties heeft die ik heb gezien. Een daarvan is het kiezen van een thema voor je terminal. Dit is een voorbeeld van mijn thema … In tty zijn de kleuren niet zo warm, maar ze zijn hetzelfde als op deze foto … Hoe dan ook, je zult het geweldig vinden!

voer de beschrijving van de afbeelding hier in

Opmerkingen

  • Als ik kon, zou ik dit afkeuren voor de Oh-My-ZSH suggestie. Als systeemingenieur die veel in de Terminal werkt, en als iemand die probeerde zsh / oh-my-zsh in mijn workflow te integreren, heb ik kan eerlijk zeggen dat ik ZSH nooit aan iemand zou aanbevelen. Natuurlijk kun je zsh symboliseren naar een bestand met de naam van een andere shell en die shell emuleren, maar als je dat doet, leest het niet ‘ je .bashrc, .bash_profile, enz. , je kunt emulate bash niet in je .zprofile- of .zshrc-bestanden plaatsen. Voor iedereen die met geavanceerde functies in BASH werkt, zijn er veel subtiliteiten die je zullen bijten. BASH is een betere sh.
  • Het enige dat ZSH uit de doos heeft dat beter is dan BASH, is het voltooien van commandos, maar zelfs dat is programmeerbaar in BASH. Misschien zou iemand die de shell niet ‘ gebruikt, behalve voor incidentele alledaagse taken, ZSH moeten gebruiken, maar het ‘ is niet voor iemand die dat nodig heeft gebruik de schaal uitgebreid. de =~ operator kan je bijten, de manier waarop ZSH arrays afhandelt kan je bijten, enz. Na ongeveer 9 maanden ZSH / Oh-My-ZSH te hebben gebruikt, had ik er genoeg van. Ik gebruikte een aangepast thema dat ik zelf schreef, ik porteerde het naar BASH en schreef mijn eigen git promptline en ik ‘ heb nooit achterom gekeken. Nu maak ik me geen zorgen meer over draagbaarheid.
  • ” het heeft een van de krachtigste consolefuncties die ik heb gezien. Een daarvan is het kiezen van een thema voor je terminal. ”
  • @JonathanHartley, het lijkt erop dat je commentaar onvolledig is. ?
  • Bedankt voor je bezorgdheid, maar mijn opmerking zegt alles wat ik wilde zeggen.

Antwoord

Voor het bekijken van diff-uitvoer in kleur, gebruik colordiff .

sudo apt-get install colordiff 

Pipe elke output van diff-formaat in colordiff:

output van diff doorgesluisd naar colordiff

Dit omvat enkele alternatieve formaten van diff, zoals -y (side-by-side.)

Alternatief, indien aangeroepen standalone ( zonder dat er iets in wordt doorgesluisd) dan fungeert het als een wrapper rond “diff” en kleurt het de uitvoer. Daarom heb ik dit in mijn .bashrc, naar alias “diff” naar colordiff.

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

Reacties

  • Het .bashrc voorbeeld mist de laatste fi, en kan worden geconverteerd naar een enkelregelig commando: type colordiff &> /dev/null && alias diff='colordiff'

Antwoord

Enige tekstversiering (vetgedrukt) om gemakkelijk onderscheid te maken tussen root en niet-root shell. Voor Zsh:

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

Voor Bash:

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

Reacties

  • Specificeer uw shell. De vraag ‘ s enige shell-specifieke tag is bash , maar ik denk dat je code niet .
  • @manatwork: sorry, vergat te vermelden dat het Zsh was. Mijn bericht bijgewerkt.

Antwoord

Ik vroeg me gewoon hetzelfde af. Ik heb mijn eigen benadering, maar ik “ben op zoek naar alternatieven.

Ik schrijf bash-wrappers rond programma-aanroepen en sluis hun uitvoer door sed. Wat ik leuk vind aan sed is dat het elke regel meteen zal wijzigen en echoën => niet veel buffering. Ik vind het echter niet prettig dat voor elke aanroep naar een ingepakt programma de sed code wordt geparseerd en gecompileerd.

Dit is bijvoorbeeld wat ik doe om de uitvoer van ip te kleuren:

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

Antwoord

Voor het instellen van de prompt heb ik dit in mijn .bashrc-bestand.

#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 

Dit geeft me een prompt die er ongeveer zo uitziet:

user@host(bash): ~/bin > 

De werkmap is groen . En de gebruikersnaam is vet en cyaan, tenzij ik de shell heb uitgevoerd met sudo, in welk geval de gebruikersnaam (“root”) vet en rood wordt weergegeven.

Persoonlijk vind ik het erg leuk om de controletekens voor opmaak in variabelen op te slaan, omdat het het lezen van de code voor het instellen van de prompt gemakkelijker maakt. Het maakt het ook gemakkelijker om de prompt veel te bewerken.

De reden dat ik tput gebruik, is dat het universeler zou moeten worden ondersteund dan de rare 033[01;31m\] reeksen. Als extra bonus, als je echo $PS1 bij de prompt doet, zie je de onbewerkte prompt met kleuren in plaats van die onverstaanbare besturingsreeksen.

Antwoord

Je kunt ook een project proberen dat helpt bij het inkleuren van scripts, het heet ScriptEchoColor bij de broncode: http://scriptechocolor.sourceforge.net/

bijv .:

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 automatische kleuren zijn configureerbaar.

Dit is er een voorbeeld mee gedaan: voer hier de beschrijving van de afbeelding in

Antwoord

Een geweldige Python -tool voor algemeen gebruik om de uitvoer van opdrachten in te kleuren is “ colout

Je geeft het een regex met N groepen, gevolgd door een door kommas gescheiden lijst van N kleuren. Elke tekst die overeenkomt met een groep, wordt weergegeven in de overeenkomstige kleur.

Dus als u bijvoorbeeld “naar een testuitvoer kijkt:

python -m unittest discover -v 

Ongekleurde uitvoer van sommige Python-eenheden

dan kun je het opvrolijken omhoog met:

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

Gekleurde uitvoer van sommige Python-eenheden

Zie hoe mijn regex drie groepen heeft (de haakjes) gevolgd door drie kleuren (en optioneel drie stijlen, maar ik “heb een steno gebruikt om alle kleuren in te stellen op” vet ” , dus de “zwarte” groep, die overeenkomt met tekst tussen haakjes, wordt donkergrijs weergegeven.)

Merk ook op hoe ik 2>&1 aan het einde moest toevoegen van de Python-aanroep, omdat de uitvoer van unittest op stderr staat, dus heb ik het overgebracht naar stdout zodat ik het in colout kon omzetten.

Dit is over het algemeen zo gemakkelijk te gebruiken dat ik vaak merk dat ik nieuwe colout invocat ionen on-the-fly, en ze hergebruiken of aanpassen vanuit mijn opdrachtregelgeschiedenis.

Het enige nadeel is dat het wordt geleverd als een Python-pakket, niet als een zelfstandig uitvoerbaar bestand, dus je moet het installeren het gebruikt pip, of sudo python setup.py install.

Answer

Ik vind Solarized nuttig. Het is een mooi project met uniforme kleuren voor veel toepassingen.

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

Antwoord

Je kunt mijn cf gebruiken voor het inkleuren van bestandsnamen op de opdrachtregel, het is een snelle, kleine, onhandige kleurstof die werkt via leidingen – het inkleuren van bestandsnamen in Truecolor sRGB.

Het heeft een felgekleurde standaardconfiguratie en in tegenstelling tot ls ondervindt het geen prestatieverlies voor het toevoegen van nieuwe kleuren. (ls moet de hele LS_COLORS-string scannen voor elke misser).

https://github.com/AdamDanischewski/cf

cf gebruik

cf screenshot

Antwoord

Voor Mac kunt u het volgende gebruiken zoals gespecificeerd hier

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

Answer

Ik gebruik kleuromslag .

cw is een niet-opdringerige real-time ANSI-kleuromhulling voor gangbare Unix-gebaseerde commandos op GNU / linux. cw is ontworpen om de omgeving van de commandos die worden uitgevoerd te simuleren, zodat als een persoon “du”, “df”, “ping”, etc. in zijn shell typt, het automatisch de uitvoer in real-time zal kleuren volgens een definitie bestand met het gewenste kleurformaat. cw heeft ondersteuning voor het kleuren van jokertekens, tokenized kleuren, kopteksten / voetteksten, het kleuren van casescenarios, opdrachtregelafhankelijke definitiekleuren en bevat meer dan 50 vooraf gemaakte definitiebestanden.

Het is bijna naadloos, maar toen ik ontdekte dat ps in interactieve shell verschillende uitvoer retourneert die ps in een pipe vergelijkt.

Answer

als u uw vim kleurrijk wilt maken, net als ik, raad ik u aan twee stappen te volgen:

  1. leer hoe u de functie door deze link te volgen: schakel accentuering van kleurensyntaxis in vi of vim .

belangrijkste stappen in de link:

  1. Bewerk ~ / .vimrc-bestand door het volgende commando te typen: vi ~ /.vimrc

  2. Voeg de volgende optie toe: syntaxis op

  3. Bewaar en sluit het bestand

  4. Test het door het vim-commando uit te voeren: vim foo.sh

  1. zoek een kleurenschema dat je leuk vindt en gebruik het. Het schema dat ik gebruik: het schema dat ik gebruik

Opmerkingen

Answer

Als bash jouw keuze is, raad ik oh-my-bash aan. Als zsh jouw keuze is, raad ik oh-my-zsh aan. Beide ondersteunen inkleuring van uw terminal en verschillende uitvoer.

Antwoord

Ik “wil nederig adverteren mijn recente publicatie van ta of textattr , een bibliotheek en opdrachtregelprogramma dat is bedoeld om het toevoegen van kleur en attributen om de terminaluitvoer van uw programma te verfraaien gemakkelijker te maken door voor mensen leesbare specificaties te vertalen naar ANSI-escape-codes.

Bijvoorbeeld:

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

of zelfs korter:

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

of een alternatief:

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

geeft je zoiets als:

voer de beschrijving van de afbeelding hier in

Momenteel is deze bibliotheek bruikbaar in vier talen C, C ++, D en Python, afgezien van het gebruik vanaf de commandoregel vanuit je favoriete shell .

Merk op dat het niet automatisch de uitvoer van andere programmas kleurt. Het is eerder een hulpprogramma om u te helpen Ik wil de duistere codes onthouden. U hoeft alleen de voor de hand liggende kleurnamen of hun gemakkelijk te onthouden rgb cmyk w (hite) (of) f te gebruiken afkortingen.

Voor meer details bezoek de textattr repo .

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *