GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Wie gebe ich farbigen Text auf einem Linux-Terminal aus?

Sie müssen ANSI-Farbcodes ausgeben. Beachten Sie, dass dies nicht von allen Terminals unterstützt wird; Wenn Farbsequenzen nicht unterstützt werden, wird Müll angezeigt.

Beispiel:

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

Hier, \033 ist das ESC-Zeichen, ASCII 27. Es folgt [ , dann null oder mehr Zahlen, getrennt durch ; , und schließlich der Buchstabe m . Die Zahlen beschreiben die Farbe und das Format, zu denen ab diesem Zeitpunkt gewechselt werden soll.

Die Codes für Vorder- und Hintergrundfarben sind:

         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

Zusätzlich können Sie diese verwenden:

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

Weitere, weniger weit verbreitete Codes finden Sie in der Tabelle auf Wikipedia.

Um festzustellen, ob Ihr Terminal Farbsequenzen unterstützt, lesen Sie den Wert von TERM Umgebungsvariable. Es sollte den jeweils verwendeten Terminaltyp angeben (z. B. vt100 , gnome-terminal , xterm , screen , ...). Schlagen Sie das dann in der terminfo-Datenbank nach; Überprüfen Sie die colors Fähigkeit.


Bevor Sie eine Farbe ausgeben, stellen Sie sicher, dass Sie sich in einem Terminal befinden:

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

Dann müssen Sie die Terminalfähigkeit überprüfen, ob sie Farbe unterstützt

auf Systemen mit terminfo (Linux-basiert) Sie können die Menge der unterstützten Farben als

erhalten
Number_Of_colors_Supported=$(tput colors)

auf Systemen mit termcap (BSD-basiert) Sie können die Menge der unterstützten Farben als

erhalten
Number_Of_colors_Supported=$(tput Co)

Treffen Sie dann Ihre Entscheidung:

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

Übrigens, verwenden Sie keine Farbgebung, wie sie zuvor mit ESC-Zeichen vorgeschlagen wurde. Verwenden Sie die Standardfunktion zum Aufrufen des Terminals, die Ihnen die KORREKTEN Farben zuweist, die dieses bestimmte Terminal unterstützt.

BSD-basiert
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-basiert
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)"
Verwenden Sie As
echo -e "${fg_red}  Red  ${fg_green} Bull ${reset}"

Grundlagen

Ich habe eine C++-Klasse geschrieben, die verwendet werden kann, um die Vorder- und Hintergrundfarbe der Ausgabe festzulegen. Dieses Beispielprogramm dient als Beispiel für das Drucken von This ->word<- is red. und so formatieren, dass die Vordergrundfarbe word ist ist rot.

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

Quelle

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

Erweitert

Möglicherweise möchten Sie der Klasse zusätzliche Funktionen hinzufügen. Es ist beispielsweise möglich, die Farbe Magenta und sogar Stile wie fett hinzuzufügen . Dazu genügt ein weiterer Eintrag unter Code Aufzählung. Dies ist eine gute Referenz.


Linux
  1. So fügen Sie unter Linux Text an das Dateiende an

  2. So weisen Sie einer Variablen die Ausgabe eines Linux-Befehls zu

  3. So speichern Sie die Befehlsausgabe in einer Datei unter Linux

  4. Wie entscheidet ein Programm, ob es eine farbige Ausgabe haben soll oder nicht?

  5. in der Linux-Konsole, wie man die Ausgabe NICHT umschließt

So öffnen Sie ein Linux-Terminalfenster

So speichern Sie die Ausgabe des Befehls in einer Datei mit dem Linux-Terminal

So vergleichen Sie zwei Dateien im Linux-Terminal

So öffnen Sie eine PDF-Datei im Linux-Terminal

Bash-Skripting:So geben Sie Text in der Linux-Shell aus und formatieren ihn

Textterminal-Hardware (für Linux)