Essas são sequências de escape ANSI ; esse link é para um gráfico de códigos de cores, mas há outras coisas interessantes nessa página da Wikipédia também. Nem todos funcionam em (por exemplo) um console normal do Linux.
Isso está incorreto:
3]00m\] # white
0
redefine o terminal para o padrão (que provavelmente é branco). O código real para o primeiro plano branco é 37. Além disso, a chave de fechamento com escape no final ( \]
) não faz parte da sequência de cores (consulte os últimos parágrafos abaixo para obter uma explicação sobre sua finalidade ao configurar um prompt). / p>
Observe que alguns terminais da GUI permitem que você especifique um esquema de cores personalizado. Isso afetará a saída.
Há uma lista aqui que adiciona 7 cores de primeiro plano e 7 cores de fundo que eu não tinha visto antes, mas elas parecem funcionar :
# 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
Além disso, se você tiver um terminal GUI de 256 cores (acho que a maioria deles é agora), é possível aplicar cores neste gráfico:
AsequênciaANSIparaselecioná-los,usandoonúmeronocantoinferioresquerdo,inicia38;5;
paraoprimeiroplanoe48;5;
paraosegundoplano,depoisonúmerodacor,porexemplo:
echo-e"\033[48;5;95;38;5;214mhello world\033[0m"
Me dá uma luz laranja na cor bronzeada (ou seja, a cartela de cores é aproximadamente aproximada).
Você pode ver as cores neste gráfico 1 como elas apareceriam no seu terminal com bastante facilidade:
#!/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
A saída é autoexplicativa.
Alguns sistemas definem a variável $ TERM como xterm-256color
se você estiver em um terminal de 256 cores por meio de algum código de shell em /etc/profile
. Em outros, você deve poder configurar seu terminal para usar isso. Isso permitirá que os aplicativos da TUI saibam que há 256 cores e permitirão que você adicione algo assim ao seu ~/.bashrc
:
if [[ "$TERM" =~ 256color ]]; then
PS1="MyCrazyPrompt..."
fi
Tenha em atenção que, quando utilizar sequências de escape de cores na sua linha de comandos, deve colocá-las entre parênteses rectos ( \
prefixed), da seguinte forma:
PS1="\[3[01;32m\]MyPrompt: \[3[0m\]"
Observe que o interior de [
na sequência de cores não é escapado, mas os que estão em anexo são. O objetivo deste último é indicar ao shell que a seqüência incluída não conta para o tamanho do caractere do prompt. Se essa contagem estiver errada, coisas estranhas acontecerão quando você rolar pelo histórico, por exemplo, se for muito longo, o comprimento em excesso da última string rolada aparecerá anexado ao seu prompt e você não poderá retroceder ele (é ignorado da mesma forma que o prompt é).
Observe também que, se você quiser incluir a saída de um comando toda vez que o prompt for usado (em oposição a apenas uma vez quando o prompt estiver configurado), você deverá defini-lo como uma string literal com aspas simples, por exemplo:
PS1='\[3[01;32m\]$(date): \[3[0m\]'
Embora este não seja um ótimo exemplo, se você estiver satisfeito com o uso dos vazamentos especiais \d
ou \D{format}
do bash - que não são o tópico da pergunta, mas podem ser encontrados em man bash
under PROMPTING
. Existem várias outras fugas úteis, como \w
para o diretório atual, \u
para o usuário atual, etc.
1. A parte principal deste gráfico, as cores 16 - 231 (observe que elas não estão em ordem numérica) são um cubo de cores 6 x 6 x 6 RGB. "Cubo de cores" refere-se ao fato de que um espaço de cores RGB pode ser representado usando uma matriz tridimensional (com um eixo para vermelho, um para verde e um para azul). Cada cor no cubo aqui pode ser representada como coordenadas em uma matriz 6 x 6 x 6, e o índice no gráfico é calculado da seguinte forma:
16 + R * 36 + G * 6 + B
A primeira cor no cubo, no índice 16 no gráfico, é preta (RGB 0, 0, 0). Você poderia usar essa fórmula no script de 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"