Em determinados terminais compatíveis com XTerm / ANSI (como xterm
e gnome-terminal
), é possível definir cores usando uma paleta maior que a paleta padrão de 8/16 cores (por exemplo, usando uma paleta de 88 cores, 256 cores ou 16777216 cores (RGB) ; ambos xterm
e gnome-terminal
suportam a paleta de 256 cores e a de 16777216 cores (RGB)); lembre-se de que o shell pode substituir isso (este é o caso, por exemplo, para zsh
).
Aqui está um script para listar as cores na paleta de 256 cores, juntamente com o código de cores ANSI nos terminais compatíveis com XTerm / ANSI com suporte para paleta de 256 cores:
#!/bin/bash
for((i=16; i<256; i++)); do
printf "\e[48;5;${i}m%03d" $i;
printf '\e[0m';
[ ! $((($i - 15) % 6)) -eq 0 ] && printf ' ' || printf '\n'
done
Dependendo se você deseja aplicar a cor ao primeiro plano ou ao plano de fundo, use um <fg_bg>
valor de 38
ou 48
(respectivamente) no seguinte comando:
printf '\e[<fg_bg>;5;<ANSI_color_code>m'
Por exemplo, para definir a cor do primeiro plano ( <fg_bg>
= 38
) como vermelho ( <ANSI_color_code>
= 196
) e a cor do plano de fundo ( <fg_bg>
= 48
) como preto ( <ANSI_color_code>
= 0
):
printf '\e[38;5;196m Foreground color: red\n'
printf '\e[48;5;0m Background color: black\n'
É necessário redesenhar o prompt usando printf '\e[K'
para que a cor do plano de fundo seja aplicada a toda a linha e para que a cor do primeiro plano seja aplicada ao cursor:
O mesmo pode ser feito usando valores RGB em vez de códigos de cores ANSI em um terminal compatível; dependendo se você deseja aplicar a cor ao primeiro plano ou ao plano de fundo, use um <fg_bg>
valor de 38
ou 48
(respectivamente) no seguinte comando:
printf '\e[<fg_bg>;2;<R>;<G>;<B>m'
Por exemplo, para definir a cor do primeiro plano ( <fg_bg>
= 38
) como vermelho ( <R>
= 255
, <G>
= 0
, <B>
= 0
) e a cor do plano de fundo ( <fg_bg>
= 48
) como preto ( <R>
= 0
, <G>
= 0
, <B>
= 0
):
printf '\e[38;2;255;0;0m Foreground color: red\n'
printf '\e[48;2;0;0;0m Background color: black\n'
Novamente, é necessário redesenhar o prompt usando printf '\e[K'
para que a cor do plano de fundo seja aplicada a toda a linha e para que a cor do primeiro plano seja aplicada ao cursor:
Usando um dos métodos, você pode usar printf '\e[0m'
para redefinir todos os atributos: