J'essaie d'imprimer un texte dans le terminal à l'aide de la commande echo.
Je souhaite imprimer le texte en rouge. Comment puis je faire ça?
linux
bash
command-line
echo
terminal-color
satheesh.droid
la source
la source
Réponses:
Vous pouvez utiliser ces codes d'échappement ANSI :
Et puis utilisez-les comme ceci dans votre script:
qui imprime
love
en rouge.D'après le commentaire de @ james-lim, si vous utilisez la
echo
commande, assurez-vous d'utiliser l'indicateur -e pour autoriser les échappements de barre oblique inverse .(ne pas ajouter
"\n"
lors de l'utilisation d'écho, sauf si vous souhaitez ajouter une ligne vide supplémentaire)la source
\e[0;31mHello Stackoverflow\e[0m
echo
d'activer les échappements antislash.\x1B
au lieu de\e
.\033
serait ok pour toutes les plateformes.for (( i = 30; i < 38; i++ )); do echo -e "\033[0;"$i"m Normal: (0;$i); \033[1;"$i"m Light: (1;$i)"; done
Vous pouvez utiliser le génial
tput
commande (suggérée dans la réponse d'Ignacio ) pour produire des codes de contrôle de terminal pour toutes sortes de choses.Usage
Des
tput
sous-commandes spécifiques sont discutées plus loin.Direct
Appelez
tput
dans le cadre d'une séquence de commandes:Utiliser
;
au lieu de&&
si en cas d'tput
erreurs le texte s'affiche toujours.Variables shell
Une autre option consiste à utiliser des variables shell:
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 affiché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 commandes
Il peut être plus pratique d'insérer
tput
la sortie de directement dans vosecho
chaînes en utilisant la substitution de commande :Exemple
La commande ci-dessus produit ceci sur Ubuntu:
Commandes de couleur de premier plan et d'arrière-plan
Les couleurs sont les suivantes:
Il existe également des versions non ANSI des fonctions de réglage des couleurs (
setb
au lieu desetab
etsetf
au lieu desetaf
) qui utilisent des nombres différents, non donnés ici.Commandes en mode texte
Commandes de déplacement du curseur
Effacer et insérer des commandes
Autres commandes
Avec les fenêtres tremblantes compiz , la
bel
commande fait osciller 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 detput
quitter.Évitez les fichiers temporaires en faisant écho à une chaîne multiligne et en la canalisant:
Voir également
man 1 tput
man 5 terminfo
pour la liste complète des commandes et plus de détails sur ces options. (Latput
commande correspondante est répertoriée dans laCap-name
colonne de l'énorme tableau qui commence à la ligne 81.)la source
$()
c'est une substitution de commande . Iltput af 1
suffit de générer la chaîne de code couleur, mais les codes ne sont pas des caractères imprimables, donc la saisietput af 1
seule produira une ligne de sortie vierge.ncurses
tput
couleurs, consultez cette réponse sur Unix StackExchangereset=`tput sgr0`
devrait êtrereset=`tput sgr 0`
, avec un espace.quelques variables que vous pouvez utiliser:
le caractère d'échappement en bash , hex et octal respectivement:
court exemple:
exception bash:
Si vous allez utiliser ces codes dans vos variables bash spéciales
vous devez ajouter des caractères d'échappement supplémentaires afin que frapperpeut les interpréter correctement. Sans cela, l'ajout de caractères d'échappement supplémentaires fonctionne, mais vous rencontrerez des problèmes lorsque vous utilisez
Ctrl + r
pour la recherche dans votre historique.règle d'exception pour bash
Vous devez ajouter
\[
avant tout code ANSI de départ et ajouter\]
après tous les codes de fin.Exemple:
en utilisation régulière:
\033[32mThis is in green\033[0m
pour PS0 / 1/2/4:
\[\033[32m\]This is in green\[\033[m\]
\[
est pour le démarrage d'une séquence de non-imprimables caractères\]
est à la fin d'une séquence de non-imprimables caractèresAstuce: pour le mémoriser, vous pouvez d'abord ajouter
\[\]
puis mettre votre code ANSI entre eux:-
\[start-ANSI-code\]
-
\[end-ANSI-code\]
type de séquence de couleurs:
Avant de plonger dans ces couleurs, vous devez connaître 4 modes avec ces codes:
1. mode couleur
Il modifie le style de couleur PAS le texte. Par exemple, rendez la couleur claire ou plus foncée.
0
réinitialiser1;
plus léger que la normale2;
plus sombre que la normaleCe mode n'est pas largement pris en charge. Il est entièrement pris en charge sur Gnome-Terminal.
2. mode texte
Ce mode sert à modifier le style du texte et NON la couleur.
3;
italique4;
souligner5;
clignotant (lent)6;
clignotant (rapide)7;
inverser8;
cacher9;
barreret sont presque pris en charge.
Par exemple, KDE-Konsole prend en charge
5;
mais pas Gnome-Terminal et Gnome prend en charge8;
mais pas KDE.3. mode premier plan
Ce mode sert à coloriser le premier plan.
4. mode fond
Ce mode sert à coloriser l'arrière-plan.
Le tableau ci-dessous présente un résumé de la version 3/4 bits de la couleur ANSI
Le tableau ci-dessous présente un résumé des version 8 bits de la couleur ANSI
Le test rapide 8 bits:
for code in {0..255}; do echo -e "\e[38;05;${code}m $code: Test"; done
Le tableau ci-dessous présente un résumé de la version 24 bits de la couleur ANSI
quelques captures d'écran
premier plan résumé 8 bits dans un
.gif
résumé de fond 8 bits dans un
.gif
résumé des couleurs avec leurs valeurs
blinking
sur KDE-Terminalun
C
code simple qui vous en montre plusun outil plus avancé que j'ai développé pour faire face à ces couleurs:
prise de vue en mode couleur
prise de vue en mode texte
la combinaison est OK
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 dansfrapper, c, c ++, ré perl, python
Ralentissent-ils la vitesse d'un programme?
Je pense que non.
Pouvons-nous les utiliser sous Windows?
3/4 bits 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 1Où pouvons-nous utiliser ces codes?
Partout qui a un
tty
interprètexterm
,gnome-terminal
,kde-terminal
,mysql-client-CLI
et ainsi de suite.Par exemple, si vous souhaitez coloriser votre sortie avec mysql, vous pouvez utiliser
Perl
stockez ce code dans un nom de fichier:
pcc
(= Perl Colorize Character) puis mettez le fichier en validePATH
puis utilisez-le où vous voulez.ls | pcc
df | pcc
à l' intérieur d'
mysql
abord l' enregistrer pourpager
puis essayer:Il ne gère PAS Unicode.
Ces codes ne font-ils que coloriser?
Non, ils peuvent faire beaucoup de choses intéressantes. Essayer:
ou:
Il y a beaucoup de débutants qui veulent effacer l'écran
system( "clear" )
afin que vous puissiez l'utiliser au lieu d'system(3)
appelerSont-ils disponibles en Unicode?
Oui.
\u001b
Quelle version de ces couleurs est préférable?
Il est facile à utiliser
3/4-bit
, mais il est beaucoup plus précis et beau à utiliser24-bit
.Si vous n'avez pas d'expérience avechtmlvoici donc un petit tutoriel:
24 bits signifie:
00000000
et00000000
et00000000
. Chaque 8 bits correspond à une couleur spécifique.1..8
est pour et9..16
pour et17..24
pourDonc , enhtml
#FF0000
signifie et le voici:255;0;0
enhtml
#00FF00
signifie qui est ici:0;255;0
Est-ce que cela a du sens? quelle couleur vous voulez la combiner avec ces trois valeurs de 8 bits.
référence:
Wikipedia
séquences d'échappement ANSI
tldp.org
tldp.org
misc.flogisoft.com
quelques blogs / pages web dont je ne me souviens pas
la source
x1B[
pour l'éliminer.Utiliser
tput
avec lasetaf
capacité et un paramètre de1
.la source
\033[31m
ci cassera la bibliothèque readline dans certains des terminaux.i
la limite supérieure pour plus de nuances):for (( i = 0; i < 17; i++ )); do echo "$(tput setaf $i)This is ($i) $(tput sgr0)"; done
tput: command not found
(en alpin)Le
[31m
contrôle la couleur du texte:30
-37
définit la couleur de premier plan40
-47
définit la couleur d' arrière-planUne liste plus complète des codes de couleur peut être trouvée ici .
Il est recommandé de réinitialiser la couleur du texte
\033[0m
à la fin de la chaîne.la source
Je viens de fusionner les bonnes prises dans toutes les solutions et je me suis retrouvé avec:
Et vous pouvez simplement l'appeler comme:
la source
Ceci est le commutateur de couleur
\033[
. Voir l' histoire .Les codes de couleur 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[
et0m
le code sans couleur. Tout comme l'ouverture et la fermeture des onglets dans un langage de balisage.echo
Solution de fonction couleur simple :la source
text
variable detext="$color${@: 2}${code}0m"
cette façon, toute la ligne, sauf le paramètre de couleur, sera colorée.tput
car il est plus portable - fonctionne également dans Bash sur macOS. Par conséquent, je suggère d'utiliser la fonction d'Alireza Mirian à partir de cette réponse: stackoverflow.com/a/23006365/2693875Une bonne façon de changer la couleur pour un seul
echo
est de définir une telle fonction:Usage:
Ou vous pouvez directement utiliser les codes de couleur mentionnés dans la réponse de Drew :
la source
-n
à l'écho, vous pouvez l'utiliser comme coloriage en ligneecho "Red `coloredEcho "fox" red` jumps over the lazy dog"
Utilisez
tput
pour calculer les codes couleurs. Évitez d'utiliser le code d'échappement ANSI (par exemple\E[31;1m
pour le rouge) car il est moins portable. Bash sous OS X, par exemple, ne le prend pas en charge.la source
Cette question a été répondue à maintes reprises :-) mais pourquoi pas.
La première utilisation
tput
est plus portable dans les environnements modernes que l'injection manuelle de codes ASCII viaecho -E
Voici une fonction bash rapide:
Vous pouvez maintenant utiliser:
obtenir:
Notes sur la portabilité des
tput
Le premier
tput(1)
code source a été téléchargé en septembre 1986tput(1)
a été disponible dans la sémantique X / Open curses dans les années 1990 (la norme de 1997 a la sémantique mentionnée ci-dessous).Donc, c'est ( assez ) omniprésent.
la source
tput
? Est-il disponible sur la plupart des serveurs où l'on n'a pas les droits d'administrateur pour l'installer? Avez-vous un lien vers l'endroit où cette technique a été «inventée» pour la première fois?$PS1
sans\[...\]
autour des parties non espacées? Continuez à utiliser les marqueurs Bash PS1 avec les chaînes tput.Merci à @ k-five pour cette réponse
Résultat
J'espère que cette image vous aidera à choisir la couleur de votre bash: D
la source
Si vous utilisez
zsh
oubash
Essayez en ligne
la source
Nous pouvons utiliser des couleurs vraies 24 bits RVB pour le texte et l'arrière-plan!
Exemple de texte rouge et de balise de fermeture:
Générateur:
Afficher l'extrait de code
Est-il sûr d'utiliser dans mes scripts?
Oui! Les terminaux 8 et 16 bits afficheront juste comme couleur de repli sur la gamme de la palette disponible, gardant le meilleur contraste, pas de casse!
De plus, personne n'a remarqué l'utilité de la vidéo inversée ANSI code 7 .
Il reste lisible sur toutes les couleurs de schémas de terminal, les arrière-plans noirs ou blancs ou d'autres palettes fantaisies, en échangeant les couleurs de premier plan et d'arrière-plan.
Exemple, pour un fond rouge qui fonctionne partout:
Voici à quoi cela ressemble lors du changement des schémas intégrés du terminal:
Ceci est le script de boucle utilisé pour le gif.
Voir https://en.wikipedia.org/wiki/ANSI_escape_code#SGR_(Select_Graphic_Rendition)_parameters
la source
Ces codes fonctionnent sur ma boîte Ubuntu:
Cela imprime les lettres abcd toutes de différentes couleurs:
Pour la boucle:
la source
J'ai trouvé la réponse impressionnante de Shakiba Moshiri pendant que je cherchais des informations sur ce sujet ... alors j'ai eu une idée ... et cela s'est terminé par une fonction assez agréable extrêmement facile à utiliser 😁
Donc je dois la partager 😉
https://github.com/ppo/bash-colors
Utilisation: à l'
$(c <flags>)
intérieur d'unecho -e
ouprintf
Exemples:
la source
Pour la lisibilité
Si vous souhaitez améliorer la lisibilité du code, vous pouvez d'abord
echo
la chaîne puis ajouter la couleur plus tard en utilisantsed
:la source
Jusqu'à présent, ma réponse préférée est Écho coloré.
Juste pour poster une autre option, vous pouvez consulter ce petit outil xcol
https://ownyourbits.com/2017/01/23/colorize-your-stdout-with-xcol/
vous l'utilisez comme grep, et il colorisera son stdin avec une couleur différente pour chaque argument, par exemple
Notez qu'il accepte toute expression régulière que sed acceptera.
Cet outil utilise les définitions suivantes
J'utilise ces variables dans mes scripts comme ça
la source
Pour développer cette réponse , pour les paresseux:
la source
tput
; c'est pour ça!tput
poursc
etrc
bien (enregistrer le curseur, restaurer le curseur). Bien que cette réponse m'appelle «paresseuse», elle pourrait être reformulée comme «pratique» ou «directe».pour afficher la sortie du message avec des couleurs différentes, vous pouvez créer:
la source
Vous devez absolument utiliser tput sur des séquences de contrôle ANSI brutes.
depuis http://wiki.bash-hackers.org/scripting/terminalcodes
Cela dit, j'ai écrit une petite bibliothèque d'aide appelée bash-tint , qui ajoute une autre couche au-dessus de tput, ce qui la rend encore plus simple à utiliser (à mon humble avis):
Exemple:
tint "white(Cyan(T)Magenta(I)Yellow(N)Black(T)) is bold(really) easy to use."
Donnerait le résultat suivant:
la source
Au lieu de coder en dur les codes d'échappement spécifiques à votre terminal actuel, vous devriez les utiliser
tput
.Voici mon script de démonstration préféré:
la source
J'utilise ceci pour l'impression couleur
Toutes les couleurs de base sont définies en tant que vars et il existe également des fonctions utiles: XY, line et que. Sourcez ce script dans l'un des vôtres et utilisez toutes les variables et fonctions de couleur.
la source
Et c'est ce que j'ai utilisé pour voir toutes les combinaisons et décider ce qui se lit cool:
la source
J'ai écrit swag pour y parvenir.
Tu peux juste faire
Vous pouvez maintenant installer toutes les commandes d'échappement sous forme de fichiers txt vers une destination donnée via:
Ou encore plus simple via:
Qui va installer les couleurs
~/.colors
.Soit vous les utilisez comme ceci:
Ou de cette façon, que je trouve en fait plus intéressante:
Découvrez-le sur asciinema !
la source
Voici un petit script simple, que j'ai mis en place récemment, qui colorisera toute entrée canalisée au lieu d'utiliser "Toilette".
File: color.bsh
Appelez-le ensuite avec la couleur rouge (196):
$> echo "text you want colored red" | color.bsh 196
la source
Faire référence à:
la source
Voici la solution la plus simple et lisible. Avec bashj ( https://sourceforge.net/projects/bashj/ ), vous choisiriez simplement l'une de ces lignes:
256x256x256
les couleurs sont disponibles si vous avez la prise en charge des couleurs dans votre application de terminal.la source
après avoir mélangé d'autres solutions à partir du fil, voici comment j'ai réussi à obtenir des couleurs en
npm scripts
sortie (gitbash CLI):la source
Tout comme quelque chose un peu là-bas, le faire passer par grep le mettra en surbrillance en rouge (mais seulement en rouge). Vous pouvez également utiliser des canaux nommés pour que votre chaîne soit plus proche de la fin de la ligne:
la source
Cette réponse est correcte, sauf que l'appel aux couleurs ne doit pas être à l'intérieur des guillemets.
Devrait faire l'affaire.
la source
echo -e '\e[0;31mHello Stackoverflow\e[0m'
. Il en va de même pour bash.