Come visualizzare i colori nel terminale

Vuoi visualizzare i testi con colori, grassetti, corsivi, sottolineature e così via? Comprendendo alcune regole e codici è più facile di quanto sembri. Scopri come visualizzare i colori nel tuo terminale con la chiarezza di chi sa cosa sta facendo.

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[mIl codice è .

Il codice può essere chiamato in vari modi. man asciiSecondo la tabella ascii di :

Oct   Dec   Hex   Char
-------------------------------
033   27    1B    ESC (escape)

\033Personalmente, mi piace chiamare ESC con l’ottale . \eNelle 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:

  1. Effetto decorazione del testo
  2. Colore del testo (primo piano)
  3. 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[ mApplica il codice tra e .

ESC[0m ESC[mDopo 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:

  1. ASCII puro
  2. Codici di escape ANSI: 16 codici colore con grassetto/maiuscolo e sfondo
  3. 256 colori: 216 colori + 16 ANSI + 24 grigi (colori a 24 bit)
  4. 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;BmE 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:

  1. Per impostare il colore del testo, il codice è 38;5;{0…255}, dove {0…255} è uno dei 256 colori disponibili.
  2. 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 -ePer 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ù echoleggi 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

Comentários

Altri articoli

Come utilizzare bc, il calcolatore di conchiglie

bc = calcolatrice da banco.
Se non conosci ancora la calcolatrice della tua shell, è il momento di imparare a usarla, anche se il suo utilizzo è molto elementare.
L’uso più banale delle sue funzioni dovrebbe già soddisfare la maggior parte delle tue esigenze.
Ma non lasciarti ingannare: si tratta di un software davvero potente che dovrebbe essere assolutamente presente nel tuo radar.

Leggi l'articolo "

Codifica/decodifica degli URL con sed

Esistono vari modi per codificare/decodificare gli url.
In genere i programmatori utilizzano funzioni già pronte per questo scopo.
Ma sai davvero cosa fanno queste funzioni?
Per questo articolo, ho scelto sed come strumento per sostituire i codici e ti indicherò le RFC che trattano l’argomento.

Leggi l'articolo "

Capire come personalizzare VIM su MacOS

Se stai già iniziando a familiarizzare con VIM, è il momento di fare i passi successivi.
In questo articolo ti spiegherò come configurare VIM per MacOS in quello che considero il modo più pulito (potresti volerlo installare in modo diverso e non c’è problema) e come configurare i plugin NerdTree, per accedere all’albero delle directory; Status Tab per inserire alcuni strumenti aggiuntivi sullo schermo (che rendono VIM molto bello); e il plugin Git, per facilitare il controllo delle versioni senza lasciare l’applicazione.
Buona lettura!

Leggi l'articolo "
bureau-it.com