GNU/Linux >> Znalost Linux >  >> Linux

Jak vytisknu barevný text do terminálu Linux?

Musíte zadat barevné kódy ANSI. Všimněte si, že ne všechny terminály to podporují; pokud barevné sekvence nejsou podporovány, objeví se nesmysl.

Příklad:

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

Zde \033 je znak ESC, ASCII 27. Za ním následuje [ , pak nula nebo více čísel oddělených ; a nakonec písmeno m . Čísla popisují barvu a formát, na který se od tohoto okamžiku přepne.

Kódy pro barvy popředí a pozadí jsou:

         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

Kromě toho můžete použít tyto:

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

Další, méně podporované kódy naleznete v tabulce na Wikipedii.

Chcete-li zjistit, zda váš terminál podporuje barevné sekvence, přečtěte si hodnotu TERM proměnná prostředí. Mělo by specifikovat konkrétní použitý typ terminálu (např. vt100 , gnome-terminal , xterm , screen , ...). Pak to vyhledejte v databázi terminfo; zkontrolujte colors schopnosti.


Než se pustíte do výstupu jakékoli barvy, musíte se ujistit, že jste v terminálu:

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

Poté musíte zkontrolovat kapacitu terminálu, zda podporuje barvu

na systémech s terminfo (založeno na Linuxu) množství podporovaných barev můžete získat jako

Number_Of_colors_Supported=$(tput colors)

na systémech s termcap (na základě BSD) množství podporovaných barev můžete získat jako

Number_Of_colors_Supported=$(tput Co)

Pak se rozhodněte:

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

BTW, nepoužívejte barvení, jak bylo navrženo dříve u znaků ESC. Použijte standardní funkci volání do terminálu, která vám přiřadí SPRÁVNÉ barvy, které konkrétní terminál podporuje.

Na základě 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)"
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)"
Použít jako
echo -e "${fg_red}  Red  ${fg_green} Bull ${reset}"

Základy

Napsal jsem třídu C++, kterou lze použít k nastavení barvy popředí a pozadí výstupu. Tento ukázkový program slouží jako příklad tisku This ->word<- is red. a jeho formátování tak, aby barva popředí byla word je červená.

#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;
}

Zdroj

#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";
        }
    };
}

Pokročilé

Možná budete chtít do třídy přidat další funkce. Je například možné přidat barvu purpurovou a dokonce i styly jako tučné písmo . Chcete-li to provést, stačí další záznam do Code výčet. Toto je dobrá reference.


Linux
  1. Jak přidat text na konec souboru v Linuxu

  2. Jak přiřadit výstup příkazu Linux k proměnné

  3. jak zkontrolovat verzi linux X11?

  1. Jak uložit výstup příkazu do souboru v Linuxu

  2. Jak se program rozhodne, zda bude či nebude mít barevný výstup?

  3. Jak používat vi k úpravě příkazu v terminálu na Linuxu?

  1. Jak zaznamenat relaci terminálu v systému Linux

  2. Jak upravit textový soubor v mém terminálu

  3. v linuxové konzoli, jak NEzabalit výstup