Vă colorizați terminalul și mediul shell?

Îmi petrec cea mai mare parte a timpului lucrând în medii Unix și folosind emulatoare de terminal. Încerc să folosesc culoarea pe linia de comandă, deoarece culoarea face ieșirea mai utilă și mai intuitivă.

Ce opțiuni există pentru a adăuga culoare în mediul meu terminal? Ce trucuri folosești? Ce capcane ați întâlnit?

Din păcate, suportul pentru culoare variază în funcție de tipul terminalului, sistemul de operare, setarea TERM, utilitarul, implementările de bug-uri etc.

Iată câteva sfaturi din configurarea mea , după o mulțime de experimente:

  1. Tind să setez TERM=xterm-color, care este acceptat pe majoritatea gazdelor (dar nu pe toate).
  2. Lucrez pe mai multe gazde diferite, versiuni diferite de sistem de operare etc. Folosesc totul, de la macOS X, Ubuntu Linux, RHEL / CentOS / Scientific Linux și FreeBSD. Încerc să păstrez lucrurile simple și generice, dacă este posibil.
  3. Lucrez o grămadă de lucruri folosind GNU screen, ceea ce adaugă un alt strat de distracție.
  4. Multe sisteme de operare stabilesc lucruri precum dircolors și implicit și nu vreau să modific acest lucru pe o sută de gazde diferite. Așa că încerc să rămân cu valorile implicite. În schimb, ajustez configurația de culoare a terminalului meu.
  5. Folosește culoarea pentru unele comenzi Unix (ls, grep, less, vim) și prompt Bash . Aceste comenzi par să utilizeze standardul „ secvențe de evacuare ANSI „. De exemplu:

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

Voi posta .bashrc și voi răspunde la propria întrebare Stil de pericol .

Comentarii

  • Dacă abordarea mea (vezi răspunsul de mai jos) abordează probleme cu diferențele OSX și Linux, de exemplu, culoarea pe una este ls -G și pe de altă parte este ls –color-auto
  • A văzut cineva un instrument pentru colorarea coloanelor? Acesta este un column -t --color?

Răspuns

Iată un câteva lucruri pe care le puteți face:

Editori + Cod
Mulți editori au sintaxă subliniind sprijinul. vim și emacs îl au activat în mod implicit. De asemenea, îl puteți activa sub nano .

De asemenea, puteți sintaxa codul de evidențiere pe terminal utilizând Pygments ca instrument de linie de comandă.

grep
grep --color=auto evidențiază toate meciurile. De asemenea, puteți utiliza export GREP_OPTIONS="--color=auto" pentru a-l face persistent fără alias. Dacă utilizați --color=always, va „utiliza folosind culoarea chiar și atunci când piping , ceea ce confundă lucrurile.

ls

ls --color=always

Culorile specificate de:

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

(indiciu: dircolors poate fi de ajutor)

PS1
Puteți seta PS1 (promptul shell) să utilizeze culori. De exemplu:

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

Va produce un PS1 ca:

[galben] lucas @ ubuntu: [roșu] ~ [normal] $

Poți deveni foarte creativ cu asta. Ca idee:

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

Pune o bară în partea de sus a terminalului cu informații aleatorii. (Pentru cele mai bune rezultate, utilizați și alias clear="echo -e "\e[2J\n\n"".)

Scăparea secvențelor de scăpare

Dacă ceva este blocat, scoate culoarea când nu vrei, folosesc acest sed linie pentru a elimina secvențele de scăpare:

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

Dacă doriți o experiență mai autentică, puteți scăpa și de liniile care încep cu \e[8m, care instruiește terminalul să ascundă textul. (Nu este acceptat pe scară largă.)

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

De asemenea, rețineți că acele ^ [s ar trebui să fie reale, literal [^ s. Le puteți tasta apăsând ^ V ^ [în bash, adică Ctrl + V , Ctrl + [ .

Comentarii

  • Prima linie PS1 ar trebui să citească astfel: PS1='\e[33;1m\u@\h: \e[31m\W\e[0m\$ '. Există un x superflu după cea de-a patra bară inversă.
  • Scăpările ar trebui să fie incluse în \[...\] altfel comenzile din a doua linie vor suprascrie prima linie. PS1 = ‘ [ \ e [33; 1m ] \ u @ \ h: [ \ e [31m ] \ W \ e [0m \ $ ‘
  • ls --color=always nu funcționează ‘.Abordarea @Michael Durrant ‘ este mai bună pentru acest lucru: ls --color=al > /dev/null 2>&1 && alias ls='ls -F --color=al' || alias ls='ls -G'

Răspuns

De asemenea, folosesc:

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

Și dacă vă place să vă colorizați promptul, variate color definite pot fi util:

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" 

Și apoi solicitarea mea este ceva de genul acesta:

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) apelează un script python în ~ / sbin, care tipărește informații despre controlul versiunii despre calea curentă. Include suport pentru Mercurial, Git, Svn, Cvs etc. Autorul scriptului are sursa aici .

Captură de ecran prompt Bash

Acesta este sursă completă a configurării mele prompt:

Comentarii

  • A se vedea aici soluția la o problemă de linie pe care am primit-o când am folosit cele de mai sus PS1: stackoverflow.com/questions/5087036/…
  • I ‘ Am actualizat răspunsul pentru a reflecta parantezele evitate pentru culorile din prompt. Mulțumim!
  • $LSCOLORS și $CLICOLOR sunt pentru BSD ls. GNU ls (Linux) folosește $LS_COLORS cu o sintaxă diferită. Deoarece GNU se simte ca acasă pentru mine, folosesc LSCOLORS=exgxfxDacxBaBaCaCaeaEa pentru a imita culorile GNU ‘ pe BSD.
  • grep: warning: GREP_OPTIONS is deprecated; please use an alias or script
  • Este posibil să trebuiască să sursați fișierul .bashrc pentru ca modificarea să fie efectivă. Puteți face acest lucru cu următoarea comandă. source /path/to/.bashrc

Răspuns

grep și ls au fost deja menționate, dacă doriți mult mai multe culori, consultați Colorizer generic , scopul său inițial era de a colora fișierele jurnal, dar chiar din cutie colorează și ping, traceroute, gcc, make, netstat, diff, last, ldap și cvs.

Este ușor de extins dacă știu regexes. Am „adăugat ps și nmap la listă (dacă intrați în grc Voi fi mai mult decât bucuros să împărtășesc fișierele .conf pentru aceste două instrumente)

(Btw, pentru ao instala prin synaptic, pacman și, deopotrivă, este posibil să căutați mai mult noroc pentru „grc”)

Comentarii

  • grc acceptă acum ps în mod implicit. ‘ aș fi interesat de colorările dvs. nmap. Vedeți și răspunsul meu pentru aliasarea tuturor acestora într-un mod care va absorbi noi comenzi atunci când faceți upgrade grc.
  • Am observat asta. aici ‘ este conf.nmap-ul meu (și orice altceva, într-adevăr) gist.github.com/sygo/844982#file-conf -nmap – Am observat că lucrați în infosec, s-ar putea să vă fie interesant conf.hexdump, totuși ‘ încă nu l-am terminat.
  • Mulțumesc @Sygo. Am ‘ v-am bifurcat și am revizuit esența. Eu ‘ nu am comis niciodată date cu git (să nu mai vorbim de github ‘ s esențiale) și nu-mi pot da seama cum să propun îmbinarea acestora pentru dvs. (‘ cred că acest lucru se datorează faptului că esențialele sunt prea simplificate).
  • Bănuiesc că puteți ‘ pentru că ‘ este esențial și nu un depozit adecvat. Am verificat totuși furculița dvs. și ‘ vă dau cu siguranță o versiune. Sunt ‘ curios că în ce se va transforma acea descărcare hexagonală …

Răspunde

Am „perfecționat .bashrc-ul meu de-a lungul anilor pentru a lucra atât pe OSX, cât și pe Ubuntu.
De asemenea, l-am redus ca dimensiune la 28 de linii cu instrucțiuni de condiții compacte.
Odată cu acesta , promptul meu PS1 arată: introduceți descrierea imaginii aici

cu timpul în roșu, numele de utilizator în verde, numele mașinii în albastru deschis, pwd în albastru mai închis și git branch în galben.

Funcția promptului meu PS1:

  • afișează git branch!
  • căile de directoare lungi (mai mult de 6 elemente) sunt „ decupat „pentru a afișa top 3 și top 3 directoare cu _ între atunci (acea parte pwd sed din LOCATION).
  • returnarea căruței la final, astfel încât promptul să fie întotdeauna în stânga!

Liniile relevante din fișierul meu .bashrc sunt:

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

Pentru ls cu culori atunci când sunt disponibile d nu există erori când nu (de ex.OSX):

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

Comentarii

Răspuns

Culori pentru pagini man ( mai multe detalii ):

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

Culori pentru grep (1;32 este verde strălucitor, consultați alte postări aici pentru alte culori):

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" 

Mai multe culori pentru 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 

Instalați grc ( Colorant generic ) și adăugați-l la pseudonimele dvs.:

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

Culori pentru diff : Prea mult conținut pentru o funcție, utilizați un script și alias-l în fișierul dvs. rc (nu este necesar dacă ați instalat 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; 

Culori pentru prompt bash :

# 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-ul promptului bash

Comentarii

  • Votează în sus pentru o captură de ecran
  • Funcția mea PSWD() a fost compatibilă cu POSIX, dar ‘ este mult mai ușor de facilitat folosind manipularea bash / zsh substring. Consultați revizuirea 6 pentru versiunea POSIX, care implică o mulțime de semne de întrebare și nu a fost deloc adaptabilă la terminalul terminalului ‘ lăţime. Nu ‘ nu am actualizat captura de ecran, dar ‘ este doar o ușoară modificare la lățimea de 80 de caractere.
  • CLICOLOR=1 nu ‘ nu funcționează pentru mine cu FREEBSD 11.2
  • @SimonC. – S-ar putea să utilizați utilități GNU pe sistemul dvs. FreeBSD, mai degrabă decât pe cele BSD. CLICOLOR=1 ls ar trebui să facă același lucru ca și ls -G folosind BSD (ls -g pe BSD mai vechi). Dacă ls --color funcționează (fără eroare), ‘ utilizați GNU ‘ s ls comanda și $CLICOLOR sunt ignorate.
  • @SimonC. – Trebuie să vă încărcați de fapt ~/.bashrc pentru ca orice modificare să aibă efect. Fie rulați source ~/.bashrc, fie începeți o nouă sesiune bash (lansați un terminal sau rulați bash).

Răspuns

Setați un mesaj îndrăzneț / colorat. Din cyberciti.biz și din 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 \$ " 

De asemenea, am reușit să găsesc setări de culoare care sunt acceptate pe scară largă și care nu imprimă caractere gobbledygook în medii mai vechi (chiar și FreeBSD4!) și pare să funcționeze bine dacă TERM = vt100, xterm , culoare xterm. (În majoritatea cazurilor). Din .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 

Comentarii

Răspuns

Lucruri care nu s-au spus deja aici:

Pentru a coloriza ieșirea compilațiilor dvs. cu gcc , există colorgcc de Johannes Schlüter

Pentru colorarea jurnalelor, există multitail

Pentru a coloriza orice stdout, am pus împreună xcol

exemplu xcol

Eu îl folosesc personal acestea din instrumentul 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 

Folosesc aceste variabile în scripturile mele ca așa

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

Îmi place și această mică funcție colourEcho (găsită în 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 

Ne pare rău, nu am voie să postez mai multe linkuri

Comentarii

  • Bună ziua, cum creați steagurile pentru calea promptă? Menționez barele dreptunghiulare cu capete triunghiulale Mulțumiri
  • funcționează și într-un terminal ubuntu gnu?
  • lnav este, de asemenea, un instrument excelent pentru a afișa fișiere jurnal colorate

Răspuns

Există „un instrument bun pentru configurarea culorilor pentru comanda ls – http://geoff.greer.fm/lscolors/

Răspuns

Vă sugerez să verificați ZSH și pluginul său oh-my-zsh care are una dintre cele mai puternice funcții ale consolei pe care le-am văzut. Una dintre ele este alegerea temei pentru terminalul dvs. Acesta este un exemplu al temei mele … Într-adevăr, culorile nu sunt atât de calde, dar sunt la fel ca în această imagine … Oricum vă va plăcea!

introduceți descrierea imaginii aici

Comentarii

  • Dacă aș putea, aș vota în jos pentru Oh-My-ZSH Ca inginer de sistem care lucrează mult în Terminal și ca cineva care a încercat să adopte zsh / oh-my-zsh în fluxul meu de lucru, Pot spune sincer că nu aș recomanda niciodată ZSH nimănui. Sigur, puteți lega simbolic zsh la un fișier numit după orice alt shell și emula acel shell, dar atunci când faceți acest lucru, nu ‘ nu vă citește .bashrc, .bash_profile etc. De asemenea, , nu puteți pune emulate bash în fișierele dvs. .zprofile sau .zshrc. Pentru oricine lucrează cu funcții avansate în BASH, există multe subtilități care vă vor mușca. BASH este un sh mai bun.
  • Singurul lucru pe care îl are ZSH din cutie care este mai bun decât BASH este finalizarea comenzii, dar chiar și asta este programabil în BASH. Poate că cineva care nu ‘ nu folosește shell-ul, cu excepția sarcinilor obișnuite mondene, ar trebui să adopte ZSH, dar ‘ nu este pentru oricine are nevoie folosiți shell-ul pe scară largă. operatorul =~ vă poate mușca, modul în care gestionează matricile ZSH vă poate mușca, etc. După ce am folosit ZSH / Oh-My-ZSH timp de aproximativ 9 luni, mi-am săturat. Foloseam o temă personalizată pe care am scris-o eu, am portat-o pe BASH și mi-am scris propria linie promptă git și ‘ nu m-am uitat niciodată înapoi. Acum nu mai îmi fac griji cu privire la portabilitate
  • ” are una dintre cele mai puternice funcții ale consolei pe care le-am văzut. Una dintre ele este alegerea temei pentru terminalul dvs. ”
  • @JonathanHartley, comentariul dvs. pare că l-ați lăsat incomplet. ?
  • Vă mulțumesc pentru îngrijorare, dar comentariul meu spune tot ce intenționam să spun.

Răspunde

Pentru a vizualiza difuzarea în culori, utilizați colordiff .

sudo apt-get install colordiff 

Pipe orice ieșire în format dif în colordiff:

ieșire a canalului diff în colordiff

Aceasta include unele dintre diferitele formate alternative, cum ar fi -y (side-by-side.)

Alternativ, dacă este invocat independent ( fără a fi introdus nimic în el) atunci acționează ca un înveliș în jurul valorii de „diff” și colorează ieșirea. Prin urmare, am acest lucru în .bashrc, pentru alias „diff” la colordiff.

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

Comentarii

  • Exemplul .bashrc lipsește și ar putea fi convertit într-o comandă cu o singură linie: type colordiff &> /dev/null && alias diff='colordiff'

Răspuns

Unele decoruri de text (aldine) pentru a diferenția cu ușurință între shell rădăcină și non-root. Pentru Zsh:

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

Pentru Bash:

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

Comentarii

  • Vă rugăm să specificați shell-ul. Întrebarea ‘ numai eticheta specifică pentru shell este bash , dar consider că codul dvs. nu este bash.
  • @manatwork: îmi pare rău, am uitat să menționez că a fost Zsh. Mi-am actualizat postarea.

Răspuns

Tocmai m-am întrebat același lucru. Am propria mea abordare, dar „caut alternative”.

Scriu învelișuri bash în jurul apelurilor de programe și le transmit ieșirea deși sed. Ce îmi place sed este că va modifica și va răsuna imediat fiecare linie => nu va fi prea mult tampon. Cu toate acestea, nu-mi place că pentru fiecare apel către un program încorporat sed codul este analizat și compilat.

De exemplu, asta fac pentru a colora rezultatul 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" 

Răspuns

Pentru setarea promptului, am acest fișier .bashrc.

#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 

Acest lucru îmi oferă un prompt care arată cam așa:

user@host(bash): ~/bin > 

Directorul de lucru este verde Și numele de utilizator este aldin și cyan, cu excepția cazului în care am rulat shell-ul cu sudo, caz în care numele de utilizator („rădăcină”) afișează aldin și roșu.

Personal îmi place foarte mult ca caracterele de control de formatare să fie stocate în variabile, deoarece facilitează citirea codului pentru setarea promptului. De asemenea, facilitează editarea promptului mult .

Motivul pentru care folosesc tput este că se presupune că este acceptat mai universal decât ciudatele 033[01;31m\] secvențe. De asemenea, ca bonus adăugat, dacă faceți echo $PS1 la prompt, veți vedea promptul brut cu culori în loc de acele secvențe de control neinteligibile.

Răspuns

Puteți încerca un proiect care ajută și la colorarea scripturilor de ieșire, numit ScriptEchoColor la forge sursă: 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 

Culorile automate sunt configurabile.

este un exemplu realizat cu acesta: introduceți descrierea imaginii aici

Răspundeți

Un instrument grozav de uz general Python pentru colorarea ieșirii comenzilor este „ colout

Îi dați o regex cu N grupuri, urmată de o listă separată de virgule cu N culori. Orice text care se potrivește cu un grup va fi afișat în culoarea corespunzătoare.

Deci, de exemplu, dacă vă uitați la o ieșire de testare:

python -m unittest discover -v 

Ieșire necolorată a unor unittests Python

up with:

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

Ieșire colorată a unor teste Python unittests

Vedeți cum regexul meu are trei grupuri (paranteză) urmate de trei culori (și opțional trei stiluri, dar am folosit o scurtătură pentru a seta toate culorile la „bold” , deci grupul „negru”, care se potrivește cu textul dintre paranteze, apare ca gri închis.)

Rețineți și modul în care a trebuit să adaug 2>&1 la final invocării Python, deoarece ieșirea unittest este pe stderr, așa că am transferat-o în stdout, astfel încât să o pot introduce în colout.

În general, este atât de ușor de utilizat încât de multe ori mă trezesc creând noi colout invocat ions on-the-fly și reutilizarea sau modificarea lor din istoricul meu de linie de comandă.

Singurul dezavantaj este că vine ca un pachet Python, nu ca un executabil independent, deci trebuie să instalați utilizând pip sau sudo python setup.py install.

Răspuns

Mi se pare util Solarized. Este un proiect elegant, cu culori uniforme pentru multe aplicații.

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

Răspuns

Puteți utiliza CF-ul meu pentru colorarea numelui de fișier pe linia de comandă, este „un colorator rapid rapid, care funcționează prin conducte – colorarea numelor de fișiere în Truecolor sRGB.

Are o culoare viu configurație implicită și, spre deosebire de ls, nu suferă o penalizare de performanță pentru adăugarea de noi culori. (Trebuie să scanez întregul șir LS_COLORS pentru fiecare ratare).

https://github.com/AdamDanischewski/cf

utilizare cf

cf captură de ecran

Răspuns

Pentru Mac puteți utiliza următoarele după cum este specificat aici

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

Răspuns

Eu folosesc wrapper color .

cw este un ambalaj de culoare ANSI non-intruziv în timp real pentru comenzi comune bazate pe unix pe GNU / linux. cw este conceput pentru a simula mediul în care se execută comenzile, astfel încât dacă o persoană tastează „du”, „df”, „ping” etc.în shell-ul său, acesta va colora automat ieșirea în timp real, conform unei definiții. fișier care conține formatul de culoare dorit. cw are suport pentru colorarea potrivită cu wildcard, colorarea tokenizată, anteturile / subsolurile, colorarea scenariului de caz, colorarea definiției în funcție de linia de comandă și include peste 50 de fișiere de definiție pre-realizate. >

Este aproape fără sudură, dar odată ce am constatat că ps în shell-ul interactiv returnează rezultate diferite comparând ps într-o conductă.

Răspuns

dacă doriți să vă faceți vim colorat la fel ca mine, vă sugerez să urmați doi pași:

  1. aflați cum să porniți funcția urmând acest link: activați evidențierea sintaxei culorilor în vi sau vim .

pașii cheie din link:

  1. Editați fișierul ~ / .vimrc tastând comanda: vi ~ /.vimrc

  2. Adăugați următoarea opțiune: sintaxă pe

  3. Salvați și închideți fișierul

  4. Testați-l executând comanda vim: vim foo.sh

  1. găsiți o schemă de culori care vă place și utilizați-o. Schema pe care o folosesc: schema pe care o folosesc

Comentarii

  • Când utilizați linkuri către sursă externă, ar trebui să verificați partea ” Furnizați contextul pentru link-uri ” (Citați părțile importante) din partea relevantă a ghidului: unix.stackexchange.com/help/how-to-answer

Răspunde

Dacă bash este alegerea ta, recomand oh-my-bash . Dacă zsh este alegerea dvs., vă recomand oh-my-zsh . Ambele acceptă colorizarea terminalului și o ieșire diferită.

Răspuns

Aș vrea să fac publicitate cu umilință publicația mea recentă din ta sau textattr , o bibliotecă și un instrument pentru linia de comandă care urmărește să faciliteze adăugarea de culori și atribute pentru a înfrumuseța ieșirea terminalului programului dvs. prin traducerea specificațiilor citibile de către oameni în coduri de evacuare ANSI.

De exemplu:

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

sau chiar mai scurt:

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

sau un alternativ:

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

vă va oferi ceva de genul:

introduceți descrierea imaginii aici

În prezent, această bibliotecă este utilizabilă din patru limbi C, C ++, D și Python, în afară de utilizarea liniei de comandă din shell-ul dvs. preferat .

Rețineți că nu colorează automat ieșirea niciunui alt program, ci mai degrabă un utilitar care vă ajută să nu aving să-și amintească codurile abstruse. Trebuie doar să folosiți numele de culori evidente sau rgb cmyk w (hite) (of) f abrevieri.

Pentru mai multe detalii accesați repo textattr .

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *