impression de texte en couleur à l'aide de l'écho

25

Je sais que pour imprimer un texte coloré en utilisant l'écho, par exemple la couleur rouge, le code est: echo -e "\e[1;31m This is red text \e[0m"
et je sais que dans cet exemple, 31 est le code de la couleur rouge et le nombre d'autres couleurs est:

Black       0;30     Dark Gray     1;30
Blue        0;34     Light Blue    1;34
Green       0;32     Light Green   1;32
Cyan        0;36     Light Cyan    1;36
Red         0;31     Light Red     1;31
Purple      0;35     Light Purple  1;35
Brown       0;33     Yellow        1;33
Light Gray  0;37     White         1;37

et pour les couleurs d'arrière-plan, le nombre est compris entre 40 et 47

ma question est la suivante: que signifie exactement \eet [et m(après 31) ici?
J'ai lu dans la page de manuel que \ e est escape, mais je n'ai pas compris ce que cela signifie.

M0εiπ
la source
En général, vous échappez à des personnages qui ont une signification particulière dans le contexte technique actuel. Par exemple, les chaînes sont souvent écrites entre guillemets, "comme ceci". Mais si vous voulez des guillemets dans une chaîne, vous devez échapper ces caractères afin qu'ils soient interprétés littéralement et non comme des délimiteurs. Par exemple, echo "She said \"Hi\""comme pour ce cas (votre question), vous devrez attendre une meilleure réponse.
Emanuel Berg

Réponses:

13

Ils font partie des «éléments de séquence» des séquences d'échappement ANSI également connues sous le nom de séquences ECMA-48 CSI qui ont été adoptées à l'origine en 1976

Plus précisément, [c'est le « Control Sequence Introducer »

Tapez man console_codespresque n'importe quelle distribution * nix pour voir les codes et certains documents.

Anthony Hatzopoulos
la source
man 4 console_codepas man console_code: dans mon ubuntu
0x6773
Le nom de la page de manuel se termine par un "s", donc "man console_codes" devrait afficher la bonne page.
Mikko Rantalainen
4

Pour être précis, les codes de couleur sont définis comme suit:

Opening
RED= "\033[31m" or "\e[1;31m"
CYAN="\033[36m" or "\e[1;31m"

Closing = "\033[m" or "\e[0m"

Donc, fondamentalement, c'est juste la façon dont les différents terminaux interprètent les codes de couleur et vous sous-titrez votre texte au sein de ces éléments. C'est une façon étrange de faire comprendre au terminal ce que vous voulez dire (comme HexCodes ou Binary ..)

Ann Jawn
la source
2

J'ai trouvé une belle explication ici (au moins, sympa pour moi :-) ). Je ne sais pas si cela vous sera utile.

Pour commencer, tapez ceci sur votre console:

echo "^[[0;31;40mIn Color"

Le premier caractère est un caractère d'échappement, qui ressemble à deux caractères, ^ et [. Pour pouvoir imprimer ceci, vous devez appuyer sur CTRL + V puis sur la touche ESC. Tous les autres caractères sont des caractères imprimables normaux, vous voyez donc la chaîne In Color en rouge. Le type conserve cette couleur jusqu'à ce que vous revériiez en tapant ceci:

Ce sont des codes d'échappement pour définir les modes de couleur dans le terminal. C'est juste que lorsqu'ils sont imprimés avec des caractères normaux, ils ressemblent à ça.

BorrajaX
la source
2

\eest un raccourci pour le caractère Escape. le <ESC>[et le msont les marqueurs pour le début et la fin des séquences de contrôle de couleur ANSI, qui sont un sous-ensemble de contrôle de terminal ANSI séquencé. La plupart d'entre eux commencent par <ESC>[, suivi d'un nombre, suivi d'une lettre indiquant quelle fonction est mise en œuvre (par exemple, déplacer le curseur sur la ligne; effacer jusqu'à la fin de la ligne, ramener le curseur sur l'emplacement enregistré, etc.).

DopeGhoti
la source