Quelle sono sequenze di escape ANSI ; quel collegamento è a una tabella di codici colore ma ci sono anche altre cose interessanti su quella pagina di Wikipedia. Non tutti funzionano su (ad esempio) una normale console Linux.
Questo non è corretto:
\033]00m\] # white
0
ripristina il terminale al suo valore predefinito (che è probabilmente bianco). Il codice effettivo per il primo piano bianco è 37. Inoltre, la parentesi graffa di chiusura con escape alla fine ( \]
) non fa parte della sequenza di colori (vedere gli ultimi paragrafi seguenti per una spiegazione del loro scopo nell'impostazione di un prompt).
Si noti che alcuni terminali della GUI consentono di specificare una combinazione di colori personalizzata. Ciò influenzerà l'output.
C'è un elenco qui che aggiunge 7 colori di primo piano e 7 di sfondo che non avevo mai visto prima, ma sembrano funzionare:
# Foreground colors
90 Dark gray
91 Light red
92 Light green
93 Light yellow
94 Light blue
95 Light magenta
96 Light cyan
# Background colors
100 Dark gray
101 Light red
102 Light green
103 Light yellow
104 Light blue
105 Light magenta
106 Light cyan
Inoltre, se hai un terminale GUI a 256 colori (penso che la maggior parte di essi sia ora), puoi applicare i colori da questo grafico:
La sequenza ANSI per selezionarli, usando il numero nell'angolo in basso a sinistra, inizia 38;5;
per il primo piano e 48;5;
per lo sfondo, quindi il numero di colore, quindi ad esempio:
echo -e "\\033[48;5;95;38;5;214mhello world\\033[0m"
Mi dà un arancione chiaro sull'abbronzatura (il che significa che la tabella dei colori è approssimativamente approssimativa).
Puoi vedere i colori in questo grafico 1 come apparirebbero abbastanza facilmente sul tuo terminale:
#!/bin/bash
color=16;
while [ $color -lt 245 ]; do
echo -e "$color: \\033[38;5;${color}mhello\\033[48;5;${color}mworld\\033[0m"
((color++));
done
L'output è autoesplicativo.
Alcuni sistemi impostano la variabile $ TERM su xterm-256color
se ci si trova su un terminale a 256 colori tramite un codice shell in /etc/profile
. Su altri, dovresti essere in grado di configurare il tuo terminale per usarlo. Ciò consentirà alle applicazioni TUI di sapere che ci sono 256 colori e ti consentirà di aggiungere qualcosa di simile al tuo ~/.bashrc
:
if [[ "$TERM" =~ 256color ]]; then
PS1="MyCrazyPrompt..."
fi
Fai attenzione che quando usi sequenze di escape colore nel tuo prompt, dovresti racchiuderle \
tra parentesi quadre con escape ( prefisso), in questo modo:
PS1="\[\033[01;32m\]MyPrompt: \[\033[0m\]"
Notare che l' [
interno della sequenza dei colori non è sfuggito, ma quelli racchiusi lo sono. Lo scopo di quest'ultimo è di indicare alla shell che la sequenza racchiusa non conta per la lunghezza dei caratteri del prompt. Se il conteggio è errato, succederanno cose strane quando si scorre indietro nella cronologia, ad esempio, se è troppo lungo, la lunghezza in eccesso dell'ultima stringa fatta scorrere apparirà collegata al prompt e non sarà possibile tornare indietro (viene ignorato allo stesso modo del prompt).
Si noti inoltre che se si desidera includere l'output di un comando eseguito ogni volta che viene utilizzato il prompt (anziché solo una volta quando viene impostato il prompt), è necessario impostarlo come stringa letterale con virgolette singole, ad esempio:
PS1='\[\033[01;32m\]$(date): \[\033[0m\]'
Anche se questo non è un grande esempio se sei soddisfatto dell'uso delle escape speciali \d
o \D{format}
prompt di bash, che non sono l'argomento della domanda, ma puoi trovarle man bash
sotto PROMPTING
. Esistono varie altre escape utili come \w
per la directory corrente, \u
per l'utente corrente, ecc.
1. La parte principale di questo grafico, i colori 16 - 231 (notare che non sono in ordine numerico) sono un cubo di colore RGB 6 x 6 x 6. "Cubo di colore" si riferisce al fatto che uno spazio cromatico RGB può essere rappresentato utilizzando una matrice tridimensionale (con un asse per il rosso, uno per il verde e uno per il blu). Ogni colore nel cubo qui può essere rappresentato come coordinate in un array 6 x 6 x 6 e l'indice nel grafico viene calcolato in questo modo:
16 + R * 36 + G * 6 + B
Il primo colore nel cubo, all'indice 16 nel grafico, è nero (RGB 0, 0, 0). È possibile utilizzare questa formula nello script di shell:
#!/bin/sh
function RGBcolor {
echo "16 + $1 * 36 + $2 * 6 + $3" | bc
}
fg=$(RGBcolor 1 0 2) # Violet
bg=$(RGBcolor 5 3 0) # Bright orange.
echo -e "\\033[1;38;5;$fg;48;5;${bg}mviolet on tangerine\\033[0m"
\]
qui non è in realtà parte della sequenza dei colori; serve uno scopo specifico nell'impostazione dei prompt (ho aggiunto alcuni paragrafi alla fine della mia risposta al riguardo). "Sarebbe bello se ci fosse anche un modulo più leggibile." -> tagliare e incollare nella tua risposta è un modo per farlo.