2785 votes

Comment changer la couleur de sortie de echo sous Linux

J'essaie d'imprimer un texte dans le terminal à l'aide de la commande echo.

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

64 votes

3712voto

Tobias Points 1803

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

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 assurez-vous d'utiliser l'option -e pour permettre l'échappement des antislashs. .

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

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

29 votes

Ça ne marche pas pour moi sortie : \e[0;31mHello Stackoverflow\e[0m

236 votes

Avez-vous essayé avec "-e" ? Il indique echo pour activer l'échappement des antislashs.

182 votes

Sous MacOSX, en utilisant \x1B au lieu de \e . \033 serait acceptable pour toutes les plateformes.

1321voto

Drew Noakes Points 69288

Vous pouvez utiliser l'impressionnant tput (suggéré dans Réponse d'Ignacio ) pour produire des codes de contrôle de terminal pour toutes sortes de choses.


Utilisation

Spécifique tput Les sous-commandes sont abordées plus loin.

Direct

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

tput setaf 1; echo "this is red text"

Utilisez ; au lieu de && donc si tput erreurs le texte apparaît toujours.

Variables Shell

Une autre option consiste à utiliser les variables du 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. Elles ne seront pas affichées en tant que telles. Notez qu'elles peuvent toujours être enregistrées dans des fichiers ou traitées en entrée par des programmes autres que le terminal.

Substitution de commande

Il peut être plus pratique d'insérer tput directement dans votre echo les chaînes de caractères 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 couleurs d'avant-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 y setf au lieu de setaf ) qui utilisent des numéros différents, non indiqué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 déplacement 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

Commandes d'effacement et d'insertion

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 wobbly Windows El bel 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 devant tput sortent.

Évitez les fichiers temporaires en faisant écho à une chaîne de caractères multiligne et en la faisant passer dans un pipeline :

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

Voir aussi

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

25 votes

Excellente réponse. C'est celle qui m'a le plus aidé. Pour tous ceux qui se demandaient ce que je me demandais, les $() est un substitution de commande . Tous les sites tput af 1 génère la chaîne de code de couleur, mais les codes ne sont pas des caractères imprimables. tput af 1 seul produira une ligne de sortie vide.

6 votes

Note : si vous utilisez CygWin et que vous n'avez pas de tput installez ncurses

5 votes

Tput fonctionne aussi avec sed pour analyser les textes en textes lisibles et colorés : gist.github.com/nickboldt/fab71da10bd5169ffdfa

240voto

Utilisez tput avec le setaf et un paramètre de 1 .

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

13 votes

Cela devrait être la meilleure option. quoi tput est de lire les informations du terminal et de rendre le code ANSI correctement échappé pour vous. Un code comme \033[31m brisera le ligne de lecture bibliothèque dans certains des terminaux.

54 votes

Explorer les couleurs avec une boucle simple (augmenter i pour plus de nuances) : for (( i = 0; i < 17; i++ )); do echo "$(tput setaf $i)This is ($i) $(tput sgr0)"; done

4 votes

Voici un HOWTO sur les codes tput : tldp.org/HOWTO/Bash-Prompt-HOWTO/x405.html

200voto

Neo Points 1468
echo -e "\033[31m Hello World"

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

  • 30 - 37 fixe Premier plan couleur
  • 40 - 47 fixe arrière-plan couleur

Une liste plus complète des codes de couleur peuvent être trouvés ici .

Une bonne pratique consiste à réinitialiser la couleur du texte à \033[0m à la fin de la chaîne.

4 votes

Echo -e " \033 [31m Hello World", le [31m est la couleur

33voto

Alireza Mirian Points 471

Un moyen efficace de changer de couleur pour une seule personne. echo est de définir cette 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;
}

Utilisation :

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

0 votes

Si vous ajoutez -n à l'écho alors vous pouvez l'utiliser comme coloration en ligne echo "Red `coloredEcho "fox" red` jumps over the lazy dog"

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X