Entrambe le risposte qui non riescono a parlare del TruecolorANSI support per il colore 8bpc. Questo otterrà il colore RGB che l'OP originariamente richiesto.
Invece di ;5
, utilizzare ;2
, e specificare la R, G e B valori (0-255) nelle seguenti tre segmenti di controllo.
\x1b[38;2;40;177;249m
Per provare if your terminal supports Truecolor:
printf "\x1b[38;2;40;177;249mTRUECOLOR\x1b[0m\n"
Sulla mia macchina, XTerm felicemente emessi il colore corretto; sebbene, i terminali modellati dopo i terminali che precedono il moderno colore RGB in genere non supporteranno il truecolor: assicurati di conoscere il tuo obiettivo prima di utilizzare questa particolare variante del codice di escape.
Vorrei anche sottolineare la 38
e la ;5
/;2
- Ice Blue mentioned che 38
percorsi e quindi 5
cambia il colore. Questo è leggermente errato.
38
è il codice colore in primo piano esteso xterm-256; 30
- 37
sono semplicemente codici in primo piano a 16 colori (con una luminosità controllata dal codice di escape 1
su alcuni sistemi e gli 90
- 97
codici "non luminosi" non supportati, supportati da tutti i terminali colorati conformi a vt100/xterm .
Il ;2
e ;5
indicano il formato del colore, in ultima analisi, dicendo al terminale quante più sequenze di tirare: ;5
specificare un formato a 8 bit (come detto Blue Ice) che richiede solo 1 più segmento di controllo, e ;2
specificando un formato RGB a 24 bit completo che richiede 3 segmenti di controllo.
Queste modalità estese sono tecnicamente "non documentate" e sono completamente implementate. Per quanto ne so e posso ricercare, sono non governati dal comitato ANSI.
Per il modo inclinato, il formato 5;
(256 colori) inizia con i 16 colori originali (sia scuro/luce, così 30-37 e 90-97) come colori 0-15.
I successivi 216 colori (16-231) sono formati da un valore RGB di 3bpc sfalsato di 16, racchiuso in un unico valore.
Gli ultimi 24 colori (232-256) sono in scala di grigi a partire da una sfumatura leggermente più leggera del nero che va fino a una tonalità leggermente più scura del bianco. Alcuni emulatori interpretano questi passaggi come incrementi lineari da (256/24
) su tutti e tre i canali, anche se mi sono imbattuto in alcuni emulatori che sembrano definire esplicitamente questi valori.
Questa è una funzione Javascript che esegue tale conversione, tenendo conto di tutti i grigi.
function rgbToAnsi256(r, g, b) {
// we use the extended greyscale palette here, with the exception of
// black and white. normal palette only has 4 greyscale shades.
if (r === g && g === b) {
if (r < 8) {
return 16;
}
if (r > 248) {
return 231;
}
return Math.round(((r - 8)/247) * 24) + 232;
}
var ansi = 16
+ (36 * Math.round(r/255 * 5))
+ (6 * Math.round(g/255 * 5))
+ Math.round(b/255 * 5);
return ansi;
}
Così in un senso, è possibile calculate 256 ANSI colori da valori RGB iniziali di ridurli da 8 a 3 bit per formare un valore codificato 256 nel caso in cui si desidera programmazione farlo su terminali che non supportare Truecolor.
Wikipedia ha un buon articolo su [ANSI escape codes] (http://en.wikipedia.org/wiki/ANSI_escape_code#graphics)! Ma, anche se dicono che c'è un modo per generare un output colorato RGB ('\ 033 [38; 2; r; g; bm'), non riesco a farlo funzionare sul mio terminale gnome. –
Vale la pena menzionare: questo non ha nulla a che fare con 'bash'. Le sequenze di escape ANSI sono interpretate dal tuo * terminale * ('gnome-terminal',' xterm', 'konsole', ecc.). 'bash' è solo una * shell * (interprete dei comandi) lanciata dal tuo terminale. – MestreLion