Question Comment changer la couleur de sortie d'echo dans Linux


J'essaie d'imprimer un texte dans le terminal en utilisant la commande echo.

Je veux imprimer le texte dans une couleur rouge. Comment puis je faire ça?


1145
2018-05-10 09:07


origine


Réponses:


Vous pouvez utiliser ces Codes d'échappement ANSI:

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

Et puis utilisez-les comme ceci dans votre script:

#    .---------- constant part!
#    vvvv vvvv-- the code from above
RED='\033[0;31m'
NC='\033[0m' # No Color
printf "I ${RED}love${NC} Stack Overflow\n"

qui imprime love en rouge.

Du commentaire de @ james-lim, si vous utilisez le echo commande, assurez-vous d'utiliser l'indicateur -e pour autoriser les fuites d'antislash.

# Continued from above example
echo -e "I ${RED}love${NC} Stack Overflow"

(ne pas ajouter "\n" lors de l'utilisation de l'écho sauf si vous voulez ajouter une ligne vide supplémentaire)


1563
2018-05-10 09:11



Vous pouvez utiliser le génial tput commande (suggérée dans La réponse d'Ignacio) pour produire des codes de contrôle terminaux pour toutes sortes de choses.


Usage

Spécifique tput les sous-commandes sont discutées plus tard.

Direct

Appel tput dans le cadre d'une séquence de commandes:

tput setaf 1; echo "this is red text"

Utilisation ; au lieu de && donc si tput erreurs que le texte montre encore.

Variables de shell

Une autre option consiste à utiliser des variables shell:

red=`tput setaf 1`
green=`tput setaf 2`
reset=`tput sgr0`
echo "${red}red text ${green}green text${reset}"

tput produit des séquences de caractères qui sont interprétées par le terminal comme ayant une signification particulière. Ils ne seront pas montrés eux-mêmes. Notez qu'ils peuvent toujours être enregistrés dans des fichiers ou traités en entrée par des programmes autres que le terminal.

Substitution de commande

Il peut être plus pratique d'insérer tputde sortie directement dans votre echo cordes en utilisant substitution de commande:

echo "$(tput setaf 1)Red text $(tput setab 7)and white background$(tput sgr 0)"

Exemple

La commande ci-dessus produit ceci sur Ubuntu:

Screenshot of colour terminal text


Commandes de couleur de premier plan et d'arrière-plan

tput setab [1-7] # Set the background colour using ANSI escape
tput setaf [1-7] # Set the foreground colour using ANSI escape

Les couleurs sont les suivantes:

Num  Colour    #define         R G B

0    black     COLOR_BLACK     0,0,0
1    red       COLOR_RED       1,0,0
2    green     COLOR_GREEN     0,1,0
3    yellow    COLOR_YELLOW    1,1,0
4    blue      COLOR_BLUE      0,0,1
5    magenta   COLOR_MAGENTA   1,0,1
6    cyan      COLOR_CYAN      0,1,1
7    white     COLOR_WHITE     1,1,1

Il existe également des versions non-ANSI des fonctions de réglage des couleurs (setb au lieu de setab, et setf au lieu de setaf) qui utilisent des nombres différents, non donnés ici.

Commandes en mode texte

tput bold    # Select bold mode
tput dim     # Select dim (half-bright) mode
tput smul    # Enable underline mode
tput rmul    # Disable underline mode
tput rev     # Turn on reverse video mode
tput smso    # Enter standout (bold) mode
tput rmso    # Exit standout mode

Commandes de mouvement du curseur

tput cup Y X # Move cursor to screen postion X,Y (top left is 0,0)
tput cuf N   # Move N characters forward (right)
tput cub N   # Move N characters back (left)
tput cuu N   # Move N lines up
tput ll      # Move to last line, first column (if no cup)
tput sc      # Save the cursor position
tput rc      # Restore the cursor position
tput lines   # Output the number of lines of the terminal
tput cols    # Output the number of columns of the terminal

Effacer et insérer des commandes

tput ech N   # Erase N characters
tput clear   # Clear screen and move the cursor to 0,0
tput el 1    # Clear to beginning of line
tput el      # Clear to end of line
tput ed      # Clear to end of screen
tput ich N   # Insert N characters (moves rest of line forward!)
tput il N    # Insert N lines

Autres commandes

tput sgr0    # Reset text format to the terminal's default
tput bel     # Play a bell

Avec Compiz fenêtres wobbly, la bel La commande fait vaciller le terminal pendant une seconde pour attirer l'attention de l'utilisateur.


Scripts

tput accepte les scripts contenant une commande par ligne, qui sont exécutés dans l'ordre avant tput sorties.

Évitez les fichiers temporaires en faisant écho à une chaîne multiligne et en la redirigeant:

echo -e "setf 7\nsetb 1" | tput -S  # set fg white and bg red

Voir également

  • Voir man 1 tput
  • Voir man 5 terminfo pour la liste complète des commandes et plus de détails sur ces options. (Le correspondant tput commande est répertoriée dans le Cap-name colonne de l'énorme table qui commence à la ligne 81.)

646
2018-01-07 22:25



certaines variables que vous pouvez utiliser:

# Reset
Color_Off='\033[0m'       # Text Reset

# Regular Colors
Black='\033[0;30m'        # Black
Red='\033[0;31m'          # Red
Green='\033[0;32m'        # Green
Yellow='\033[0;33m'       # Yellow
Blue='\033[0;34m'         # Blue
Purple='\033[0;35m'       # Purple
Cyan='\033[0;36m'         # Cyan
White='\033[0;37m'        # White

# Bold
BBlack='\033[1;30m'       # Black
BRed='\033[1;31m'         # Red
BGreen='\033[1;32m'       # Green
BYellow='\033[1;33m'      # Yellow
BBlue='\033[1;34m'        # Blue
BPurple='\033[1;35m'      # Purple
BCyan='\033[1;36m'        # Cyan
BWhite='\033[1;37m'       # White

# Underline
UBlack='\033[4;30m'       # Black
URed='\033[4;31m'         # Red
UGreen='\033[4;32m'       # Green
UYellow='\033[4;33m'      # Yellow
UBlue='\033[4;34m'        # Blue
UPurple='\033[4;35m'      # Purple
UCyan='\033[4;36m'        # Cyan
UWhite='\033[4;37m'       # White

# Background
On_Black='\033[40m'       # Black
On_Red='\033[41m'         # Red
On_Green='\033[42m'       # Green
On_Yellow='\033[43m'      # Yellow
On_Blue='\033[44m'        # Blue
On_Purple='\033[45m'      # Purple
On_Cyan='\033[46m'        # Cyan
On_White='\033[47m'       # White

# High Intensity
IBlack='\033[0;90m'       # Black
IRed='\033[0;91m'         # Red
IGreen='\033[0;92m'       # Green
IYellow='\033[0;93m'      # Yellow
IBlue='\033[0;94m'        # Blue
IPurple='\033[0;95m'      # Purple
ICyan='\033[0;96m'        # Cyan
IWhite='\033[0;97m'       # White

# Bold High Intensity
BIBlack='\033[1;90m'      # Black
BIRed='\033[1;91m'        # Red
BIGreen='\033[1;92m'      # Green
BIYellow='\033[1;93m'     # Yellow
BIBlue='\033[1;94m'       # Blue
BIPurple='\033[1;95m'     # Purple
BICyan='\033[1;96m'       # Cyan
BIWhite='\033[1;97m'      # White

# High Intensity backgrounds
On_IBlack='\033[0;100m'   # Black
On_IRed='\033[0;101m'     # Red
On_IGreen='\033[0;102m'   # Green
On_IYellow='\033[0;103m'  # Yellow
On_IBlue='\033[0;104m'    # Blue
On_IPurple='\033[0;105m'  # Purple
On_ICyan='\033[0;106m'    # Cyan
On_IWhite='\033[0;107m'   # White

 

le caractère d'échappement dans frapper, hex et octal respectivement:

|       | bash  | hex    | octal   | NOTE                         |
|-------+-------+--------+---------+------------------------------|
| start | \e    | \x1b   | \033    |                              |
| start | \E    | \x1B   | -       | x cannot be capital          |
| end   | \e[0m | \x1m0m | \033[0m |                              |
| end   | \e[m  | \x1b[m | \033[m  | 0 is appended if you omit it |
|       |       |        |         |                              |

court exemple:

| color       | bash         | hex            | octal          | NOTE                                  |
|-------------+--------------+----------------+----------------+---------------------------------------|
| start green | \e[32m<text> | \x1b[32m<text> | \033[32m<text> | m is NOT optional                     |
| reset       | <text>\e[0m  | <text>\1xb[0m  | <text>\033[om  | o is optional (do it as best practice |
|             |              |                |                |                                       |

exception de bash:

Si vous allez utiliser ces codes dans votre variables bash spéciales 

  • PS0
  • PS1
  • PS2 (= c'est pour l'invite)
  • PS4

vous devez ajouter des caractères d'échappement supplémentaires afin que  peut les interpréter correctement. Sans cela, ajouter des caractères d'échappement supplémentaires, cela fonctionne, mais vous rencontrerez des problèmes lorsque vous utilisez Ctrl + r pour la recherche dans votre histoire.

règle d'exception pour bash

Vous devriez ajouter \[ avant tout code ANSI de départ et ajouter \] après ceux qui se terminent.
Exemple:
en usage régulier: \033[32mThis is in green\033[0m
pour PS0 / 1/2/4: \[\033[32m\]This is in green\[\033[m\] 

\[ est pour le début d'une séquence de non-imprimable personnages
\] est à la fin d'une séquence de non-imprimable personnages

Astuce: pour le mémoriser, vous pouvez d'abord ajouter \[\] puis placez votre code ANSI entre eux:
  - \[start-ANSI-code\]
  - \[end-ANSI-code\] 

type de séquence de couleurs:

  1. 3/4 bit
  2. 8 bits
  3. 24 bits

Avant de plonger dans ces couleurs, vous devriez connaître environ 4 modes avec ces codes:

1. couleur-mode

Il modifie le style de couleur PAS de texte. Par exemple rendre la couleur brillante ou plus sombre.

  • 0  réinitialiser
  • 1;  plus léger que la normale
  • 2; plus sombre que la normale

Ce mode n'est pas pris en charge largement. Il est entièrement compatible avec Gnome-Terminal.

2. mode texte

Ce mode sert à modifier le style du texte NOT couleur.

  • 3; italique
  • 4; souligner
  • 5; clignotant (lent)
  • 6; clignotant (rapide)
  • 7; sens inverse
  • 8; cacher
  • 9; barrer

et sont presque supportés.
Par exemple, KDE-Konsole soutient 5; mais Gnome-Terminal ne prend pas en charge et Gnome 8; mais KDE ne le fait pas.

3. mode premier plan

Ce mode est pour coloriser le premier plan.

4. mode d'arrière-plan

Ce mode est pour coloriser l'arrière-plan.

 

Le tableau ci-dessous montre un résumé de 3/4 bit version de ANSI-couleur

|------------+----------+---------+-------+------------------+------------------------------+--------------------------------------|
| color-mode | octal    | hex     | bash  | description      | example (= in octal)         | NOTE                                 |
|------------+----------+---------+-------+------------------+------------------------------+--------------------------------------|
|          0 | \033[0m  | \x1b[0m | \e[0m | reset any affect | echo -e "\033[0m"            | 0m equals to m                       |
|          1 | \033[1m  |         |       | light (= bright) | echo -e "\033[1m####\033[m"  | -                                    |
|          2 | \033[2m  |         |       | dark (= fade)    | echo -e "\033[2m####\033[m"  | -                                    |
|------------+----------+---------+-------+------------------+------------------------------+--------------------------------------|
|  text-mode | ~        |         |       | ~                | ~                            | ~                                    |
|------------+----------+---------+-------+------------------+------------------------------+--------------------------------------|
|          3 | \033[3m  |         |       | italic           | echo -e "\033[3m####\033[m"  |                                      |
|          4 | \033[4m  |         |       | underline        | echo -e "\033[4m####\033[m"  |                                      |
|          5 | \033[5m  |         |       | blink (slow)     | echo -e "\033[3m####\033[m"  |                                      |
|          6 | \033[6m  |         |       | blink (fast)     | ?                            | not wildly support                   |
|          7 | \003[7m  |         |       | reverse          | echo -e "\033[7m####\033[m"  | it affects the background/foreground |
|          8 | \033[8m  |         |       | hide             | echo -e "\033[8m####\033[m"  | it affects the background/foreground |
|          9 | \033[9m  |         |       | cross            | echo -e "\033[9m####\033[m"  |                                      |
|------------+----------+---------+-------+------------------+------------------------------+--------------------------------------|
| foreground | ~        |         |       | ~                | ~                            | ~                                    |
|------------+----------+---------+-------+------------------+------------------------------+--------------------------------------|
|         30 | \033[30m |         |       | black            | echo -e "\033[30m####\033[m" |                                      |
|         31 | \033[31m |         |       | red              | echo -e "\033[31m####\033[m" |                                      |
|         32 | \033[32m |         |       | green            | echo -e "\033[32m####\033[m" |                                      |
|         33 | \033[32m |         |       | yellow           | echo -e "\033[33m####\033[m" |                                      |
|         34 | \033[32m |         |       | blue             | echo -e "\033[34m####\033[m" |                                      |
|         35 | \033[32m |         |       | purple           | echo -e "\033[35m####\033[m" | real name: magenta = reddish-purple  |
|         36 | \033[32m |         |       | cyan             | echo -e "\033[36m####\033[m" |                                      |
|         37 | \033[32m |         |       | white            | echo -e "\033[37m####\033[m" |                                      |
|------------+----------+---------+-------+------------------+------------------------------+--------------------------------------|
|         38 | 8/24     |                    This is for special use of 8-bit or 24-bit                                            |
|------------+----------+---------+-------+------------------+------------------------------+--------------------------------------|
| background | ~        |         |       | ~                | ~                            | ~                                    |
|------------+----------+---------+-------+------------------+------------------------------+--------------------------------------|
|         40 | \033[40m |         |       | black            | echo -e "\033[40m####\033[m" |                                      |
|         41 | \033[41m |         |       | red              | echo -e "\033[41m####\033[m" |                                      |
|         42 | \033[42m |         |       | green            | echo -e "\033[42m####\033[m" |                                      |
|         43 | \033[43m |         |       | yellow           | echo -e "\033[43m####\033[m" |                                      |
|         44 | \033[44m |         |       | blue             | echo -e "\033[44m####\033[m" |                                      |
|         45 | \033[45m |         |       | purple           | echo -e "\033[45m####\033[m" | real name: magenta = reddish-purple  |
|         46 | \033[46m |         |       | cyan             | echo -e "\033[46m####\033[m" |                                      |
|         47 | \033[47m |         |       | white            | echo -e "\033[47m####\033[m" |                                      |
|------------+----------+---------+-------+------------------+------------------------------+--------------------------------------|
|         48 | 8/24     |                    This is for special use of 8-bit or 24-bit                                            |                                                                                       |
|------------+----------+---------+-------+------------------+------------------------------+--------------------------------------|

 

Le tableau ci-dessous montre un résumé de 8 bits version de ANSI-couleur

|------------+-----------+-----------+---------+------------------+------------------------------------+-------------------------|
| foreground | octal     | hex       | bash    | description      | example                            | NOTE                    |
|------------+-----------+-----------+---------+------------------+------------------------------------+-------------------------|
|        0-7 | \033[38;5 | \x1b[38;5 | \e[38;5 | standard. normal | echo -e '\033[38;5;1m####\033[m'   |                         |
|       8-15 |           |           |         | standard. light  | echo -e '\033[38;5;9m####\033[m'   |                         |
|     16-231 |           |           |         | more resolution  | echo -e '\033[38;5;45m####\033[m'  | has no specific pattern |
|    232-255 |           |           |         |                  | echo -e '\033[38;5;242m####\033[m' | from black to white     |
|------------+-----------+-----------+---------+------------------+------------------------------------+-------------------------|
| foreground | octal     | hex       | bash    | description      | example                            | NOTE                    |
|------------+-----------+-----------+---------+------------------+------------------------------------+-------------------------|
|        0-7 |           |           |         | standard. normal | echo -e '\033[48;5;1m####\033[m'   |                         |
|       8-15 |           |           |         | standard. light  | echo -e '\033[48;5;9m####\033[m'   |                         |
|     16-231 |           |           |         | more resolution  | echo -e '\033[48;5;45m####\033[m'  |                         |
|    232-255 |           |           |         |                  | echo -e '\033[48;5;242m####\033[m' | from black to white     |
|------------+-----------+-----------+---------+------------------+------------------------------------+-------------------------|

Le test rapide en 8 bits:
for code in {0..255}; do echo -e "\e[38;05;${code}m $code: Test"; done 

 

Le tableau ci-dessous montre un résumé de 24 bits version de ANSI-couleur

|------------+-----------+-----------+---------+-------------+------------------------------------------+-----------------|
| foreground | octal     | hex       | bash    | description | example                                  | NOTE            |
|------------+-----------+-----------+---------+-------------+------------------------------------------+-----------------|
|      0-255 | \033[38;2 | \x1b[38;2 | \e[38;2 | R = red     | echo -e '\033[38;2;255;0;02m####\033[m'  | R=255, G=0, B=0 |
|      0-255 | \033[38;2 | \x1b[38;2 | \e[38;2 | G = green   | echo -e '\033[38;2;;0;255;02m####\033[m' | R=0, G=255, B=0 |
|      0-255 | \033[38;2 | \x1b[38;2 | \e[38;2 | B = blue    | echo -e '\033[38;2;0;0;2552m####\033[m'  | R=0, G=0, B=255 |
|------------+-----------+-----------+---------+-------------+------------------------------------------+-----------------|
| background | octal     | hex       | bash    | description | example                                  | NOTE            |
|------------+-----------+-----------+---------+-------------+------------------------------------------+-----------------|
|      0-255 | \033[48;2 | \x1b[48;2 | \e[48;2 | R = red     | echo -e '\033[48;2;255;0;02m####\033[m'  | R=255, G=0, B=0 |
|      0-255 | \033[48;2 | \x1b[48;2 | \e[48;2 | G = green   | echo -e '\033[48;2;;0;255;02m####\033[m' | R=0, G=255, B=0 |
|      0-255 | \033[48;2 | \x1b[48;2 | \e[48;2 | B = blue    | echo -e '\033[48;2;0;0;2552m####\033[m'  | R=0, G=0, B=255 |
|------------+-----------+-----------+---------+-------------+------------------------------------------+-----------------|

 

quelques captures d'écran

premier plan résumé de 8 bits dans un .gif 

foreground.gif

résumé de 8 bits de fond dans un .gif 

background.gif

résumé des couleurs avec leurs valeurs

enter image description here enter image description here enter image description here enter image description here

blinking sur KDE-Terminal

KDE-blinking

 un simple C code qui vous montre plus

cecho_screenshot

 un outil plus avancé que j'ai développé pour gérer ces couleurs:
bline 


tir en mode couleur

fade-normal-bright

coup de mode texte

only-text-mode

la combinaison est OK

combine

plus de coups


Trucs et astuces pour les utilisateurs avancés et les programmeurs:

Pouvons-nous utiliser ces codes dans un langage de programmation?

Oui, vous pouvez. J'ai vécu dans , , ,   ,

Ralentissent-ils la vitesse d'un programme?

Je pense que non.

Pouvons-nous les utiliser sur Windows?

3/4-bit Oui, si vous compilez le code avec gcc
quelques captures d'écran sur Win-7 

Comment calculer la longueur du code?

\033[ = 2, autres parties 1

Où pouvons-nous utiliser ces codes?

Partout où il y a un tty interprète
xterm, gnome-terminal, kde-terminal, mysql-client-CLI etc.
Par exemple, si vous voulez coloriser votre sortie avec mysql, vous pouvez utiliser Perl 

#!/usr/bin/perl -n
print "\033[1m\033[31m$1\033[36m$2\033[32m$3\033[33m$4\033[m" while /([|+-]+)|([0-9]+)|([a-zA-Z_]+)|([^\w])/g;

stocker ce code dans un nom de fichier: pcc (= Caractère Perl Colorize), puis placez le fichier a dans valide PATH alors utilisez-le où vous voulez.

ls | pcc
df | pcc 

à l'intérieur mysql d'abord l'enregistrer pour pager puis essayez:

[user2:db2] pager pcc
PAGER set to 'pcc'
[user2:db2] select * from table-name;

pcc

Cela fait NE PAS gérer Unicode.

Est-ce que ces codes ne font que coloriser?

Non, ils peuvent faire beaucoup de choses intéressantes. Essayer:

echo -e '\033[2K'  # clear the screen and do not move the position

ou:

echo -e '\033[2J\033[u' # clear the screen and reset the position

Il y a beaucoup de débutants qui veulent effacer l'écran avec system( "clear" ) donc vous pouvez l'utiliser au lieu de system(3) appel

Sont-ils disponibles en Unicode?

Oui. \u001b 

Quelle version de ces couleurs est préférable?

C'est facile a utiliser 3/4-bit, mais il est très précis et beau à utiliser 24-bit.
Si vous n'avez pas d'expérience avec  alors voici un petit tutoriel:
24 bits signifie: 00000000 et 00000000 et 00000000. Chaque 8 bits est pour une couleur spécifique.
24..17 est pour  et 16..9 pour  et 8..1 pour
Donc dans   #FF0000 veux dire  et voici c'est: 255;0;0
dans   #00FF00 veux dire  qui est ici: 0;255;0
Cela a-t-il du sens? quelle couleur vous voulez combiner avec ces trois valeurs de 8 bits.


référence:
Wikipédia
Séquences d'échappement ANSI
tldp.org
tldp.org
misc.flogisoft.com
des blogs / pages web dont je ne me souviens pas

badges:


463
2018-03-09 09:02



Utilisation tput avec le setaf capacité et un paramètre de 1.

echo "$(tput setaf 1)Hello, world$(tput sgr0)"

158
2018-05-10 09:10



echo -e "\033[31m Hello World"

le [31m contrôle la couleur du texte:

  • 30-37 ensembles premier plan Couleur
  • 40-47 ensembles Contexte Couleur

Une liste plus complète des codes de couleurs peut être trouvé ici.

Il est recommandé de réinitialiser la couleur du texte à \033[0m à la fin de la chaîne.


96
2018-05-10 09:10



C'est le commutateur de couleur  \033[. Voir histoire.

Couleur codes sont comme 1;32 (Vert clair), 0;34 (Bleu), 1;34 (Bleu clair), etc.

Nous terminons les séquences de couleurs avec un commutateur de couleur \033[ et 0m, la non-code couleur. Tout comme ouvrir et fermer des onglets dans un langage de balisage.

  SWITCH="\033["
  NORMAL="${SWITCH}0m"
  YELLOW="${SWITCH}1;33m"
  echo "${YELLOW}hello, yellow${NORMAL}"

Couleur simple echo solution de fonction:

cecho() {
  local code="\033["
  case "$1" in
    black  | bk) color="${code}0;30m";;
    red    |  r) color="${code}1;31m";;
    green  |  g) color="${code}1;32m";;
    yellow |  y) color="${code}1;33m";;
    blue   |  b) color="${code}1;34m";;
    purple |  p) color="${code}1;35m";;
    cyan   |  c) color="${code}1;36m";;
    gray   | gr) color="${code}0;37m";;
    *) local text="$1"
  esac
  [ -z "$text" ] && local text="$color$2${code}0m"
  echo "$text"
}

cecho "Normal"
cecho y "Yellow!"

29
2018-02-25 01:38



Une manière soignée de changer de couleur seulement pour un echo est de définir une telle fonction:

function coloredEcho(){
    local exp=$1;
    local color=$2;
    if ! [[ $color =~ '^[0-9]$' ]] ; then
       case $(echo $color | tr '[:upper:]' '[:lower:]') in
        black) color=0 ;;
        red) color=1 ;;
        green) color=2 ;;
        yellow) color=3 ;;
        blue) color=4 ;;
        magenta) color=5 ;;
        cyan) color=6 ;;
        white|*) color=7 ;; # white or invalid color
       esac
    fi
    tput setaf $color;
    echo $exp;
    tput sgr0;
}

Usage:

coloredEcho "This text is green" green

Ou vous pouvez utiliser directement les codes de couleur mentionnés dans La réponse de Drew:

coloredEcho "This text is green" 2

25
2018-04-11 07:36