web-dev-qa-db-fra.com

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

Je sais que pour imprimer un texte en couleur 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 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: qu'est-ce que \e et [ et m (après 31) signifie exactement ici?
J'ai lu dans la page de manuel que\e est une fuite, mais je n'ai pas compris ce que cela signifie.

25
M0εiπ

Ils font partie des "éléments de séquence" de séquences d'échappement ANSI également connu sous le nom de ECMA-48 séquences CSI qui ont été initialement adoptées en 1976

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

Tapez man console_codes dans presque toutes les distributions * nix pour voir les codes et certains documents.

13
Anthony Hatzopoulos

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 ..)

4
AnBisw

\e est un raccourci pour le caractère d'échappement. le <ESC>[ et m sont 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 implémentée (par exemple, déplacer le curseur sur la ligne; effacer jusqu'à la fin de la ligne, ramener le curseur sur l'emplacement enregistré, etc.).

2
DopeGhoti

J'ai trouvé une belle explication ici (au moins, agréable 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.

2
BorrajaX