GNU/Linux >> Tutoriels Linux >  >> Linux

Sortie couleur du programme exécuté sous BASH

La plupart des terminaux respectent les séquences de couleurs ASCII. Ils fonctionnent en affichant ESC , suivi de [ , puis une liste de valeurs de couleur séparées par des points-virgules, puis m . Ce sont des valeurs communes :

Special
0  Reset all attributes
1  Bright
2  Dim
4  Underscore   
5  Blink
7  Reverse
8  Hidden

Foreground colors
30  Black
31  Red
32  Green
33  Yellow
34  Blue
35  Magenta
36  Cyan
37  White

Background colors
40  Black
41  Red
42  Green
43  Yellow
44  Blue
45  Magenta
46  Cyan
47  White

Donc sortie "\033[31;47m" devrait rendre le terminal avant (texte) de couleur rouge et la couleur d'arrière-plan blanche.

Vous pouvez bien l'envelopper dans un formulaire C++ :

enum Color {
    NONE = 0,
    BLACK, RED, GREEN,
    YELLOW, BLUE, MAGENTA,
    CYAN, WHITE
}

std::string set_color(Color foreground = 0, Color background = 0) {
    char num_s[3];
    std::string s = "\033[";

    if (!foreground && ! background) s += "0"; // reset colors if no params

    if (foreground) {
        itoa(29 + foreground, num_s, 10);
        s += num_s;

        if (background) s += ";";
    }

    if (background) {
        itoa(39 + background, num_s, 10);
        s += num_s;
    }

    return s + "m";
}

Voici une version du code ci-dessus de @nightcracker, utilisant stringstream au lieu de itoa . (Cela fonctionne avec clang++, C++11, OS X 10.7, iTerm2, bash)

#include <iostream>
#include <string>
#include <sstream>

enum Color
{
    NONE = 0,
    BLACK, RED, GREEN,
    YELLOW, BLUE, MAGENTA,
    CYAN, WHITE
};

static std::string set_color(Color foreground = NONE, Color background = NONE)
{
    std::stringstream s;
    s << "\033[";
    if (!foreground && ! background){
        s << "0"; // reset colors if no params
    }
    if (foreground) {
        s << 29 + foreground;
        if (background) s << ";";
    }
    if (background) {
        s << 39 + background;
    }
    s << "m";
    return s.str();
}

int main(int agrc, char* argv[])
{
    std::cout << "These words should be colored [ " <<
        set_color(RED) << "red " <<
        set_color(GREEN) << "green " <<
        set_color(BLUE) << "blue" <<
        set_color() <<  " ]" << 
        std::endl;
    return EXIT_SUCCESS;
}

Vous voudrez peut-être consulter les codes de contrôle VT100.


Linux
  1. Comment exécuter le processus Rsync en arrière-plan

  2. Exécuter le processus avec une sortie en temps réel en PHP

  3. Exécuter un programme java en backend

  4. Exécuter le script bash en tant que démon

  5. Exécutez la commande bash sur le pipeline jenkins

Bash :Écrire dans un fichier

Comment exécuter des commandes Linux en arrière-plan

Comment exécuter un script bash

Brilliant Ways sur la façon d'exécuter un programme sous Linux

Comment écrire et exécuter un programme C sous Linux

Exécuter le script bash après la connexion