GNU/Linux >> Tutoriales Linux >  >> Linux

Salida de color del programa ejecutado bajo BASH

La mayoría de los terminales respetan las secuencias de colores ASCII. Funcionan generando ESC , seguido de [ , luego una lista de valores de color separados por punto y coma, luego m . Estos son valores comunes:

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

Así que sacando "\033[31;47m" debe hacer que el color frontal (texto) de la terminal sea rojo y el color de fondo blanco.

Puede envolverlo muy bien en forma de 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";
}

Aquí hay una versión del código anterior de @nightcracker, usando stringstream en lugar de itoa . (Esto se ejecuta con 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;
}

Es posible que desee ver los códigos de control de VT100.


Linux
  1. ¿Cómo redirigir la salida de un programa a un archivo zip?

  2. ¿Cerrar la salida estándar (>&-)?

  3. ¿Ejecutar un programa Gui al inicio?

  4. Cómo ejecutar el proceso Rsync en segundo plano

  5. Ejecutar proceso con salida en tiempo real en PHP

Bash:escribir en archivo

Cómo ejecutar comandos de Linux en segundo plano

Cómo ejecutar un script Bash

¿Soluciones de virtualización bajo OpenBSD?

Maneras brillantes de cómo ejecutar un programa en Linux

Cómo escribir y ejecutar un programa C en Linux