# [TIP] codes de couleur pour scripts bash

## anigel

Bonjour,

Un truc tout bête, mais qui reste difficile à trouver lorsqu'on écrit des scripts bash : les codes pour "coloriser" le texte !

Enregistrez simplement le code ci-dessous dans un fichier color.sh par exemple, puis, dans votre script, faites un source color.sh ; les variables seront alors disponibles dans votre script.

```
__RED="\033[1;31m"

__DARK_RED="\033[0;31m"

__BLUE="\033[0;34m"

__LIGHT_BLUE="\033[1;34m"

__YELLOW="\033[1;33m"

__GREEN="\033[0;32m"

__LIGHT_GREEN="\033[1;32m"

__PURPLE="\033[0;35m"

__CYAN="\033[0;36m"

__BROWN="\033[0;33m"

__LIGHT_GREY="\033[0;37m"

__DARK_GREY="\033[1;30m"

__NO_COLOUR="\033[0m"
```

Amusez-vous bien  :Wink:  (et n'hésitez pas à compléter la liste des codes couleurs, au besoin).

EDIT : un ami vient de me linker cette page, plutôt sympa. J'y ajoute aussi celle-ci, très complète, que je viens de retrouver dans mon bookmark.

----------

## ttgeub

Pour voir l'effet produit, y a ce script qui affiche les couleurs :

```

T='gYw'   # The test text

echo -e "\n                 40m     41m     42m     43m\

     44m     45m     46m     47m";

for FGs in '    m' '   1m' '  30m' '1;30m' '  31m' '1;31m' '  32m' \

           '1;32m' '  33m' '1;33m' '  34m' '1;34m' '  35m' '1;35m' \

           '  36m' '1;36m' '  37m' '1;37m';

  do FG=${FGs// /}

  echo -en " $FGs \033[$FG  $T  "

  for BG in 40m 41m 42m 43m 44m 45m 46m 47m;

    do echo -en "$EINS \033[$FG\033[$BG  $T  \033[0m";

  done

  echo;

done

echo

```

PS : d'ailleurs anigel c'est pas toi qui me l'avait filé ce script ????Last edited by ttgeub on Mon Sep 19, 2005 9:00 am; edited 1 time in total

----------

## anigel

 *ttypub wrote:*   

> PS : d'ailleurs anigel c'est pas toi qui me l'avait filé ce script ????

 

Non, c'est S_Oz je crois  :Wink: . Moi j'avais juste fourni les couleurs  :Laughing:  !

----------

## Enlight

A priori j'ai aps exactement les mêmes donc je les poste :

 *Quote:*   

> couleurs_texte()
> 
> {
> 
>     rouge="\\033[0;31m"
> ...

 

A noter bien entendu que echo doit être appelé avec l'option -e pour interpréter les caractères échappés, et que chaque couleur peut être associé via paramétrages du TERM dans le ~.Xdefaults à une couleur réelle au format #XXXXXX.

edit : et pour formater le texte, j'ajoutes :

 *Quote:*   

> placement_texte()
> 
> {
> 
>     largeur_ecran=${COLUMNS}
> ...

 

à adapter bien entendu.

----------

## NiLuJe

Moi j'ai plutôt des trucs du genre

```
noir=$'\x1b[0;30m'

rouze=$'\x1b[0;31m'

rouge=$'\x1b[1;31m'

vert=$'\x1b[1;32m'

orange=$'\x1b[0;33m'

jaune=$'\x1b[1;33m'

bleu=$'\x1b[1;34m'

magenta=$'\x1b[1;35m'

cyan=$'\x1b[1;36m'

gris=$'\x1b[0;37m'

blanc=$'\x1b[1;37m'

olive=$'\x1b[0;32m'
```

Ça passe aussi sur les cat du coup, parcequ'il me semblent que les 033 & co ne passent pas dans les cat ...

----------

## Enlight

 *NiLuJe wrote:*   

> Moi j'ai plutôt des trucs du genre
> 
> ```
> noir=$'\x1b[0;30m'
> 
> ...

 

Tu peux develloper l'histoire des cat stp, car sur le moment je vois pas l'utilité.

----------

## SnowBear

Merci pour ce tip, ça fait un bail que je cherchais comment modifier mon terminal   :Wink: 

----------

## nonas

Vous pouvez aussi allez voir dans /etc/DIR_COLORS

C'est là que sont définies les couleurs en fonction de divers paramètres (dossier, type de fichier (par extensions) etc)

Sans oublier /etc/.bashrc pour des réglages globaux.

Un autre lien (en anglais) : http://advbash.activeventure.net/colorizing.html

----------

## NiLuJe

@ Enlight : Test avec ça p.e :

```
#! /bin/bash

__ROUGE=$'\x1b[1;31m'

_ROUGE="\033[1;31m"

alias razc="tput sgr0"

echo -e "$__ROUGE __ROUGE" ; razc

echo -e "$_ROUGE _ROUGE" ; razc

cat << EoM

$__ROUGE __ROUGE

EoM

razc

cat << EoM

$_ROUGE __ROUGE

EoM
```

ça donne une sortie

 __ROUGE

 _ROUGE

 __ROUGE

(Jusque la tout va bien ... mais la prochaine, c'est le drame!)

\033[1;31m __ROUGE

Donc comme j'ai l'habitude de faire passer mes gros patés via un cat, c'est un peu plus zoli ^^

EDIT : En fait c'est surtout le fait de déclarer sa variable entre $' ', ça marche aussi avec _ROUGE=$'\033[1;31m'. Après le pourquoi du comment, j'en ai aucune idée! ^^

----------

## Enlight

ok, mais si je m'amuse à insérer ça dans un script ou un fichier de config ça va me le pourrir, non?

ps : EoM???

----------

## NiLuJe

C'est à dire? Pas tout suivi la ^^

Le EoM c'est pour délimiter la fin du cat, en l'occurrence EoM pour End of Message la, m'enfin tu met ce que tu veux, à condition que les 2 concordent, évidemment  :Wink: 

----------

## Enlight

Ben je sais pas comment tu utilises cat, mais moi c'est en général pour vérifier le contenu d un fichier de config où d'un script sans ouvrir d'éditeur...

----------

## NiLuJe

Dans ce cas la 

```
cat << END

BlahBlah

END
```

ça fait à peu près la même chose qu'un

```
echo BlahBlah
```

Mais je trouve ça moins bordélique qu'une série d'echo, ou un echo de 12 lignes  :Wink: 

Ça n'a plus grand chose à voir avec un `cat unfichier` effectivement  :Wink: 

----------

## Enlight

 *NiLuJe wrote:*   

> Dans ce cas la 
> 
> ```
> cat << END
> 
> ...

 

Effectivement, j'avais pas pensé à l'utiliser ainsi sur la sortie standard! Thx!

----------

