pengembangan-web-mp-pd.com

Cara mengubah warna keluaran gema di Linux

Saya mencoba untuk mencetak teks di terminal menggunakan perintah gema.

Saya ingin mencetak teks dalam warna merah. Bagaimana saya bisa melakukan itu?

1399
satheesh.droid

Anda dapat menggunakan kode pelarian ANSI ini :

Black        0;30     Dark Gray     1;30
Red          0;31     Light Red     1;31
Green        0;32     Light Green   1;32
Brown/Orange 0;33     Yellow        1;33
Blue         0;34     Light Blue    1;34
Purple       0;35     Light Purple  1;35
Cyan         0;36     Light Cyan    1;36
Light Gray   0;37     White         1;37

Dan kemudian gunakan seperti ini di skrip Anda:

#    .---------- constant part!
#    vvvv vvvv-- the code from above
RED='\033[0;31m'
NC='\033[0m' # No Color
printf "I ${RED}love${NC} Stack Overflow\n"

yang mencetak love dengan warna merah.

Dari komentar @ james-lim, jika Anda menggunakan perintah echo, pastikan untuk menggunakan flag -e untuk mengizinkan backslash lolos .

# Continued from above example
echo -e "I ${RED}love${NC} Stack Overflow"

(jangan tambahkan "\n" saat menggunakan gema kecuali jika Anda ingin menambahkan baris kosong tambahan)

1885
Tobias

Anda dapat menggunakan perintah tput yang mengagumkan (disarankan di Jawaban Ignacio ) untuk menghasilkan kode kontrol terminal untuk semua jenis hal.


Pemakaian

Sub-perintah tput khusus dibahas kemudian.

Langsung

Panggil tput sebagai bagian dari urutan perintah:

tput setaf 1; echo "this is red text"

Gunakan ; alih-alih && jadi jika tput kesalahan masih ditampilkan teks.

Variabel shell

Pilihan lain adalah menggunakan variabel Shell:

red=`tput setaf 1`
green=`tput setaf 2`
reset=`tput sgr0`
echo "${red}red text ${green}green text${reset}"

tput menghasilkan urutan karakter yang ditafsirkan oleh terminal sebagai memiliki makna khusus. Mereka tidak akan ditampilkan sendiri. Perhatikan bahwa mereka masih dapat disimpan ke dalam file atau diproses sebagai input oleh program selain terminal.

Substitusi perintah

Mungkin lebih mudah untuk memasukkan keluaran tput langsung ke string echo Anda menggunakan substitusi perintah :

echo "$(tput setaf 1)Red text $(tput setab 7)and white background$(tput sgr 0)"

Contoh

Perintah di atas menghasilkan ini di Ubuntu:

Screenshot of colour terminal text


Perintah warna latar depan & latar belakang

tput setab [1-7] # Set the background colour using ANSI escape
tput setaf [1-7] # Set the foreground colour using ANSI escape

Warna adalah sebagai berikut:

Num  Colour    #define         R G B

0    black     COLOR_BLACK     0,0,0
1    red       COLOR_RED       1,0,0
2    green     COLOR_GREEN     0,1,0
3    yellow    COLOR_YELLOW    1,1,0
4    blue      COLOR_BLUE      0,0,1
5    Magenta   COLOR_Magenta   1,0,1
6    cyan      COLOR_CYAN      0,1,1
7    white     COLOR_WHITE     1,1,1

Ada juga versi non-ANSI dari fungsi pengaturan warna (setb bukannya setab, dan setf bukannya setaf) yang menggunakan angka berbeda, tidak diberikan di sini.

Perintah mode teks

tput bold    # Select bold mode
tput dim     # Select dim (half-bright) mode
tput smul    # Enable underline mode
tput rmul    # Disable underline mode
tput rev     # Turn on reverse video mode
tput smso    # Enter standout (bold) mode
tput rmso    # Exit standout mode

Perintah pergerakan kursor

tput cup Y X # Move cursor to screen postion X,Y (top left is 0,0)
tput cuf N   # Move N characters forward (right)
tput cub N   # Move N characters back (left)
tput cuu N   # Move N lines up
tput ll      # Move to last line, first column (if no cup)
tput sc      # Save the cursor position
tput rc      # Restore the cursor position
tput lines   # Output the number of lines of the terminal
tput cols    # Output the number of columns of the terminal

Hapus dan masukkan perintah

tput ech N   # Erase N characters
tput clear   # Clear screen and move the cursor to 0,0
tput el 1    # Clear to beginning of line
tput el      # Clear to end of line
tput ed      # Clear to end of screen
tput ich N   # Insert N characters (moves rest of line forward!)
tput il N    # Insert N lines

Perintah lain

tput sgr0    # Reset text format to the terminal's default
tput bel     # Play a bell

Dengan compiz goyangan windows , perintah bel membuat terminal goyah selama sedetik untuk menarik perhatian pengguna.


Skrip

tput menerima skrip yang berisi satu perintah per baris, yang dieksekusi secara berurutan sebelum tput keluar.

Hindari file sementara dengan menggemakan string multiline dan memipangnya:

echo -e "setf 7\nsetb 1" | tput -S  # set fg white and bg red

Lihat juga

  • Lihat man 1 tput
  • Lihat man 5 terminfo untuk daftar lengkap perintah dan detail lebih lanjut tentang opsi ini. (Perintah tput yang sesuai tercantum di kolom Cap-name pada tabel besar yang dimulai pada baris 81.)
810
Drew Noakes

beberapa variabel yang dapat Anda gunakan:

# Reset
Color_Off='\033[0m'       # Text Reset

# Regular Colors
Black='\033[0;30m'        # Black
Red='\033[0;31m'          # Red
Green='\033[0;32m'        # Green
Yellow='\033[0;33m'       # Yellow
Blue='\033[0;34m'         # Blue
Purple='\033[0;35m'       # Purple
Cyan='\033[0;36m'         # Cyan
White='\033[0;37m'        # White

# Bold
BBlack='\033[1;30m'       # Black
BRed='\033[1;31m'         # Red
BGreen='\033[1;32m'       # Green
BYellow='\033[1;33m'      # Yellow
BBlue='\033[1;34m'        # Blue
BPurple='\033[1;35m'      # Purple
BCyan='\033[1;36m'        # Cyan
BWhite='\033[1;37m'       # White

# Underline
UBlack='\033[4;30m'       # Black
URed='\033[4;31m'         # Red
UGreen='\033[4;32m'       # Green
UYellow='\033[4;33m'      # Yellow
UBlue='\033[4;34m'        # Blue
UPurple='\033[4;35m'      # Purple
UCyan='\033[4;36m'        # Cyan
UWhite='\033[4;37m'       # White

# Background
On_Black='\033[40m'       # Black
On_Red='\033[41m'         # Red
On_Green='\033[42m'       # Green
On_Yellow='\033[43m'      # Yellow
On_Blue='\033[44m'        # Blue
On_Purple='\033[45m'      # Purple
On_Cyan='\033[46m'        # Cyan
On_White='\033[47m'       # White

# High Intensity
IBlack='\033[0;90m'       # Black
IRed='\033[0;91m'         # Red
IGreen='\033[0;92m'       # Green
IYellow='\033[0;93m'      # Yellow
IBlue='\033[0;94m'        # Blue
IPurple='\033[0;95m'      # Purple
ICyan='\033[0;96m'        # Cyan
IWhite='\033[0;97m'       # White

# Bold High Intensity
BIBlack='\033[1;90m'      # Black
BIRed='\033[1;91m'        # Red
BIGreen='\033[1;92m'      # Green
BIYellow='\033[1;93m'     # Yellow
BIBlue='\033[1;94m'       # Blue
BIPurple='\033[1;95m'     # Purple
BICyan='\033[1;96m'       # Cyan
BIWhite='\033[1;97m'      # White

# High Intensity backgrounds
On_IBlack='\033[0;100m'   # Black
On_IRed='\033[0;101m'     # Red
On_IGreen='\033[0;102m'   # Green
On_IYellow='\033[0;103m'  # Yellow
On_IBlue='\033[0;104m'    # Blue
On_IPurple='\033[0;105m'  # Purple
On_ICyan='\033[0;106m'    # Cyan
On_IWhite='\033[0;107m'   # White

karakter pelarian di bash , hex dan oktal masing-masing:

|       | bash  | hex    | octal   | NOTE                         |
|-------+-------+--------+---------+------------------------------|
| start | \e    | \x1b   | \033    |                              |
| start | \E    | \x1B   | -       | x cannot be capital          |
| end   | \e[0m | \x1m0m | \033[0m |                              |
| end   | \e[m  | \x1b[m | \033[m  | 0 is appended if you omit it |
|       |       |        |         |                              |

contoh singkat:

| color       | bash         | hex            | octal          | NOTE                                  |
|-------------+--------------+----------------+----------------+---------------------------------------|
| start green | \e[32m<text> | \x1b[32m<text> | \033[32m<text> | m is NOT optional                     |
| reset       | <text>\e[0m  | <text>\1xb[0m  | <text>\033[om  | o is optional (do it as best practice |
|             |              |                |                |                                       |

kecuali bash:

Jika Anda akan menggunakan kode ini di variabel bash khusus

  • PS0
  • PS1
  • PS2 (= ini untuk bisikan)
  • PS4

anda harus menambahkan karakter pelarian tambahan agar bash dapat menafsirkannya dengan benar. Tanpa menambahkan karakter pelarian tambahan ini berfungsi, tetapi Anda akan menghadapi masalah ketika Anda menggunakan Ctrl + r untuk pencarian dalam riwayat Anda.

aturan pengecualian untuk bash

Anda harus menambahkan \[ sebelum memulai kode ANSI dan menambahkan \] setelah yang berakhir.
Contoh:
dalam penggunaan reguler: \033[32mThis is in green\033[0m
untuk PS0/1/2/4: \[\033[32m\]This is in green\[\033[m\]

\[ adalah untuk memulai urutan tidak dapat dicetak karakter
\] adalah untuk akhir dari urutan tidak dapat dicetak karakter

Kiat: untuk menghafalnya, pertama-tama Anda dapat menambahkan \[\] dan kemudian memasukkan kode ANSI Anda di antaranya:
- \[start-ANSI-code\]
- \[end-ANSI-code\]

jenis urutan warna:

  1. 3/4 bit
  2. 8 bit
  3. 24 bit

Sebelum menyelam ke warna-warna ini, Anda harus tahu tentang 4 mode dengan kode-kode ini:

1. mode warna

Ini memodifikasi gaya warna BUKAN teks. Misalnya membuat warna cerah atau lebih gelap.

  • 0 ulang
  • 1; lebih ringan dari biasanya
  • 2; lebih gelap dari biasanya

Mode ini tidak didukung secara luas. Ini sepenuhnya mendukung pada Gnome-Terminal.

2. mode teks

Mode ini untuk memodifikasi gaya teks BUKAN warna.

  • 3; italic
  • 4; menggarisbawahi
  • 5; berkedip (lambat)
  • 6; berkedip (cepat)
  • 7; mundur
  • 8; sembunyikan
  • 9; dicoret

dan hampir didukung.
Misalnya, KDE-Konsole mendukung 5; tetapi Gnome-Terminal tidak dan Gnome mendukung 8; tetapi KDE tidak.

3. mode latar depan

Mode ini untuk mewarnai latar depan.

4. mode latar belakang

Mode ini untuk mewarnai latar belakang.

Tabel di bawah ini menunjukkan ringkasan dari 3/4 bit versi ANSI-color

|------------+----------+---------+-------+------------------+------------------------------+--------------------------------------|
| color-mode | octal    | hex     | bash  | description      | example (= in octal)         | NOTE                                 |
|------------+----------+---------+-------+------------------+------------------------------+--------------------------------------|
|          0 | \033[0m  | \x1b[0m | \e[0m | reset any affect | echo -e "\033[0m"            | 0m equals to m                       |
|          1 | \033[1m  |         |       | light (= bright) | echo -e "\033[1m####\033[m"  | -                                    |
|          2 | \033[2m  |         |       | dark (= fade)    | echo -e "\033[2m####\033[m"  | -                                    |
|------------+----------+---------+-------+------------------+------------------------------+--------------------------------------|
|  text-mode | ~        |         |       | ~                | ~                            | ~                                    |
|------------+----------+---------+-------+------------------+------------------------------+--------------------------------------|
|          3 | \033[3m  |         |       | italic           | echo -e "\033[3m####\033[m"  |                                      |
|          4 | \033[4m  |         |       | underline        | echo -e "\033[4m####\033[m"  |                                      |
|          5 | \033[5m  |         |       | blink (slow)     | echo -e "\033[3m####\033[m"  |                                      |
|          6 | \033[6m  |         |       | blink (fast)     | ?                            | not wildly support                   |
|          7 | \003[7m  |         |       | reverse          | echo -e "\033[7m####\033[m"  | it affects the background/foreground |
|          8 | \033[8m  |         |       | hide             | echo -e "\033[8m####\033[m"  | it affects the background/foreground |
|          9 | \033[9m  |         |       | cross            | echo -e "\033[9m####\033[m"  |                                      |
|------------+----------+---------+-------+------------------+------------------------------+--------------------------------------|
| foreground | ~        |         |       | ~                | ~                            | ~                                    |
|------------+----------+---------+-------+------------------+------------------------------+--------------------------------------|
|         30 | \033[30m |         |       | black            | echo -e "\033[30m####\033[m" |                                      |
|         31 | \033[31m |         |       | red              | echo -e "\033[31m####\033[m" |                                      |
|         32 | \033[32m |         |       | green            | echo -e "\033[32m####\033[m" |                                      |
|         33 | \033[32m |         |       | yellow           | echo -e "\033[33m####\033[m" |                                      |
|         34 | \033[32m |         |       | blue             | echo -e "\033[34m####\033[m" |                                      |
|         35 | \033[32m |         |       | purple           | echo -e "\033[35m####\033[m" | real name: Magenta = reddish-purple  |
|         36 | \033[32m |         |       | cyan             | echo -e "\033[36m####\033[m" |                                      |
|         37 | \033[32m |         |       | white            | echo -e "\033[37m####\033[m" |                                      |
|------------+----------+---------+-------+------------------+------------------------------+--------------------------------------|
|         38 | 8/24     |                    This is for special use of 8-bit or 24-bit                                            |
|------------+----------+---------+-------+------------------+------------------------------+--------------------------------------|
| background | ~        |         |       | ~                | ~                            | ~                                    |
|------------+----------+---------+-------+------------------+------------------------------+--------------------------------------|
|         40 | \033[40m |         |       | black            | echo -e "\033[40m####\033[m" |                                      |
|         41 | \033[41m |         |       | red              | echo -e "\033[41m####\033[m" |                                      |
|         42 | \033[42m |         |       | green            | echo -e "\033[42m####\033[m" |                                      |
|         43 | \033[43m |         |       | yellow           | echo -e "\033[43m####\033[m" |                                      |
|         44 | \033[44m |         |       | blue             | echo -e "\033[44m####\033[m" |                                      |
|         45 | \033[45m |         |       | purple           | echo -e "\033[45m####\033[m" | real name: Magenta = reddish-purple  |
|         46 | \033[46m |         |       | cyan             | echo -e "\033[46m####\033[m" |                                      |
|         47 | \033[47m |         |       | white            | echo -e "\033[47m####\033[m" |                                      |
|------------+----------+---------+-------+------------------+------------------------------+--------------------------------------|
|         48 | 8/24     |                    This is for special use of 8-bit or 24-bit                                            |                                                                                       |
|------------+----------+---------+-------+------------------+------------------------------+--------------------------------------|

Tabel di bawah ini menunjukkan ringkasan dari 8 bit versi ANSI-color

|------------+-----------+-----------+---------+------------------+------------------------------------+-------------------------|
| foreground | octal     | hex       | bash    | description      | example                            | NOTE                    |
|------------+-----------+-----------+---------+------------------+------------------------------------+-------------------------|
|        0-7 | \033[38;5 | \x1b[38;5 | \e[38;5 | standard. normal | echo -e '\033[38;5;1m####\033[m'   |                         |
|       8-15 |           |           |         | standard. light  | echo -e '\033[38;5;9m####\033[m'   |                         |
|     16-231 |           |           |         | more resolution  | echo -e '\033[38;5;45m####\033[m'  | has no specific pattern |
|    232-255 |           |           |         |                  | echo -e '\033[38;5;242m####\033[m' | from black to white     |
|------------+-----------+-----------+---------+------------------+------------------------------------+-------------------------|
| foreground | octal     | hex       | bash    | description      | example                            | NOTE                    |
|------------+-----------+-----------+---------+------------------+------------------------------------+-------------------------|
|        0-7 |           |           |         | standard. normal | echo -e '\033[48;5;1m####\033[m'   |                         |
|       8-15 |           |           |         | standard. light  | echo -e '\033[48;5;9m####\033[m'   |                         |
|     16-231 |           |           |         | more resolution  | echo -e '\033[48;5;45m####\033[m'  |                         |
|    232-255 |           |           |         |                  | echo -e '\033[48;5;242m####\033[m' | from black to white     |
|------------+-----------+-----------+---------+------------------+------------------------------------+-------------------------|

Tes cepat 8-bit:
for code in {0..255}; do echo -e "\e[38;05;${code}m $code: Test"; done

Tabel di bawah ini menunjukkan ringkasan dari 24 bit versi ANSI-color

|------------+-----------+-----------+---------+-------------+------------------------------------------+-----------------|
| foreground | octal     | hex       | bash    | description | example                                  | NOTE            |
|------------+-----------+-----------+---------+-------------+------------------------------------------+-----------------|
|      0-255 | \033[38;2 | \x1b[38;2 | \e[38;2 | R = red     | echo -e '\033[38;2;255;0;02m####\033[m'  | R=255, G=0, B=0 |
|      0-255 | \033[38;2 | \x1b[38;2 | \e[38;2 | G = green   | echo -e '\033[38;2;;0;255;02m####\033[m' | R=0, G=255, B=0 |
|      0-255 | \033[38;2 | \x1b[38;2 | \e[38;2 | B = blue    | echo -e '\033[38;2;0;0;2552m####\033[m'  | R=0, G=0, B=255 |
|------------+-----------+-----------+---------+-------------+------------------------------------------+-----------------|
| background | octal     | hex       | bash    | description | example                                  | NOTE            |
|------------+-----------+-----------+---------+-------------+------------------------------------------+-----------------|
|      0-255 | \033[48;2 | \x1b[48;2 | \e[48;2 | R = red     | echo -e '\033[48;2;255;0;02m####\033[m'  | R=255, G=0, B=0 |
|      0-255 | \033[48;2 | \x1b[48;2 | \e[48;2 | G = green   | echo -e '\033[48;2;;0;255;02m####\033[m' | R=0, G=255, B=0 |
|      0-255 | \033[48;2 | \x1b[48;2 | \e[48;2 | B = blue    | echo -e '\033[48;2;0;0;2552m####\033[m'  | R=0, G=0, B=255 |
|------------+-----------+-----------+---------+-------------+------------------------------------------+-----------------|

beberapa tangkapan layar

foreground ringkasan 8-bit dalam .gif

 foreground.gif

latar belakang ringkasan 8-bit dalam .gif

 background.gif

ringkasan warna dengan nilainya

 enter image description here  enter image description here  enter image description here  enter image description here

blinking di KDE-Terminal

 KDE-blinking

  kode C sederhana yang menunjukkan lebih banyak kepada Anda

 cecho_screenshot

  alat yang lebih canggih yang saya kembangkan untuk menangani warna-warna ini:
 bline


bidikan mode warna

 fade-normal-bright

bidikan mode teks

 only-text-mode

menggabungkan tidak apa-apa

 combine

lebih banyak tembakan


Kiat dan Trik untuk Pengguna dan Pemrogram Lanjut:

Bisakah kita menggunakan kode-kode ini dalam bahasa pemrograman?

Ya kamu bisa. Saya mengalami di bash , c , c ++ , dPerl , python

Apakah mereka memperlambat kecepatan suatu program?

Saya pikir tidak.

Bisakah kita menggunakan ini di Windows?

3/4-bit Ya, jika Anda mengkompilasi kode dengan gcc
beberapa tangkapan layar pada Win-7

Bagaimana cara menghitung panjang kode?

\033[ = 2, bagian lain 1

Di mana kita bisa menggunakan kode-kode ini?

Di mana saja yang memiliki penerjemah tty
xterm, gnome-terminal, kde-terminal, mysql-client-CLI dan sebagainya.
Misalnya jika Anda ingin mewarnai keluaran Anda dengan mysql Anda dapat menggunakan Perl

#!/usr/bin/Perl -n
print "\033[1m\033[31m$1\033[36m$2\033[32m$3\033[33m$4\033[m" while /([|+-]+)|([0-9]+)|([a-zA-Z_]+)|([^\w])/g;

simpan kode ini dalam nama file: pcc (= Perl Colorize Character) lalu masukkan file a menjadi PATH yang valid, lalu gunakan di mana saja Anda suka.

ls | pcc
df | pcc

di dalam mysql pertama-tama daftarkan untuk pager dan kemudian coba:

[user2:db2] pager pcc
PAGER set to 'pcc'
[user2:db2] select * from table-name;

 pcc

Itu tidakTIDAKmenangani Unicode.

Apakah kode-kode ini hanya mewarnai?

Tidak, mereka dapat melakukan banyak hal menarik. Mencoba:

echo -e '\033[2K'  # clear the screen and do not move the position

atau:

echo -e '\033[2J\033[u' # clear the screen and reset the position

Ada banyak pemula yang ingin menghapus layar dengan system( "clear" ) sehingga Anda dapat menggunakan ini alih-alih system(3) panggilan

Apakah mereka tersedia di Unicode?

Iya nih. \u001b

Versi warna apa yang lebih disukai?

Mudah menggunakan 3/4-bit, tetapi jauh lebih akurat dan indah untuk menggunakan 24-bit.
Jika Anda tidak memiliki pengalaman dengan html jadi inilah tutorial singkatnya:
24 bit berarti: 00000000 dan 00000000 dan 00000000. Setiap 8-bit adalah untuk warna tertentu.
24..17 adalah untuk  dan 16..9 untuk  dan 8..1 untuk 
Jadi dalam html#FF0000 artinya  dan ini dia: 255;0;0
dalam html#00FF00 artinya  yang di sini adalah: 0;255;0
Apakah itu masuk akal? warna apa yang ingin Anda gabungkan dengan tiga nilai 8-bit ini.


referensi:
Wikipedia
ANSI escape sequence
tldp.org
tldp.org
misc.flogisoft.com
beberapa blog/halaman web yang tidak saya ingat

593
Shakiba Moshiri

Gunakan tput dengan kemampuan setaf dan parameter 1.

echo "$(tput setaf 1)Hello, world$(tput sgr0)"
173
echo -e "\033[31m Hello World"

[31m mengontrol warna teks:

  • 30-37 set foreground color
  • 40-47 set background color

Daftar kode warna yang lebih lengkap dapat ditemukan di sini .

Ini adalah praktik yang baik untuk mengatur ulang warna teks kembali ke \033[0m di akhir string.

109
Neo

Ini adalah saklar warna \033[. Lihat riwayat .

Warna kode seperti 1;32 (Hijau Muda), 0;34 (Biru), 1;34 (Biru Muda), dll.

Kami mengakhiri urutan warna dengan saklar warna \033[ dan 0m, kode warna no-. Sama seperti membuka dan menutup tab dalam bahasa markup.

  SWITCH="\033["
  NORMAL="${SWITCH}0m"
  YELLOW="${SWITCH}1;33m"
  echo "${YELLOW}hello, yellow${NORMAL}"

Solusi fungsi echo warna sederhana:

cecho() {
  local code="\033["
  case "$1" in
    black  | bk) color="${code}0;30m";;
    red    |  r) color="${code}1;31m";;
    green  |  g) color="${code}1;32m";;
    yellow |  y) color="${code}1;33m";;
    blue   |  b) color="${code}1;34m";;
    purple |  p) color="${code}1;35m";;
    cyan   |  c) color="${code}1;36m";;
    gray   | gr) color="${code}0;37m";;
    *) local text="$1"
  esac
  [ -z "$text" ] && local text="$color$2${code}0m"
  echo "$text"
}

cecho "Normal"
cecho y "Yellow!"
31
Jorge Bucaran

Cara yang rapi untuk mengubah warna hanya untuk satu echo adalah dengan mendefinisikan fungsi tersebut:

function coloredEcho(){
    local exp=$1;
    local color=$2;
    if ! [[ $color =~ '^[0-9]$' ]] ; then
       case $(echo $color | tr '[:upper:]' '[:lower:]') in
        black) color=0 ;;
        red) color=1 ;;
        green) color=2 ;;
        yellow) color=3 ;;
        blue) color=4 ;;
        Magenta) color=5 ;;
        cyan) color=6 ;;
        white|*) color=7 ;; # white or invalid color
       esac
    fi
    tput setaf $color;
    echo $exp;
    tput sgr0;
}

Pemakaian:

coloredEcho "This text is green" green

Atau Anda bisa langsung menggunakan kode warna yang disebutkan dalam Jawaban Drew :

coloredEcho "This text is green" 2
27
Alireza Mirian

Gunakan tput untuk menghitung kode warna. Hindari penggunaan kode pelarian ANSI (mis. \E[31;1m untuk merah) karena kurang portabel. Bash di OS X, misalnya, tidak mendukungnya.

BLACK=`tput setaf 0`
RED=`tput setaf 1`
GREEN=`tput setaf 2`
YELLOW=`tput setaf 3`
BLUE=`tput setaf 4`
Magenta=`tput setaf 5`
CYAN=`tput setaf 6`
WHITE=`tput setaf 7`

BOLD=`tput bold`
RESET=`tput sgr0`

echo -e "hello ${RED}some red text${RESET} world"
20
Wilfred Hughes

Pertanyaan ini telah dijawab berulang kali :-) tetapi mengapa tidak.

Pertama menggunakan tput lebih portabel dalam lingkungan modern daripada menyuntikkan secara manual ASCII kode melalui echo -E

Inilah fungsi bash cepat:

 say() {
     echo "[email protected]" | sed \
             -e "s/\(\(@\(red\|green\|yellow\|blue\|Magenta\|cyan\|white\|reset\|b\|u\)\)\+\)[[]\{2\}\(.*\)[]]\{2\}/\1\[email protected]/g" \
             -e "s/@red/$(tput setaf 1)/g" \
             -e "s/@green/$(tput setaf 2)/g" \
             -e "s/@yellow/$(tput setaf 3)/g" \
             -e "s/@blue/$(tput setaf 4)/g" \
             -e "s/@Magenta/$(tput setaf 5)/g" \
             -e "s/@cyan/$(tput setaf 6)/g" \
             -e "s/@white/$(tput setaf 7)/g" \
             -e "s/@reset/$(tput sgr0)/g" \
             -e "s/@b/$(tput bold)/g" \
             -e "s/@u/$(tput sgr 0 1)/g"
  }

Sekarang Anda dapat menggunakan:

 say @[email protected][[Success]] 

mendapatkan:

 Bold-Green Success

Catatan tentang portabilitas tput

Kode sumber tput(1) pertama kali diunggah pada September 1986

tput(1) telah tersedia dalam semantik kutukan X/Buka pada 1990-an (standar 1997 memiliki semantik yang disebutkan di bawah).

Jadi, ini ( cukup ) ada di mana-mana.

18
Ahmed Masud

Saya baru saja menggabungkan tangkapan yang bagus dalam semua solusi dan berakhir dengan:

cecho(){
    RED="\033[0;31m"
    GREEN='\033[0;32m'
    YELLOW='\033[1;33m'
    # ... ADD MORE COLORS
    NC='\033[0m' # No Color

    printf "${!1}${2} ${NC}\n"
}

Dan Anda bisa menyebutnya sebagai:

cecho "RED" "Helloworld"
15
Andrew Naguib

Terima kasih kepada @ k-five untuk jawaban ini

declare -A colors
#curl www.bunlongheng.com/code/colors.png

# Reset
colors[Color_Off]='\033[0m'       # Text Reset

# Regular Colors
colors[Black]='\033[0;30m'        # Black
colors[Red]='\033[0;31m'          # Red
colors[Green]='\033[0;32m'        # Green
colors[Yellow]='\033[0;33m'       # Yellow
colors[Blue]='\033[0;34m'         # Blue
colors[Purple]='\033[0;35m'       # Purple
colors[Cyan]='\033[0;36m'         # Cyan
colors[White]='\033[0;37m'        # White

# Bold
colors[BBlack]='\033[1;30m'       # Black
colors[BRed]='\033[1;31m'         # Red
colors[BGreen]='\033[1;32m'       # Green
colors[BYellow]='\033[1;33m'      # Yellow
colors[BBlue]='\033[1;34m'        # Blue
colors[BPurple]='\033[1;35m'      # Purple
colors[BCyan]='\033[1;36m'        # Cyan
colors[BWhite]='\033[1;37m'       # White

# Underline
colors[UBlack]='\033[4;30m'       # Black
colors[URed]='\033[4;31m'         # Red
colors[UGreen]='\033[4;32m'       # Green
colors[UYellow]='\033[4;33m'      # Yellow
colors[UBlue]='\033[4;34m'        # Blue
colors[UPurple]='\033[4;35m'      # Purple
colors[UCyan]='\033[4;36m'        # Cyan
colors[UWhite]='\033[4;37m'       # White

# Background
colors[On_Black]='\033[40m'       # Black
colors[On_Red]='\033[41m'         # Red
colors[On_Green]='\033[42m'       # Green
colors[On_Yellow]='\033[43m'      # Yellow
colors[On_Blue]='\033[44m'        # Blue
colors[On_Purple]='\033[45m'      # Purple
colors[On_Cyan]='\033[46m'        # Cyan
colors[On_White]='\033[47m'       # White

# High Intensity
colors[IBlack]='\033[0;90m'       # Black
colors[IRed]='\033[0;91m'         # Red
colors[IGreen]='\033[0;92m'       # Green
colors[IYellow]='\033[0;93m'      # Yellow
colors[IBlue]='\033[0;94m'        # Blue
colors[IPurple]='\033[0;95m'      # Purple
colors[ICyan]='\033[0;96m'        # Cyan
colors[IWhite]='\033[0;97m'       # White

# Bold High Intensity
colors[BIBlack]='\033[1;90m'      # Black
colors[BIRed]='\033[1;91m'        # Red
colors[BIGreen]='\033[1;92m'      # Green
colors[BIYellow]='\033[1;93m'     # Yellow
colors[BIBlue]='\033[1;94m'       # Blue
colors[BIPurple]='\033[1;95m'     # Purple
colors[BICyan]='\033[1;96m'       # Cyan
colors[BIWhite]='\033[1;97m'      # White

# High Intensity backgrounds
colors[On_IBlack]='\033[0;100m'   # Black
colors[On_IRed]='\033[0;101m'     # Red
colors[On_IGreen]='\033[0;102m'   # Green
colors[On_IYellow]='\033[0;103m'  # Yellow
colors[On_IBlue]='\033[0;104m'    # Blue
colors[On_IPurple]='\033[0;105m'  # Purple
colors[On_ICyan]='\033[0;106m'    # Cyan
colors[On_IWhite]='\033[0;107m'   # White


color=${colors[$input_color]}
white=${colors[White]}
# echo $white



for i in "${!colors[@]}"
do
  echo -e "$i = ${colors[$i]}I love you$white"
done

Hasil

enter image description here

Semoga ini gambar membantu Anda memilih warna untuk bash: D

13
kyo

Kode-kode ini bekerja pada kotak Ubuntu saya:

enter image description here

echo -e "\x1B[31m foobar \x1B[0m"
echo -e "\x1B[32m foobar \x1B[0m"
echo -e "\x1B[96m foobar \x1B[0m"
echo -e "\x1B[01;96m foobar \x1B[0m"
echo -e "\x1B[01;95m foobar \x1B[0m"
echo -e "\x1B[01;94m foobar \x1B[0m"
echo -e "\x1B[01;93m foobar \x1B[0m"
echo -e "\x1B[01;91m foobar \x1B[0m"
echo -e "\x1B[01;90m foobar \x1B[0m"
echo -e "\x1B[01;89m foobar \x1B[0m"
echo -e "\x1B[01;36m foobar \x1B[0m"

Ini mencetak huruf a b c d semua dalam warna berbeda:

echo -e "\x1B[0;93m a \x1B[0m b \x1B[0;92m c \x1B[0;93m d \x1B[0;94m"

Untuk loop:

for (( i = 0; i < 17; i++ )); 
do echo "$(tput setaf $i)This is ($i) $(tput sgr0)"; 
done

enter image description here

11
Eric Leschinski

Agar mudah dibaca

Jika Anda ingin meningkatkan keterbacaan dari kode, Anda dapat echo string terlebih dahulu kemudian tambahkan warna kemudian dengan menggunakan sed:

echo 'Hello World!' | sed $'s/World/\e[1m&\e[0m/' 
10
Ooker

Jawaban favorit saya sejauh ini berwarnaEcho.

Hanya untuk memposting opsi lain, Anda dapat memeriksa alat kecil ini xcol

https://ownyourbits.com/2017/01/23/colorize-your-stdout-with-xcol/

anda menggunakannya seperti grep, dan itu akan mewarnai stdin dengan warna yang berbeda untuk setiap argumen, misalnya

Sudo netstat -putan | xcol httpd sshd dnsmasq pulseaudio conky tor Telegram firefox "[[:digit:]]+\.[[:digit:]]+\.[[:digit:]]+\.[[:digit:]]+" ":[[:digit:]]+" "tcp." "udp." LISTEN ESTABLISHED TIME_WAIT

 xcol example

Perhatikan bahwa ia menerima ekspresi reguler apa pun yang akan diterima.

Alat ini menggunakan definisi berikut

#normal=$(tput sgr0)                      # normal text
normal=$'\e[0m'                           # (works better sometimes)
bold=$(tput bold)                         # make colors bold/bright
red="$bold$(tput setaf 1)"                # bright red text
green=$(tput setaf 2)                     # dim green text
fawn=$(tput setaf 3); beige="$fawn"       # dark yellow text
yellow="$bold$fawn"                       # bright yellow text
darkblue=$(tput setaf 4)                  # dim blue text
blue="$bold$darkblue"                     # bright blue text
purple=$(tput setaf 5); Magenta="$purple" # Magenta text
pink="$bold$purple"                       # bright Magenta text
darkcyan=$(tput setaf 6)                  # dim cyan text
cyan="$bold$darkcyan"                     # bright cyan text
gray=$(tput setaf 7)                      # dim white text
darkgray="$bold"$(tput setaf 0)           # bold black = dark gray text
white="$bold$gray"                        # bright white text

Saya menggunakan variabel-variabel ini dalam skrip saya seperti itu

echo "${red}hello ${yellow}this is ${green}coloured${normal}"
8
nachoparker

Untuk memperluas pada jawaban ini , untuk malas dari kita:

function echocolor() { # $1 = string
    COLOR='\033[1;33m'
    NC='\033[0m'
    printf "${COLOR}$1${NC}\n"
}

echo "This won't be colored"
echocolor "This will be colorful"
6
Mahn

Tidak ada yang memperhatikan kegunaan kode ANSI 7 video terbalik .

Itu tetap dapat dibaca pada setiap skema skema warna, latar belakang hitam atau putih, atau palet fantasi lainnya, dengan menukar warna foreground dan background.

Contoh, untuk latar belakang merah yang berfungsi di mana-mana:

echo -e "\033[31;7mHello world\e[0m";

Ini adalah tampilannya ketika mengubah skema bawaan terminal:

 enter image description here

Ini adalah skrip loop yang digunakan untuk gif.

for i in {30..49};do echo -e "\033[$i;7mReversed color code $i\e[0m Hello world!";done

Lihat https://en.wikipedia.org/wiki/ANSI_escape_code#SGR_(Select_Graphic_Rendition)_parameters

5
Cryptopat

Anda harus menggunakan tput di atas urutan kontrol ANSI mentah.

Karena ada sejumlah besar bahasa kontrol terminal yang berbeda, biasanya suatu sistem memiliki lapisan komunikasi perantara. Kode sebenarnya dilihat dalam database untuk tipe terminal yang saat ini terdeteksi dan Anda memberikan permintaan standar ke API atau (dari Shell) ke sebuah perintah.

Salah satu dari perintah ini adalah tput. tput menerima serangkaian akronim yang disebut nama kemampuan dan parameter apa pun, jika sesuai, kemudian mencari urutan pelarian yang benar untuk terminal yang terdeteksi dalam basis data terminfo dan mencetak kode yang benar (terminal diharapkan mengerti).

dari http://wiki.bash-hackers.org/scripting/terminalcodes

Yang mengatakan, saya menulis perpustakaan pembantu kecil yang disebut bash-tint , yang menambahkan lapisan lain di atas tput, membuatnya lebih mudah untuk digunakan (imho):

Contoh: tint "white(Cyan(T)Magenta(I)Yellow(N)Black(T)) is bold(really) easy to use."

Akan memberikan hasil sebagai berikut:  enter image description here

4
ArtBIT

Saya telah menulis Swag untuk mencapai hal itu.

Anda bisa melakukannya

pip install Swag

Sekarang Anda dapat menginstal semua perintah pelarian sebagai file txt ke tujuan tertentu melalui:

Swag install -d <colorsdir>

Atau bahkan lebih mudah melalui:

Swag install

Yang akan menginstal warna ke ~/.colors.

Anda bisa menggunakannya seperti ini:

echo $(cat ~/.colors/blue.txt) This will be blue

Atau dengan cara ini, yang menurut saya lebih menarik:

Swag print -c red -t underline "I will turn red and be underlined"

Lihat di asciinema !

Dan ini yang saya gunakan untuk melihat semua kombinasi dan memutuskan yang berbunyi keren:

for (( i = 0; i < 8; i++ )); do
    for (( j = 0; j < 8; j++ )); do
        printf "$(tput setab $i)$(tput setaf $j)(b=$i, f=$j)$(tput sgr0)\n"
    done
done
3
isntn

Berikut ini adalah skrip kecil sederhana, yang saya kumpulkan baru-baru ini, yang akan mewarnai setiap input pipa daripada menggunakan "Toilet".

File: color.bsh

#!/usr/bin/env bash 

## A.M.Danischewski 2015+(c) Free - for (all (uses and 
## modifications)) - except you must keep this notice intact. 

declare INPUT_TXT=""
declare    ADD_LF="\n" 
declare -i DONE=0
declare -r COLOR_NUMBER="${1:-247}"
declare -r ASCII_FG="\\033[38;05;"
declare -r COLOR_OUT="${ASCII_FG}${COLOR_NUMBER}m"

function show_colors() { 
   ## perhaps will add bg 48 to first loop eventually 
 for fgbg in 38; do for color in {0..256} ; do 
 echo -en "\\033[${fgbg};5;${color}m ${color}\t\\033[0m"; 
 (($((${color}+1))%10==0)) && echo; done; echo; done
} 

if [[ ! $# -eq 1 || ${1} =~ ^-. ]]; then 
  show_colors 
  echo " Usage: ${0##*/} <color fg>" 
  echo "  E.g. echo \"Hello world!\" | figlet | ${0##*/} 54" 
else  
 while IFS= read -r PIPED_INPUT || { DONE=1; ADD_LF=""; }; do 
  PIPED_INPUT=$(sed 's#\\#\\\\#g' <<< "${PIPED_INPUT}")
  INPUT_TXT="${INPUT_TXT}${PIPED_INPUT}${ADD_LF}"
  ((${DONE})) && break; 
 done
 echo -en "${COLOR_OUT}${INPUT_TXT}\\033[00m"
fi 

Kemudian menyebutnya dengan warna merah (196):
$> echo "text you want colored red" | color.bsh 196

0
user4401178

Mengacu pada:

echo_red(){
    echo -e "\e[1;31m$1\e[0m"
}
echo_green(){
    echo -e "\e[1;32m$1\e[0m"
}
echo_yellow(){
    echo -e "\e[1;33m$1\e[0m"
}
echo_blue(){
    echo -e "\e[1;34m$1\e[0m"
}
0
Mike