Tempo di lettura stimato: 8 minuti
Una volta capito come usare i colori nel tuo terminale, è facilissimo da usare. Colorare il codice dei tuoi script di shell è quasi indispensabile!
Ho cercato di analizzare il contenuto nel modo più oggettivo possibile. Spero che sia un buon punto di partenza per te per andare a dipingere tutto, hehe. Vediamo come funziona.
Codice di scarico
Prima di tutto, è importante sapere che per attivare il colore devi utilizzare un codice di escape che richiama la funzione di colorazione.
ESC[m
Il codice è .
Il codice può essere chiamato in vari modi.
man ascii
Secondo la tabella ascii di :
Oct Dec Hex Char ------------------------------- 033 27 1B ESC (escape)
\033
Personalmente, mi piace chiamare ESC con l’ottale .
\e
Nelle nuove versioni di bash, puoi anche chiamare , ma utilizzando l’esadecimale o l’ottale avrai meno grattacapi.
Nota: il decimale di solito non funziona!
Attenzione: su MacOS, l’ultima versione di bash è molto vecchia, la 3.2.57. Ti consiglio di aggiornare alla versione 5 con brew.
Quindi chiama la funzione di formazione dello stile come segue (non abbiamo ancora inserito alcuno stile/colore):
echo -e "\033[m" Texto pronto para receber cores. Escape em octal echo -e "\x1b[m" Outro texto sem cores. Escape em hexadecimal
Formattazione
Quindi iniziamo a colorare. Fondamentalmente dobbiamo occuparci di 3 caratteristiche della formattazione. Esse sono:
- Effetto decorazione del testo
- Colore del testo (primo piano)
- Colore di sfondo
Ognuna di queste caratteristiche ha un codice univoco, che vedremo di seguito.
Decorazione
La tabella seguente dovrebbe funzionare per tutte le modalità di colore, ma non sempre per tutti i terminali. Ogni terminale ha le sue peculiarità.
Código | Descrição ------- | ----------- 0 | Reset/Normal 1 | Bold text 2 | Dim (escurece) 3 | Italics 4 | Underlined text 5 | Blink 7 | Reverse 8 | Hidden 9 | Tachado
ESC[
m
Applica il codice tra e .
ESC[0m
ESC[m
Dopo ogni pezzo di testo colorato, azzeralo (0) con , o semplicemente ometti qualsiasi codice, lasciando .
echo -e "\033[1m" Com negrito. "\033[m" Texto normal. echo -e "\033[1m" Com negrito. "\033[m" Texto normal.
Puoi anche combinare la formattazione separando i codici con il tasto ;
echo -e "\033[1;3m" Negrito e itálico. "\033[0m" Texto normal.
Utilizzando printf, la sintassi cambia leggermente, ma è altrettanto semplice. Si divide in due parti: la formattazione, in cui definisci i dettagli del tipo (testo, numero, codici colore ecc.) e gli argomenti, in cui inserisci le informazioni che riceveranno la formattazione. Vedi gli esempi:
printf '\033[1;3m %s \033[0m' "Texto decorado." printf '\033[48;2;255;255;255;38;2;255;0;255m %3d \033[0m %s \033[1;4;31m %3d \033[0m' 100 "Texto sem cor:" 3
Nota: a scopo didattico, la formattazione printf è racchiusa tra virgolette singole ‘ ‘ e gli argomenti seguono.
Modalità di colore
Poi le cose si fanno più complesse, perché ogni terminale può leggere in modo diverso. Da un terminale all’altro, possono essere supportate più o meno modalità di colore. Su MacOS, iTerm 2 è una buona scelta, anche con i divisori delle finestre, il che è molto interessante per chi passa tutto il giorno a lavorare nel terminale. Tuttavia, il Terminale standard di macOS non dovrebbe ostacolarti in questo senso. Un collega ha pazientemente messo insieme questa interessante tabella di compatibilità.
Ci sono 4 modalità di colore:
- ASCII puro
- Codici di escape ANSI: 16 codici colore con grassetto/maiuscolo e sfondo
- 256 colori: 216 colori + 16 ANSI + 24 grigi (colori a 24 bit)
- 24-bit true color: “8 8 8” o “11111111 11111111 11111111” colori (16 milioni di colori)
Modalità 8/16 colori
Come già detto, ogni colore ha un codice unico. In questa modalità, i colori che cambieranno il testo hanno i codici “3x” e “9x” e i colori che cambieranno lo sfondo iniziano con “4x” e “10x”. Vedi la tabella
Color | Foreground Code | Background Code --------------- | ----------------- | -------------- Default Color | 39 | 49 Black | 30 | 40 Red | 31 | 41 Green | 32 | 42 Yellow | 33 | 43 Blue | 34 | 44 Magenta | 35 | 45 Cyan | 36 | 46 Light Gray | 37 | 47 Gray | 90 | 100 Light Red | 91 | 101 Light Green | 92 | 102 Light Yellow | 93 | 103 Light Blue | 94 | 104 Light Magenta | 95 | 105 Light Cyan | 96 | 106 White | 97 | 107
Per questa modalità, la sintassi del codice può seguire questo schema ESC[E;F;Bm
E può contenere diversi codici di decorazione.
Código | Descrição ------- | --------- ESC[ | Sequência de escape para iniciar cores E | Código de efeito. F | Código da cor do texto; um valor de 30 à 37. B | Código de cor de fundo; um valor de 40 à 47. m | Representa o fim da sequência de cores.
Anche l’ordine del codice non ha importanza.
Esempi:
echo -e "\033[1;92;104m Texto verde claro em negrito com fundo azul claro \033[m" echo -e "\033[5;3;31;107m Texto vermelho, piscante, itálico com fundo branco \033[m" echo -e "\033[4;90m Texto cinza, sobrescrito\033[m" echo -e "\033[1;5m Bold+Blink \033[0m" echo -e "\033[1;4;31m Bold+Underline+Red \033[0m"
Il codice del colore può essere inserito anche in variabili:
# Seta cores RED='\033[0;31m' HEADER='\033[95m' OKBLUE='\033[94m' OKGREEN='\033[92m' WARNING='\033[93m' FAIL='\033[91m' BOLD='\033[1m' UNDERLINE='\033[4m' ENDC='\033[0m' echo -e "${RED}LINHA COM CORES${ENDC}" echo -e "${HEADER}LINHA COM CORES${ENDC}" echo -e "${OKBLUE}LINHA COM CORES${ENDC}" echo -e "${OKGREEN}LINHA COM CORES${ENDC}" echo -e "${WARNING}LINHA COM CORES${ENDC}" echo -e "${FAIL}LINHA COM CORES${ENDC}" echo -e "${BOLD}LINHA COM CORES${ENDC}" echo -e "${UNDERLINE}LINHA COM CORES${ENDC}"
Modalità 88/256 colori
Per attivare la modalità 88/256 colori per il testo, lo sfondo o entrambi, è un po’ diverso. La combinazione di codici prevede due sequenze diverse:
- Per impostare il colore del testo, il codice è 38;5;{0…255}, dove {0…255} è uno dei 256 colori disponibili.
- Per fissare il colore sullo sfondo, il codice è 48;5;{0..255}
Per vedere l’elenco completo dei 256 colori e le loro combinazioni con il colore del testo e dello sfondo, esegui questo script di shell:
#!/bin/bash # This program is free software. It comes without any warranty, to # the extent permitted by applicable law. You can redistribute it # and/or modify it under the terms of the Do What The Fuck You Want # To Public License, Version 2, as published by Sam Hocevar. See # http://sam.zoy.org/wtfpl/COPYING for more details. for fgbg in 38 48 ; do # Foreground / Background for color in {0..255} ; do # Colors # Display the color printf "\e[${fgbg};5;%sm %3s \e[0m" $color $color # Display 6 colors per lines if [ $((($color + 1) % 6)) == 4 ] ; then echo # New line fi done echo # New line done
In questo caso, devi seguire l’ordine di combinazione del trio, a differenza della modalità a 8/16 colori di cui sopra. Ma non importa se metti lo sfondo prima del primo piano o viceversa. Semplicemente non puoi fare qualcosa come 5;{0..255};38, altrimenti il risultato sarà negativo.
Guarda come si presenta la combinazione dei colori del testo, dello sfondo e della decorazione:
# Recapitulando: # ESC[...m <- identifica o uso de cor # \033 <- escape # 38;5;cor <- Cor do texto # 48;5;cor <- Cor do fundo # 0 a 9 <- estilo echo -en "\033[38;5;135;48;5;114;3m Fundo verde e texto rosa itálico \033[m" echo -en "\033[48;5;135;38;5;235;1m Fundo rosa e texto preto negrito \033[m"
Modalità true color a 24 bit (16 milioni di colori)
La sintassi per utilizzare la modalità a 24 bit non è molto diversa da quella precedente. Il dettaglio è la presenza di R;G;B:
ESC[{38|48};2;${red};${green};${blue}m
Esempi:
# Cor do texto echo -e "\033[38;2;255;0;255mTRUECOLOR\033[0m\n"; # Cor do fundo echo -e "\033[48;2;255;255;255mTRUECOLOR\033[0m\n"; # Cor do texto e do fundo echo -e "\033[48;2;255;255;255;38;2;255;0;255mTRUECOLOR\033[0m\n"; # Cor texto, fundo e estilo echo -e "\033[48;2;255;255;255;38;2;255;0;255;3mTRUECOLOR\033[0m\n"
Guarda come sono interessanti questi gradienti di sfondo.
for i in {16..20} {20..16} ; do echo -e "\033[48;5;${i};1m :o) \033[0m" ; done for i in {22..27} {27..22} ; do echo -en "\033[48;5;${i};1m \033[0m" ; done
Considerazioni finali
Come puoi vedere, non è complicato. Devi solo sapere come utilizzare la giusta modalità di colore e inserire correttamente il codice di escape.
echo
-e
Per questo articolo abbiamo utilizzato molto il comando, con il suo argomento che ti permette di utilizzare caratteri speciali con escape.
printf
Ma puoi utilizzarlo senza problemi anche se hai bisogno delle funzioni avanzate dello strumento.
Per saperne di più echo
leggi il manuale dei comandi, che è molto semplice da capire.
man echo
Printf è un po’ più complesso, ma molto interessante. Ne vale la pena.
man printf
Spero che ti sia piaciuto.
Domande? Lascia un commento.
Vedi anche
- tput http://linuxcommand.org/lc3_adv_tput.php per le manipolazioni del terminale
- La sezione colore è supportata dai consigli di https://misc.flogisoft.com/bash/tip_colors_and_formatting.
- https://gist.github.com/XVilka/8346728