GNU/Linux >> Tutoriales Linux >  >> Linux

¿Cómo envío texto en color a una terminal Linux?

Necesita generar códigos de color ANSI. Tenga en cuenta que no todos los terminales admiten esto; si las secuencias de colores no son compatibles, aparecerá basura.

Ejemplo:

 cout << "\033[1;31mbold red text\033[0m\n";

Aquí, \033 es el carácter ESC, ASCII 27. Le sigue [ , luego cero o más números separados por ; , y finalmente la letra m . Los números describen el color y el formato para cambiar a partir de ese punto.

Los códigos para los colores de primer plano y de fondo son:

         foreground background
black        30         40
red          31         41
green        32         42
yellow       33         43
blue         34         44
magenta      35         45
cyan         36         46
white        37         47

Además, puede utilizar estos:

reset             0  (everything back to normal)
bold/bright       1  (often a brighter shade of the same colour)
underline         4
inverse           7  (swap foreground and background colours)
bold/bright off  21
underline off    24
inverse off      27

Consulte la tabla en Wikipedia para conocer otros códigos menos compatibles.

Para determinar si su terminal admite secuencias de colores, lea el valor del TERM Variable ambiental. Debe especificar el tipo de terminal particular utilizado (por ejemplo, vt100 , gnome-terminal , xterm , screen , ...). Luego busque eso en la base de datos terminfo; revisa el colors capacidad.


Antes de imprimir cualquier color, asegúrese de estar en una terminal:

[ -t 1 ] && echo 'Yes I am in a terminal'  # isatty(3) call in C

Luego, debe verificar la capacidad del terminal si admite color

en sistemas con terminfo (basado en Linux) puede obtener la cantidad de colores admitidos como

Number_Of_colors_Supported=$(tput colors)

en sistemas con termcap (basado en BSD) puede obtener la cantidad de colores admitidos como

Number_Of_colors_Supported=$(tput Co)

Entonces toma tu decisión:

[ ${Number_Of_colors_Supported} -ge 8 ] && {
    echo 'You are fine and can print colors'
} || {
    echo 'Terminal does not support color'
}

Por cierto, no use colores como se sugirió antes con los caracteres ESC. Use la capacidad estándar de llamada a terminal que le asignará los colores CORRECTOS que admite el terminal en particular.

Basado en BSD
fg_black="$(tput AF 0)"
fg_red="$(tput AF 1)"
fg_green="$(tput AF 2)"
fg_yellow="$(tput AF 3)"
fg_blue="$(tput AF 4)"
fg_magenta="$(tput AF 5)"
fg_cyan="$(tput AF 6)"
fg_white="$(tput AF 7)"
reset="$(tput me)"
Basado en Linux
fg_black="$(tput setaf 0)"
fg_red="$(tput setaf 1)"
fg_green="$(tput setaf 2)"
fg_yellow="$(tput setaf 3)"
fg_blue="$(tput setaf 4)"
fg_magenta="$(tput setaf 5)"
fg_cyan="$(tput setaf 6)"
fg_white="$(tput setaf 7)"
reset="$(tput sgr0)"
Usar como
echo -e "${fg_red}  Red  ${fg_green} Bull ${reset}"

Conceptos básicos

He escrito una clase de C++ que se puede usar para establecer el color de fondo y de primer plano de la salida. Este programa de muestra sirve como ejemplo de cómo imprimir This ->word<- is red. y formateándolo para que el color de primer plano de word es rojo.

#include "colormod.h" // namespace Color
#include <iostream>
using namespace std;
int main() {
    Color::Modifier red(Color::FG_RED);
    Color::Modifier def(Color::FG_DEFAULT);
    cout << "This ->" << red << "word" << def << "<- is red." << endl;
}

Fuente

#include <ostream>
namespace Color {
    enum Code {
        FG_RED      = 31,
        FG_GREEN    = 32,
        FG_BLUE     = 34,
        FG_DEFAULT  = 39,
        BG_RED      = 41,
        BG_GREEN    = 42,
        BG_BLUE     = 44,
        BG_DEFAULT  = 49
    };
    class Modifier {
        Code code;
    public:
        Modifier(Code pCode) : code(pCode) {}
        friend std::ostream&
        operator<<(std::ostream& os, const Modifier& mod) {
            return os << "\033[" << mod.code << "m";
        }
    };
}

Avanzado

Es posible que desee agregar funciones adicionales a la clase. Es posible, por ejemplo, añadir el color magenta e incluso estilos como negrita . Para hacer esto, basta con otra entrada al Code enumeración. Esta es una buena referencia.


Linux
  1. Cómo agregar texto al final del archivo en Linux

  2. Cómo asignar la salida de un comando de Linux a una variable

  3. Cómo guardar la salida del comando en un archivo en Linux

  4. ¿Cómo usar vi para editar un comando en la terminal en Linux?

  5. en la consola de Linux, cómo NO envolver la salida

Cómo abrir una ventana de terminal de Linux

Cómo guardar la salida del comando en un archivo usando la terminal de Linux

Cómo comparar dos archivos en la terminal de Linux

Cómo abrir un PDF en la terminal de Linux

Bash Scripting:cómo generar y formatear texto en Linux Shell

Hardware de terminal de texto (para Linux)