130 votes

Utilisation des couleurs avec printf

Lorsqu'il est écrit comme ceci, il sort du texte en bleu :

printf "\e[1;34mThis is a blue text.\e[0m"

Mais je veux avoir le format 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 du 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.

213voto

SiegeX Points 32614

Plutôt que d'utiliser des codes de terminaux archaïques, puis-je suggérer l'alternative suivante. Non seulement il fournit un code plus lisible, mais il vous permet également de garder les informations de couleur séparées des spécificateurs de format comme vous l'aviez prévu à l'origine.

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

96voto

geekosaur Points 26170

Vous mélangez les pièces ensemble au lieu de les séparer proprement.

printf '\e[1;34m%-6s\e[m' "This is text"

Fondamentalement, mettez les choses fixes dans le format et les choses variables dans les paramètres.

49voto

Vlad Points 23480

Cela fonctionne pour moi :

printf "%b" "\e[1;34mThis is a blue text.\e[0m"

De printf(1) :

%b     ARGUMENT as a string with '\' escapes interpreted, except that octal
       escapes are of the form \0 or \0NNN

28voto

Kritpal Singh Points 429

C'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;
}

25voto

Arian Acosta Points 1796

Il s'agit d'une petite fonction qui imprime du texte coloré à 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";

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