Essas são sequências de escape ANSI ; esse link é para uma tabela de códigos de cores, mas também há outras coisas interessantes nessa página da Wikipedia. Nem todos eles funcionam (por exemplo) em um console Linux normal.
Isso está incorreto:
\033]00m\] # white
0
redefine o terminal para o padrão (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 definir um prompt).
Observe que alguns terminais da GUI permitem especificar um esquema de cores personalizado. Isso afetará a saída.
Há uma lista aqui que adiciona 7 cores de primeiro plano e 7 de fundo que eu nunca 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 está agora), poderá aplicar cores neste gráfico:
A sequência ANSI para selecioná-las, usando o número no canto inferior esquerdo, inicia 38;5;
no primeiro plano e no plano 48;5;
de fundo, depois o número da cor, por exemplo:
echo -e "\\033[48;5;95;38;5;214mhello world\\033[0m"
Dá-me uma cor laranja clara no bronzeado (ou seja, a tabela de cores é aproximadamente aproximada).
Você pode ver as cores nesta tabela 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 é auto-explicativa.
Alguns sistemas configuram a variável $ TERM como xterm-256color
se você estiver em um terminal de 256 cores por meio de algum código shell /etc/profile
. Em outros, você deve poder configurar seu terminal para usar isso. Isso permitirá que os aplicativos TUI saibam que existem 256 cores e permitirá que você adicione algo assim ao seu ~/.bashrc
:
if [[ "$TERM" =~ 256color ]]; then
PS1="MyCrazyPrompt..."
fi
Cuidado ao usar sequências de escape de cores em seu prompt, coloque-as \
entre colchetes de escape ( prefixados), desta forma:
PS1="\[\033[01;32m\]MyPrompt: \[\033[0m\]"
Observe que o [
interior da sequência de cores não é escapado, mas os anexos são. O objetivo deste último é indicar ao shell que a sequência incluída não conta para o comprimento de caracteres do prompt. Se essa contagem estiver errada, coisas estranhas acontecerão quando você voltar ao histórico, por exemplo, se for muito longo, o excesso de comprimento da última sequência rolada aparecerá anexado ao seu prompt e você não poderá retroceder no (é ignorado da mesma maneira que o prompt).
Observe também que se você deseja incluir a saída de um comando executado toda vez que o prompt é usado (em vez de apenas uma vez quando o prompt é definido), você deve configurá-lo como uma string literal com aspas simples, por exemplo:
PS1='\[\033[01;32m\]$(date): \[\033[0m\]'
Embora este não seja um ótimo exemplo, se você estiver satisfeito com o escape especial \d
ou \D{format}
imediato do bash - que não é o tópico da pergunta, mas pode ser encontrado em man bash
abaixo PROMPTING
. Existem várias outras fugas úteis, como \w
diretório \u
atual, 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 outro 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ê pode usar esta fórmula no shell script:
#!/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"
\]
aqui não faz parte da sequência de cores; serve para definir especificamente os prompts (adicionamos alguns parágrafos ao final da minha resposta sobre isso). "Seria bom se houvesse uma forma mais legível também." -> o recorte e cole em sua própria resposta é uma maneira de fazer isso.