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 ?
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 ?
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)
Sous MacOSX, en utilisant \x1B
au lieu de \e
. \033
serait acceptable pour toutes les plateformes.
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.
Spécifique tput
Les sous-commandes sont abordées plus loin.
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.
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.
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)"
La commande ci-dessus produit ceci sur Ubuntu :
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.
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
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
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
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.
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
man 1 tput
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).
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.
Tput fonctionne aussi avec sed pour analyser les textes en textes lisibles et colorés : gist.github.com/nickboldt/fab71da10bd5169ffdfa
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.
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
echo -e "\033[31m Hello World"
El [31m
contrôle la couleur du texte :
30
- 37
fixe Premier plan couleur40
- 47
fixe arrière-plan couleurUne 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.
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
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.
64 votes
Ce lien est très utile : misc.flogisoft.com/bash/tip_colors_and_formatting