Lorsqu'il est écrit comme ceci, il affiche le texte en bleu:
printf "\e[1;34mThis is a blue text.\e[0m"
Mais je veux que le format soit défini dans printf:
printf '%-6s' "This is text"
Maintenant, j'ai essayé plusieurs options pour ajouter de la couleur, sans succès:
printf '%-6s' "\e[1;34mThis is text\e[0m"
J'ai même essayé d'ajouter un code d'attribut au format sans succès. Cela ne fonctionne pas et je ne trouve nulle part un exemple, où les couleurs sont ajoutées à printf, qui a défini le format comme dans mon cas.
printf
commande est modélisée d'après laprintf()
fonction en langage C. Là, le premier paramètre / argument est toujours laformat
chaîne qui inclut tout le formatage (et peut-être aussi les couleurs) et le reste des paramètres sont des données. Si vous souhaitez mettre du texte avec un style spécifique, il est logique de mettre toutes les mises en forme et les échappements de couleur dans la chaîne de format. Notez que la chaîne de format est considérée comme approuvée et ne doit jamais contenir d'entrée utilisateur.printf
compose d'une chaîne de format et d'une liste d'arguments qui s'impriment selon le format. Vous devriez voir les couleurs comme faisant partie de la chaîne de format et par conséquent, elles devraient appartenir à la chaîne de format.Plutôt que d'utiliser des codes terminaux archaïques, puis-je suggérer l'alternative suivante. Non seulement il fournit un code plus lisible, mais il vous permet également de séparer les informations de couleur des spécificateurs de format comme vous l'aviez initialement prévu.
blue=$(tput setaf 4) normal=$(tput sgr0) printf "%40s\n" "${blue}This text is blue${normal}"
Voir ma réponse ICI pour des couleurs supplémentaires
la source
Cela fonctionne pour moi:
printf "%b" "\e[1;34mThis is a blue text.\e[0m"
De
printf(1)
:la source
Ceci est un petit programme pour obtenir une couleur différente sur le terminal.
#include <stdio.h> #define KNRM "\x1B[0m" #define KRED "\x1B[31m" #define KGRN "\x1B[32m" #define KYEL "\x1B[33m" #define KBLU "\x1B[34m" #define KMAG "\x1B[35m" #define KCYN "\x1B[36m" #define KWHT "\x1B[37m" int main() { printf("%sred\n", KRED); printf("%sgreen\n", KGRN); printf("%syellow\n", KYEL); printf("%sblue\n", KBLU); printf("%smagenta\n", KMAG); printf("%scyan\n", KCYN); printf("%swhite\n", KWHT); printf("%snormal\n", KNRM); return 0; }
la source
Il s'agit d'une petite fonction qui imprime du texte en couleur à l'aide de scripts bash. Vous pouvez ajouter autant de styles que vous le souhaitez, et même imprimer des onglets et de nouvelles lignes:
#!/bin/bash # prints colored text print_style () { if [ "$2" == "info" ] ; then COLOR="96m"; elif [ "$2" == "success" ] ; then COLOR="92m"; elif [ "$2" == "warning" ] ; then COLOR="93m"; elif [ "$2" == "danger" ] ; then COLOR="91m"; else #default color COLOR="0m"; fi STARTCOLOR="\e[$COLOR"; ENDCOLOR="\e[0m"; printf "$STARTCOLOR%b$ENDCOLOR" "$1"; } print_style "This is a green text " "success"; print_style "This is a yellow text " "warning"; print_style "This is a light blue with a \t tab " "info"; print_style "This is a red text with a \n new line " "danger"; print_style "This has no color";
la source
J'utilise ce code c pour imprimer la sortie de la coque colorée. Le code est basé sur ce post.
//General Formatting #define GEN_FORMAT_RESET "0" #define GEN_FORMAT_BRIGHT "1" #define GEN_FORMAT_DIM "2" #define GEN_FORMAT_UNDERSCORE "3" #define GEN_FORMAT_BLINK "4" #define GEN_FORMAT_REVERSE "5" #define GEN_FORMAT_HIDDEN "6" //Foreground Colors #define FOREGROUND_COL_BLACK "30" #define FOREGROUND_COL_RED "31" #define FOREGROUND_COL_GREEN "32" #define FOREGROUND_COL_YELLOW "33" #define FOREGROUND_COL_BLUE "34" #define FOREGROUND_COL_MAGENTA "35" #define FOREGROUND_COL_CYAN "36" #define FOREGROUND_COL_WHITE "37" //Background Colors #define BACKGROUND_COL_BLACK "40" #define BACKGROUND_COL_RED "41" #define BACKGROUND_COL_GREEN "42" #define BACKGROUND_COL_YELLOW "43" #define BACKGROUND_COL_BLUE "44" #define BACKGROUND_COL_MAGENTA "45" #define BACKGROUND_COL_CYAN "46" #define BACKGROUND_COL_WHITE "47" #define SHELL_COLOR_ESCAPE_SEQ(X) "\x1b["X"m" #define SHELL_FORMAT_RESET ANSI_COLOR_ESCAPE_SEQ(GEN_FORMAT_RESET) int main(int argc, char* argv[]) { //The long way fputs(SHELL_COLOR_ESCAPE_SEQ(GEN_FORMAT_DIM";"FOREGROUND_COL_YELLOW), stdout); fputs("Text in gold\n", stdout); fputs(SHELL_FORMAT_RESET, stdout); fputs("Text in default color\n", stdout); //The short way fputs(SHELL_COLOR_ESCAPE_SEQ(GEN_FORMAT_DIM";"FOREGROUND_COL_YELLOW)"Text in gold\n"SHELL_FORMAT_RESET"Text in default color\n", stdout); return 0; }
la source
man printf.1
a une note en bas: "... votre shell peut avoir sa propre version deprintf
...". Cette question est baliséebash
, mais si c'est possible, j'essaye d'écrire des scripts portables sur n'importe quel shell.dash
est généralement une bonne base minimum pour la portabilité - donc la réponse fonctionne icibash
,dash
, &zsh
. Si un script fonctionne dans ces 3, il est très probable qu'il soit portable à peu près n'importe où.La dernière implémentation de
printf
indash
[1] ne colorise pas la sortie étant donné un%s
spécificateur de format avec un caractère d'échappement ANSI\e
- mais, un spécificateur de format%b
combiné avec octal\033
(équivalent à un ASCIIESC
) fera le travail. Veuillez commenter les valeurs aberrantes, mais AFAIK, tous les shells ont été implémentésprintf
pour utiliser le sous-ensemble octal ASCII au strict minimum.Au titre de la question "Utiliser les couleurs avec printf", le plus portable de définir le formatage est de combiner le
%b
spécificateur de format pourprintf
(comme indiqué dans une réponse précédente de @Vlad) avec un échappement octal\033
.portable-color.sh
#/bin/sh P="\033[" BLUE=34 printf "-> This is %s %-6s %s text \n" $P"1;"$BLUE"m" "blue" $P"0m" printf "-> This is %b %-6s %b text \n" $P"1;"$BLUE"m" "blue" $P"0m"
Les sorties:
... et «bleu» est bleu sur la deuxième ligne.
Le
%-6s
spécificateur de format de l'OP se trouve au milieu de la chaîne de format entre les séquences de caractères de contrôle d'ouverture et de fermeture.[1] Réf:
man dash
Section "Builtins" :: "printf" :: "Format"la source
#include <stdio.h> //fonts color #define FBLACK "\033[30;" #define FRED "\033[31;" #define FGREEN "\033[32;" #define FYELLOW "\033[33;" #define FBLUE "\033[34;" #define FPURPLE "\033[35;" #define D_FGREEN "\033[6;" #define FWHITE "\033[7;" #define FCYAN "\x1b[36m" //background color #define BBLACK "40m" #define BRED "41m" #define BGREEN "42m" #define BYELLOW "43m" #define BBLUE "44m" #define BPURPLE "45m" #define D_BGREEN "46m" #define BWHITE "47m" //end color #define NONE "\033[0m" int main(int argc, char *argv[]) { printf(D_FGREEN BBLUE"Change color!\n"NONE); return 0; }
la source