Temps de lecture estimé : 8 minutes
Une fois que vous avez compris comment utiliser les couleurs dans votre terminal, c’est super facile à utiliser. Colorer le code de vos scripts shell est presque indispensable !
J’ai essayé d’analyser le contenu aussi objectivement que possible. J’espère qu’il s’agit d’un bon point de départ pour vous permettre de tout peindre, hehe. Voyons ce qu’il en est.
Code d’échappement
Tout d’abord, il est important de savoir que pour activer la couleur, vous devez utiliser un code d’échappement qui appelle la fonction de coloration.
ESC[m
Ce code est le suivant .
Le code peut être appelé de différentes manières.
man ascii
Selon le tableau ascii à :
Oct Dec Hex Char ------------------------------- 033 27 1B ESC (escape)
\033
Personnellement, j’aime appeler ESC par l’octal .
\e
Dans les nouvelles versions de bash, vous pouvez également appeler , mais l’utilisation de l’hexadécimal ou de l’octal vous donnera moins de maux de tête.
Note : la décimale ne fonctionne généralement pas !
Attention : Sur MacOS, la dernière version de bash est très ancienne, 3.2.57. Je vous recommande de mettre à jour vers la version 5 avec brew.
Appelez donc la fonction de formation de style comme suit (nous n’avons pas encore introduit de styles/couleurs) :
echo -e "\033[m" Texto pronto para receber cores. Escape em octal echo -e "\x1b[m" Outro texto sem cores. Escape em hexadecimal
Formatage
Commençons donc à colorier. Fondamentalement, nous devons tenir compte de trois caractéristiques de la mise en forme. Elles sont les suivantes :
- Effet de décoration du texte
- Couleur du texte (premier plan)
- Couleur de fond
Chacune de ces caractéristiques a un code unique, que vous trouverez ci-dessous.
Décoration
Le tableau ci-dessous devrait fonctionner pour tous les modes de couleur, mais pas toujours pour tous les terminaux. Chaque terminal a ses propres particularités.
Código | Descrição ------- | ----------- 0 | Reset/Normal 1 | Bold text 2 | Dim (escurece) 3 | Italics 4 | Underlined text 5 | Blink 7 | Reverse 8 | Hidden 9 | Tachado
ESC[
m
Appliquez le code entre et .
ESC[0m
ESC[m
Après chaque morceau de texte coloré, réinitialisez-le (0) avec , ou omettez simplement tout code, en laissant .
echo -e "\033[1m" Com negrito. "\033[m" Texto normal. echo -e "\033[1m" Com negrito. "\033[m" Texto normal.
Vous pouvez également combiner le formatage en séparant les codes avec la touche ;
echo -e "\033[1;3m" Negrito e itálico. "\033[0m" Texto normal.
En utilisant printf, la syntaxe change un peu, mais elle est tout aussi simple. Elle est divisée en deux parties : le formatage, où vous définissez les détails du type (texte, nombre, codes de couleur, etc.) et les arguments, où vous entrez les informations qui recevront le formatage. Voir les exemples :
printf '\033[1;3m %s \033[0m' "Texto decorado." printf '\033[48;2;255;255;255;38;2;255;0;255m %3d \033[0m %s \033[1;4;31m %3d \033[0m' 100 "Texto sem cor:" 3
Note : Pour des raisons didactiques, le formatage printf est encadré par des guillemets simples ‘ ‘, et les arguments suivent.
Modes de couleur
Les choses deviennent ensuite plus complexes, car chaque terminal peut lire d’une manière différente. D’un terminal à l’autre, il peut y avoir un support pour plus ou moins de modes de couleurs. Sur MacOS, iTerm 2 est un bon choix, même avec des séparateurs de fenêtres, ce qui est très intéressant pour ceux qui passent la journée à travailler dans le terminal. Cependant, le terminal standard de macOS ne devrait pas vous gêner à cet égard. Un collègue a patiemment établi ce tableau de compatibilité intéressant.
Il existe 4 modes de couleurs :
- ASCII pur
- Codes d’échappement ANSI : 16 codes de couleur avec gras/italique et arrière-plan
- 256 couleurs : 216 couleurs + 16 ANSI + 24 gris (couleurs 24 bits)
- Couleurs réelles 24 bits : « 8 8 8 » ou « 11111111 11111111 » (16 millions de couleurs)
Mode 8/16 couleurs
Comme indiqué ci-dessus, chaque couleur a un code unique. Dans ce mode, les couleurs qui modifient le texte ont les codes « 3x » et « 9x » et les couleurs qui modifient l’arrière-plan commencent par « 4x » et « 10x ». Voir le tableau
Color | Foreground Code | Background Code --------------- | ----------------- | -------------- Default Color | 39 | 49 Black | 30 | 40 Red | 31 | 41 Green | 32 | 42 Yellow | 33 | 43 Blue | 34 | 44 Magenta | 35 | 45 Cyan | 36 | 46 Light Gray | 37 | 47 Gray | 90 | 100 Light Red | 91 | 101 Light Green | 92 | 102 Light Yellow | 93 | 103 Light Blue | 94 | 104 Light Magenta | 95 | 105 Light Cyan | 96 | 106 White | 97 | 107
Pour ce mode, la syntaxe du code peut suivre le schéma suivant ESC[E;F;Bm
E peut contenir plusieurs codes de décoration.
Código | Descrição ------- | --------- ESC[ | Sequência de escape para iniciar cores E | Código de efeito. F | Código da cor do texto; um valor de 30 à 37. B | Código de cor de fundo; um valor de 40 à 47. m | Representa o fim da sequência de cores.
L’ordre du code n’a pas d’importance non plus.
Exemples :
echo -e "\033[1;92;104m Texto verde claro em negrito com fundo azul claro \033[m" echo -e "\033[5;3;31;107m Texto vermelho, piscante, itálico com fundo branco \033[m" echo -e "\033[4;90m Texto cinza, sobrescrito\033[m" echo -e "\033[1;5m Bold+Blink \033[0m" echo -e "\033[1;4;31m Bold+Underline+Red \033[0m"
Le code couleur peut également être saisi sous forme de variables :
# Seta cores RED='\033[0;31m' HEADER='\033[95m' OKBLUE='\033[94m' OKGREEN='\033[92m' WARNING='\033[93m' FAIL='\033[91m' BOLD='\033[1m' UNDERLINE='\033[4m' ENDC='\033[0m' echo -e "${RED}LINHA COM CORES${ENDC}" echo -e "${HEADER}LINHA COM CORES${ENDC}" echo -e "${OKBLUE}LINHA COM CORES${ENDC}" echo -e "${OKGREEN}LINHA COM CORES${ENDC}" echo -e "${WARNING}LINHA COM CORES${ENDC}" echo -e "${FAIL}LINHA COM CORES${ENDC}" echo -e "${BOLD}LINHA COM CORES${ENDC}" echo -e "${UNDERLINE}LINHA COM CORES${ENDC}"
Mode couleur 88/256
Pour activer le mode de couleur 88/256 pour le texte, l’arrière-plan ou les deux, c’est un peu différent. La combinaison de codes se fait avec 2 séquences différentes :
- Pour définir la couleur du texte, le code est 38;5;{0..255}, où {0..255} est l’une des 256 couleurs.
- Pour fixer la couleur de l’arrière-plan, le code est 48;5;{0..255}
Consultez la liste complète des 256 couleurs et leurs combinaisons avec la couleur du texte/de l’arrière-plan en exécutant ce script shell :
#!/bin/bash # This program is free software. It comes without any warranty, to # the extent permitted by applicable law. You can redistribute it # and/or modify it under the terms of the Do What The Fuck You Want # To Public License, Version 2, as published by Sam Hocevar. See # http://sam.zoy.org/wtfpl/COPYING for more details. for fgbg in 38 48 ; do # Foreground / Background for color in {0..255} ; do # Colors # Display the color printf "\e[${fgbg};5;%sm %3s \e[0m" $color $color # Display 6 colors per lines if [ $((($color + 1) % 6)) == 4 ] ; then echo # New line fi done echo # New line done
Dans ce cas, vous devez respecter l’ordre dans lequel le trio est combiné, contrairement au mode de couleur 8/16 ci-dessus. Mais peu importe que vous placiez l’arrière-plan avant le premier plan ou vice versa. Vous ne pouvez pas faire quelque chose comme 5;{0..255};38, sinon ce sera mauvais.
Voyez comment se présente la combinaison des couleurs du texte, de l’arrière-plan et de la décoration :
# Recapitulando: # ESC[...m <- identifica o uso de cor # \033 <- escape # 38;5;cor <- Cor do texto # 48;5;cor <- Cor do fundo # 0 a 9 <- estilo echo -en "\033[38;5;135;48;5;114;3m Fundo verde e texto rosa itálico \033[m" echo -en "\033[48;5;135;38;5;235;1m Fundo rosa e texto preto negrito \033[m"
Mode couleurs vraies 24 bits (16 millions de couleurs)
La syntaxe d’utilisation du mode 24 bits n’est pas très différente de la précédente. Le détail ici est la présence de R;G;B :
ESC[{38|48};2;${red};${green};${blue}m
Exemples :
# Cor do texto echo -e "\033[38;2;255;0;255mTRUECOLOR\033[0m\n"; # Cor do fundo echo -e "\033[48;2;255;255;255mTRUECOLOR\033[0m\n"; # Cor do texto e do fundo echo -e "\033[48;2;255;255;255;38;2;255;0;255mTRUECOLOR\033[0m\n"; # Cor texto, fundo e estilo echo -e "\033[48;2;255;255;255;38;2;255;0;255;3mTRUECOLOR\033[0m\n"
Regardez à quel point ces dégradés d’arrière-plan sont intéressants.
for i in {16..20} {20..16} ; do echo -e "\033[48;5;${i};1m :o) \033[0m" ; done for i in {22..27} {27..22} ; do echo -en "\033[48;5;${i};1m \033[0m" ; done
Considérations finales
Comme vous pouvez le constater, ce n’est pas compliqué. Il suffit de savoir utiliser le bon mode de couleur et le bon code d’échappement.
echo
-e
Pour cet article, nous avons beaucoup utilisé la commande, avec son argument qui permet d’utiliser des caractères spéciaux avec des échappements.
printf
Mais vous pouvez aussi l’utiliser sans problème si vous avez besoin des fonctions avancées de l’outil.
Pour en savoir plus sur echo
lisez le manuel de commande, qui est très facile à comprendre.
man echo
Printf est un peu plus complexe, mais très intéressant. Il en vaut la peine.
man printf
J’espère que vous avez apprécié.
Vous avez des questions ? Laissez un commentaire.
Voir aussi
- tput http://linuxcommand.org/lc3_adv_tput.php pour les manipulations du terminal
- La section sur les couleurs est complétée par les conseils de https://misc.flogisoft.com/bash/tip_colors_and_formatting.
- https://gist.github.com/XVilka/8346728