GNU/Linux >> Belajar Linux >  >> Linux

Bagaimana cara menampilkan teks berwarna ke terminal Linux?

Anda perlu menampilkan kode warna ANSI. Perhatikan bahwa tidak semua terminal mendukung ini; jika urutan warna tidak didukung, sampah akan muncul.

Contoh:

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

Di sini, \033 adalah karakter ESC, ASCII 27. Diikuti dengan [ , lalu nol angka atau lebih yang dipisahkan oleh ; , dan terakhir huruf m . Angka-angka menjelaskan warna dan format untuk beralih dari titik itu dan seterusnya.

Kode untuk warna latar depan dan latar belakang adalah:

         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

Selain itu, Anda dapat menggunakan ini:

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

Lihat tabel di Wikipedia untuk kode lain yang kurang didukung secara luas.

Untuk menentukan apakah terminal Anda mendukung rangkaian warna, baca nilai TERM variabel lingkungan. Itu harus menentukan jenis terminal tertentu yang digunakan (mis. vt100 , gnome-terminal , xterm , screen , ...). Kemudian cari di database terminfo; centang colors kemampuan.


Sebelum Anda menampilkan warna apa pun yang Anda butuhkan, pastikan Anda berada di terminal:

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

Maka Anda perlu memeriksa kemampuan terminal jika mendukung warna

pada sistem dengan terminfo (berbasis Linux) Anda dapat memperoleh jumlah warna yang didukung sebagai

Number_Of_colors_Supported=$(tput colors)

pada sistem dengan termcap (berbasis BSD) Anda dapat memperoleh jumlah warna yang didukung sebagai

Number_Of_colors_Supported=$(tput Co)

Kemudian buat keputusan Anda:

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

BTW, jangan gunakan pewarnaan seperti yang disarankan sebelumnya dengan karakter ESC.Gunakan kemampuan standar panggilan ke terminal yang akan memberi Anda warna BENAR yang didukung oleh terminal tertentu.

Berbasis 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)"
Berbasis 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)"
Gunakan Sebagai
echo -e "${fg_red}  Red  ${fg_green} Bull ${reset}"

Dasar-dasar

Saya telah menulis kelas C++ yang dapat digunakan untuk mengatur warna latar depan dan latar belakang keluaran. Contoh program ini berfungsi sebagai contoh pencetakan This ->word<- is red. dan memformatnya sehingga warna latar depan word berwarna merah.

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

Sumber

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

Lanjutan

Anda mungkin ingin menambahkan fitur tambahan ke kelas. Misalnya, dimungkinkan untuk menambahkan warna magenta dan bahkan gaya seperti huruf tebal . Untuk melakukan ini, cukup masukan lagi ke Code pencacahan. Ini referensi yang bagus.


Linux
  1. Cara Menambahkan Teks ke Akhir File di Linux

  2. bagaimana cara memeriksa versi linux X11?

  3. Cara mengedit file teks di terminal saya

  1. Cara Menetapkan Output dari Perintah Linux ke Variabel

  2. Cara Menyimpan Output Perintah ke File di Linux

  3. Bagaimana Suatu Program Memutuskan Apakah Memiliki Output Berwarna atau Tidak?

  1. Bagaimana cara merekam sesi terminal Anda di Linux

  2. Bagaimana cara menggunakan vi untuk mengedit perintah di terminal di Linux?

  3. di konsol linux, cara TIDAK membungkus keluaran