Cara mengubah warna keluaran gema di Linux

Jawaban:

2297

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 dicetak lovemerah.

Dari komentar @ james-lim, jika Anda menggunakan echoperintah, pastikan untuk menggunakan flag -e untuk memungkinkan backslash lolos .

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

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

Tobias
sumber
11
Tidak bekerja untuk saya - output:\e[0;31mHello Stackoverflow\e[0m
Ben Harold
172
Apakah Anda mencobanya dengan "-e"? Ia memberi tahu echountuk mengaktifkan backslash lolos.
James Lim
142
Di MacOSX, gunakan \x1Bbukan \e. \033akan ok untuk semua platform.
Xiao
4
Dalam file properti semut gunakan unicode untuk esacpe, mis. Red = \ u001b [0; 31m
pengguna linux shonky
20
Seperti msanford yang dibuat untuk tput, inilah "ANSI-Rainbow"for (( i = 30; i < 38; i++ )); do echo -e "\033[0;"$i"m Normal: (0;$i); \033[1;"$i"m Light: (1;$i)"; done
orang biasa
971

Anda dapat menggunakan tputperintah luar biasa (disarankan dalam jawaban Ignacio ) untuk menghasilkan kode kontrol terminal untuk semua jenis hal.


Pemakaian

Spesifik tputsub-perintah dibahas kemudian.

Langsung

Panggil tputsebagai bagian dari urutan perintah:

tput setaf 1; echo "this is red text"

Gunakan ;alih-alih &&jika tputkesalahan teks masih muncul.

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

tputmenghasilkan 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 nyaman untuk memasukkan tputoutput langsung ke echostring 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:

Cuplikan layar teks terminal warna


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 ( setbbukan setab, dan setfbukannya setaf) yang menggunakan angka yang 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 lainnya

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

Dengan compiz windows wobbly , belperintah membuat terminal bergetar sejenak untuk menarik perhatian pengguna.


Skrip

tputmenerima skrip yang berisi satu perintah per baris, yang dieksekusi secara berurutan sebelum tputkeluar.

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 terminfodaftar lengkap perintah dan detail lebih lanjut tentang opsi ini. ( tputPerintah yang sesuai tercantum di Cap-namekolom tabel besar yang dimulai pada baris 81.)
Drew Noakes
sumber
13
Jawaban yang bagus Inilah yang paling membantu saya. Bagi siapa pun yang bertanya-tanya apa yang saya ingin tahu, itu $()adalah substitusi perintah . Yang tput af 1dilakukan adalah menghasilkan string kode warna, tetapi kode tersebut bukan karakter yang dapat dicetak, jadi pengetikan tput af 1saja akan menghasilkan garis output kosong.
Chris Middleton
5
Catatan: jika Anda menggunakan CygWin dan tidak menginstal tputncurses
Enrico
3
tput juga berfungsi di dalam sed untuk memecah cruft menjadi mudah dibaca, berwarna-warni: gist.github.com/nickboldt/fab71da10bd5169ffdfa
nickboldt
1
Untuk daftar tputwarna yang lengkap, periksa jawaban ini di Unix StackExchange
Andrew
Saya pikir reset=`tput sgr0`harus reset=`tput sgr 0`, dengan spasi.
monkeypants
835

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 masing-masing dalam bash , hex dan oktal :

|       | 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 dalam variabel bash khusus Anda

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

Anda harus menambahkan karakter pelarian tambahan sehingga dapat menafsirkannya dengan benar. Tanpa ini menambahkan karakter pelarian tambahan itu berfungsi tetapi Anda akan menghadapi masalah ketika Anda digunakan Ctrl + runtuk pencarian dalam sejarah 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 karakter yang tidak dapat dicetak
\] adalah untuk akhir urutan karakter yang tidak dapat dicetak

Kiat: untuk menghafalnya, pertama-tama Anda dapat menambahkan \[\]dan kemudian memasukkan kode ANSI Anda di antara mereka:
- \[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 atur 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; miring
  • 4; menggarisbawahi
  • 5; berkedip (lambat)
  • 6; berkedip (cepat)
  • 7; balik
  • 8; menyembunyikan
  • 9; mencoret-coret

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 versi 3/4 bit 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[33m |         |       | yellow           | echo -e "\033[33m####\033[m" |                                      |
|         34 | \033[34m |         |       | blue             | echo -e "\033[34m####\033[m" |                                      |
|         35 | \033[35m |         |       | purple           | echo -e "\033[35m####\033[m" | real name: magenta = reddish-purple  |
|         36 | \033[36m |         |       | cyan             | echo -e "\033[36m####\033[m" |                                      |
|         37 | \033[37m |         |       | 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 versi 8-bit warna ANSI

|------------+-----------+-----------+---------+------------------+------------------------------------+-------------------------|
| 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 versi 24-bit warna ANSI

|------------+-----------+-----------+---------+-------------+------------------------------------------+-----------------|
| 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 8-bit ringkasan dalam .gif

foreground.gif

latar belakang ringkasan 8-bit di a .gif

background.gif

ringkasan warna dengan nilainya

masukkan deskripsi gambar di sini masukkan deskripsi gambar di sini masukkan deskripsi gambar di sini masukkan deskripsi gambar di sini

blinking di KDE-Terminal

KDE-berkedip

Ckode sederhana yang menunjukkan lebih banyak kepada Anda

cecho_screenshot

alat yang lebih maju yang saya kembangkan untuk menangani warna-warna ini:

bline


bidikan mode warna

fade-normal-bright

bidikan mode teks

hanya-teks-mode

menggabungkan tidak apa-apa

menggabungkan

lebih banyak tembakan


Kiat dan Trik untuk Pengguna dan Pemrogram Lanjut:

Bisakah kita menggunakan kode ini dalam bahasa pemrograman?

Ya kamu bisa. Saya mengalaminya, , , ,

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 screenshot di Win-7

Bagaimana cara menghitung panjang kode?

\033[ = 2, bagian lain 1

Di mana kita bisa menggunakan kode-kode ini?

Mana saja yang memiliki ttyinterpreter
xterm, gnome-terminal, kde-terminal, mysql-client-CLIdan sebagainya.
Misalnya jika Anda ingin mewarnai output Anda dengan mysql, Anda dapat menggunakannyaPerl

#!/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 valid PATHlalu gunakan di mana pun Anda suka.

ls | pcc
df | pcc

di dalam mysqlpertama daftarkan untuk pagerdan kemudian coba:

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

pcc

Ini TIDAK menangani 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 system( "clear" )sehingga Anda dapat menggunakan ini alih-alih system(3)panggilan

Apakah mereka tersedia di Unicode?

Iya. \u001b

Versi warna apa yang lebih disukai?

Mudah digunakan 3/4-bit, tetapi jauh lebih akurat dan indah untuk digunakan 24-bit.
Jika Anda tidak memiliki pengalaman denganjadi di sini adalah tutorial singkat:
24 bit berarti: 00000000dan 00000000dan 00000000. Setiap 8-bit adalah untuk warna tertentu.
1..8adalah untuk dan 9..16untuk dan 17..24untuk
Jadi di #FF0000berarti dan ini dia: 255;0;0
di #00FF00berarti 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 saya tidak ingat

Shakiba Moshiri
sumber
70
Apakah tidak ada orang lain yang benar-benar kagum dengan jawaban ini ??
Benj
14
Ini benar-benar jawaban hall of fame, terima kasih.
ForeverZer0
2
@NeilGuyLindberg tidak ada literal literal kesalahan ini adalah bagian dari Node.js tidak eslist itu sendiri. Anda bisa menggunakannya x1B[untuk menghilangkannya.
Shakiba Moshiri
5
Saya menggulir mundur cukup jauh untuk mengungguli jawaban ini!
RNA
1
Terasa seperti, @ShakibaMoshiri menulis tesis tentang topik ini xD Jokes terpisah, bersorak untuk jawaban terperinci!
SH '
189

Gunakan tputdengan setafkemampuan dan parameter 1.

echo "$(tput setaf 1)Hello, world$(tput sgr0)"
Ignacio Vazquez-Abrams
sumber
8
Ini harus menjadi pilihan terbaik. apa yang dilakukan tput adalah ia akan membaca info terminal dan membuat kode ANSI yang lolos dengan benar untuk Anda. kode seperti \033[31makan memecah perpustakaan readline di beberapa terminal.
Tian Chen
44
Jelajahi warna dengan loop sederhana (menambah ibatas atas untuk lebih banyak nuansa):for (( i = 0; i < 17; i++ )); do echo "$(tput setaf $i)This is ($i) $(tput sgr0)"; done
msanford
2
Berikut adalah HOWTO pada kode tput
maxywb
tput: command not found(di alpine)
dgallant
127
echo -e "\033[31m Hello World"

The [31mmengontrol warna teks:

  • 30- 37mengatur warna latar depan
  • 40- 47mengatur warna latar belakang

Daftar kode warna yang lebih lengkap dapat ditemukan di sini .

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

tidak bisa didekati
sumber
2
echo -e "\ 033 [31m Hello World", [31m adalah warnanya
diakses
36

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"
Andrew Naguib
sumber
1
Sangat praktis, saya hanya perlu mengganti tanda kutip tunggal dengan tanda kutip ganda untuk GREEN, YELLOW, NC untuk membuatnya bekerja dalam skrip saya.
ionescu77
1
Solusi hebat !!
David Kariuki
31

Ini adalah saklar warna \033[ . Lihat sejarah .

Kode warna seperti 1;32(Hijau Muda), 0;34(Biru), 1;34(Biru Muda), dll.

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

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

echoSolusi fungsi 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!"
Jorge Bucaran
sumber
1
Saya akan mengubah textvariabel terakhir dengan text="$color${@: 2}${code}0m"cara ini seluruh baris kecuali parameter warna akan berwarna.
Shairon Toledo
@tomazahlin cukup tambahkan -e ke gema, sebagaimana beberapa kali disebutkan di atas
Artem Medvedev
28

Cara yang rapi untuk mengubah warna hanya untuk satu echoadalah 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
Alireza Mirian
sumber
Jika Anda menambahkan -nke gema maka Anda dapat menggunakannya sebagai pewarnaan inlineecho "Red `coloredEcho "fox" red` jumps over the lazy dog"
sobi3ch
23

Gunakan tputuntuk menghitung kode warna. Hindari menggunakan kode melarikan diri ANSI (misalnya \E[31;1muntuk merah) karena kurang portabel. Bash pada 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"
Wilfred Hughes
sumber
18

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

Penggunaan pertama tputlebih portabel dalam lingkungan modern daripada menyuntikkan kode ASCII secara manualecho -E

Inilah fungsi bash cepat:

 say() {
     echo "$@" | sed \
             -e "s/\(\(@\(red\|green\|yellow\|blue\|magenta\|cyan\|white\|reset\|b\|u\)\)\+\)[[]\{2\}\(.*\)[]]\{2\}/\1\4@reset/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 @b@green[[Success]] 

mendapatkan:

Keberhasilan Berani-Hijau

Catatan tentang portabilitas tput

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

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

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

Ahmed Masud
sumber
Ini keren sekali! Tidak tahu ini. Bisakah Anda mengatakan sesuatu tentang ketersediaan tput? Apakah tersedia di sebagian besar server di mana seseorang tidak memiliki hak admin untuk menginstalnya? Apakah Anda memiliki tautan ke tempat teknik ini pertama kali 'ditemukan'?
Redsandro
3
tput adalah cara yang sesuai standar untuk melakukan ini, di mana itu sepenuhnya independen dari Anda mengetahui kemampuan terminal. Jika terminal tidak mendukung kapabilitas yang diberikan, terminal akan turun dengan anggun ke apa pun yang dapat dilakukannya tanpa mendorong keluar kode yang kabur.
Ahmed Masud
1
Saya telah berhenti menggunakan metode ini karena mengacaukan posisi kursor dalam garis bash. Ini akan membungkus secara acak sebelum akhir baris, dan tidak akan kembali ke awal baris saat menggunakan tombol home atau panah. Kembali ke kode melarikan diri manual yang kikuk memperbaiki masalah ini.
Redsandro
2
@Resandro - apakah itu karena Anda menggunakannya $PS1tanpa memutar bagian yang tidak berjarak \[...\]? Terus menggunakan penanda Bash PS1 dengan string tput.
Toby Speight
Perhatikan bahwa fungsi ini tidak sepenuhnya berfungsi pada MacOsX karena perbedaan dalam utilitas sed: unix.stackexchange.com/questions/13711/…
Jeff
14

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

masukkan deskripsi gambar di sini

Semoga gambar ini membantu Anda memilih warna untuk bash Anda: D

cyber8200
sumber
Perlu dicatat bahwa ini membutuhkan bash v4.
Synox
14

Jika Anda menggunakan zshataubash

black() {
    echo -e "\e[30m${1}\e[0m"
}

red() {
    echo -e "\e[31m${1}\e[0m"
}

green() {
    echo -e "\e[32m${1}\e[0m"
}

yellow() {
    echo -e "\e[33m${1}\e[0m"
}

blue() {
    echo -e "\e[34m${1}\e[0m"
}

magenta() {
    echo -e "\e[35m${1}\e[0m"
}

cyan() {
    echo -e "\e[36m${1}\e[0m"
}

gray() {
    echo -e "\e[90m${1}\e[0m"
}

black 'BLACK'
red 'RED'
green 'GREEN'
yellow 'YELLOW'
blue 'BLUE'
magenta 'MAGENTA'
cyan 'CYAN'
gray 'GRAY'

Coba online

Vishal
sumber
14

Kita dapat menggunakan 24 bit warna sejati RGB untuk teks dan latar belakang!

 ESC[38;2;⟨r⟩;⟨g⟩;⟨bm  /*Foreground color*/
 ESC[48;2;⟨r⟩;⟨g⟩;⟨bm  /*Background color*/

Contoh teks merah dan tag penutup:

 echo -e "\e[38;2;255;0;0mHello world\e[0m"

Generator:

24-bit: Sebagai kartu grafis "true color" dengan 16 hingga 24 bit warna menjadi umum, Xterm, Konsole KDE, serta semua terminal berbasis libvte (termasuk Terminal GNOME) mendukung pengaturan warna foreground dan latar belakang 24-bit https: / /en.wikipedia.org/wiki/ANSI_escape_code#24-bit

Apakah aman untuk digunakan dalam skrip saya?

Iya! Terminal 8 dan 16 bit hanya akan ditampilkan sebagai fallback warna pada rentang palet yang tersedia, menjaga kontras terbaik, tidak ada kerusakan!


Juga, tidak ada yang memperhatikan kegunaan video ANSI kode 7 yang diputar balik .

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:

masukkan deskripsi gambar di sini

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_(Pilih_Graphic_Rendition)_parameters

NVRM
sumber
11

Kode-kode ini bekerja pada kotak Ubuntu saya:

masukkan deskripsi gambar di sini

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 abcd semua dalam berbagai warna:

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

masukkan deskripsi gambar di sini

Eric Leschinski
sumber
2
Ngomong-ngomong: Ini tidak banyak bergantung pada menginstal versi ubuntu tertentu, tetapi menggunakan Putty!
urzeit
11

Saya menemukan jawaban luar biasa Shakiba Moshiri saat saya mencari info tentang topik itu ... lalu saya punya ide ... dan berakhir di fungsi yang cukup bagus, sangat mudah digunakan 😁
Jadi saya harus membagikannya 😉

https://github.com/ppo/bash-colors

Penggunaan: $(c <flags>) di dalam echo -eatauprintf

 ┌───────┬─────────────────┬──────────┐   ┌───────┬─────────────────┬──────────┐
  Code   Style            Octal        Code   Style            Octal    
 ├───────┼─────────────────┼──────────┤   ├───────┼─────────────────┼──────────┤
    -    Foreground       \033[3..       B    Bold             \033[1m  
    _    Background       \033[4..       U    Underline        \033[4m  
 ├───────┼─────────────────┼──────────┤      F    Flash/blink      \033[5m  
    k    Black            ......0m       N    Negative         \033[7m  
    r    Red              ......1m    ├───────┼─────────────────┼──────────┤
    g    Green            ......2m       L    Normal (unbold)  \033[22m 
    y    Yellow           ......3m       0    Reset            \033[0m  
    b    Blue             ......4m    └───────┴─────────────────┴──────────┘
    m    Magenta          ......5m 
    c    Cyan             ......6m 
    w    White            ......7m 
 └───────┴─────────────────┴──────────┘

Contoh:

echo -e "$(c 0wB)Bold white$(c) and normal"
echo -e "Normal text… $(c r_yB)BOLD red text on yellow background… $(c _w)now on
  white background… $(c 0U) reset and underline… $(c) and back to normal."
Pascal Polleunus
sumber
10

Agar mudah dibaca

Jika Anda ingin meningkatkan keterbacaan kode, Anda dapat echomenambahkan string terlebih dahulu kemudian menambahkan warna dengan menggunakan sed:

echo 'Hello World!' | sed $'s/World/\e[1m&\e[0m/' 
Ooker
sumber
1
Saya sangat suka jawaban ini! Bisakah Anda jelaskan $ pada perintah sed?
Patrick
2
$ '<sesuatu>' untuk bash, bukan sed. Ini memberitahu bash untuk memproses \ e sebagai urutan escape, dan memasukkan karakter "escape". Biasanya Anda melihat bentuk yang lebih sederhana seperti $ '\ t' atau $ '\ n' untuk mendapatkan tab atau karakter baris baru diteruskan ke sebuah perintah.
dsz
8

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

contoh xcol

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}"
nachoparker
sumber
6

Untuk memperluas jawaban ini , bagi malas 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"
Mahn
sumber
2
Jangan simpan hardcode terminal. Gunakan tput; itu untuk apa!
Toby Speight
@TobySpeight Meskipun itu mungkin benar untuk dukungan multi-platform (secara teori), jika poster menemukannya berfungsi di dunia mereka sendiri, mengapa tidak setuju dan menghalangi orang lain di dunia yang sama untuk menggunakan teknik ini? Contohnya saya mencoba serupa di Ubuntu 16,04 bash dan berfungsi. Sebagai satu-satunya pengguna di platform ini saya menemukan jawaban ini dapat diterima. Saya juga akan menggunakan tputuntuk scdan rc(menyimpan kursor, mengembalikan kursor). Meskipun jawaban ini memanggil saya "malas" itu bisa ditulis ulang sebagai "praktis" atau "langsung ke titik".
WinEunuuchs2Unix
Solusi saya sendiri mirip dengan ini, terbatas murni untuk shell built-in, karena forking dua proses eksternal, subshell dll untuk setiap pesan dalam naskah hanya memiliki ... bau yang tidak enak.
Amit Naidu
6

untuk menampilkan keluaran pesan dengan warna berbeda, Anda dapat membuat:

echo -e "\033[31;1mYour Message\033[0m"

-Hitam 0; 30 Abu-abu Tua 1; 30

-Red 0; 31 Light Red 1; 31

-Green 0; 32 Light Green 1; 32

-Brown / Orange 0; 33 Kuning 1; 33

-Biru 0; 34 Biru Muda 1; 34

-Ungu 0; 35 Ungu Muda 1; 35

-Cyan 0; 36 Light Cyan 1; 36

-Lampu Abu-abu 0; 37 Putih 1; 37

Amirouche Zeggagh
sumber
5

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. tputmenerima 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 mudah-mudahan 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: masukkan deskripsi gambar di sini

ArtBIT
sumber
5

Saya bukannya mengkodekan kode pelarian yang khusus untuk terminal Anda saat ini, sebaiknya Anda gunakan tput.

Ini adalah skrip demo favorit saya:

#!/bin/bash

tput init

end=$(( $(tput colors)-1 ))
w=8
for c in $(seq 0 $end); do
    eval "$(printf "tput setaf %3s   " "$c")"; echo -n "$_"
    [[ $c -ge $(( w*2 )) ]] && offset=2 || offset=0
    [[ $(((c+offset) % (w-offset))) -eq $(((w-offset)-1)) ]] && echo
done

tput init

256 warna dihasilkan oleh tput

Bruno Bronosky
sumber
4

Saya menggunakan ini untuk pencetakan warna

#!/bin/bash
#--------------------------------------------------------------------+
#Color picker, usage: printf $BLD$CUR$RED$BBLU'Hello World!'$DEF     |
#-------------------------+--------------------------------+---------+
#       Text color        |       Background color         |         |
#-----------+-------------+--------------+-----------------+         |
# Base color|Lighter shade| Base color   | Lighter shade   |         |
#-----------+-------------+--------------+-----------------+         |
BLK='\e[30m'; blk='\e[90m'; BBLK='\e[40m'; bblk='\e[100m' #| Black   |
RED='\e[31m'; red='\e[91m'; BRED='\e[41m'; bred='\e[101m' #| Red     |
GRN='\e[32m'; grn='\e[92m'; BGRN='\e[42m'; bgrn='\e[102m' #| Green   |
YLW='\e[33m'; ylw='\e[93m'; BYLW='\e[43m'; bylw='\e[103m' #| Yellow  |
BLU='\e[34m'; blu='\e[94m'; BBLU='\e[44m'; bblu='\e[104m' #| Blue    |
MGN='\e[35m'; mgn='\e[95m'; BMGN='\e[45m'; bmgn='\e[105m' #| Magenta |
CYN='\e[36m'; cyn='\e[96m'; BCYN='\e[46m'; bcyn='\e[106m' #| Cyan    |
WHT='\e[37m'; wht='\e[97m'; BWHT='\e[47m'; bwht='\e[107m' #| White   |
#-------------------------{ Effects }----------------------+---------+
DEF='\e[0m'   #Default color and effects                             |
BLD='\e[1m'   #Bold\brighter                                         |
DIM='\e[2m'   #Dim\darker                                            |
CUR='\e[3m'   #Italic font                                           |
UND='\e[4m'   #Underline                                             |
INV='\e[7m'   #Inverted                                              |
COF='\e[?25l' #Cursor Off                                            |
CON='\e[?25h' #Cursor On                                             |
#------------------------{ Functions }-------------------------------+
# Text positioning, usage: XY 10 10 'Hello World!'                   |
XY () { printf "\e[$2;${1}H$3"; }                                   #|
# Print line, usage: line - 10 | line -= 20 | line 'Hello World!' 20 |
line () { printf -v _L %$2s; printf -- "${_L// /$1}"; }             #|
# Create sequence like {0..(X-1)}                                    |
que () { printf -v _N %$1s; _N=(${_N// / 1}); printf "${!_N[*]}"; } #|
#--------------------------------------------------------------------+

Semua warna dasar ditetapkan sebagai vars dan juga ada beberapa fungsi berguna: XY, line dan que. Sumber skrip ini di salah satu milik Anda dan gunakan semua vars dan fungsi warna.

Ivan
sumber
3

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
bukankah
sumber
2

Saya sudah menulis barang curian untuk mencapai hal itu.

Anda bisa melakukannya

pip install swag

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

swag install -d <colorsdir>

Atau bahkan lebih mudah melalui:

swag install

Yang akan menginstal warna ~/.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 !

throws_exceptions_at_you
sumber
0

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


sumber
Logika loop warna ditemukan di tutorial warna Ascii yang layak ini: misc.flogisoft.com/bash/tip_colors_and_formatting
-1

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"
}
Mike
sumber
Perhatikan bahwa fungsi echo_green harus memiliki kode 32 daripada 33. Tidak dapat mengedit b / c stackoverflow membutuhkan setidaknya 6 karakter edit.
Daniel
-2

Ini adalah solusi paling sederhana dan mudah dibaca. Dengan bashj ( https://sourceforge.net/projects/bashj/ ), Anda cukup memilih salah satu dari baris ini:

#!/usr/bin/bash

W="Hello world!"
echo $W

R=130
G=60
B=190

echo u.colored($R,$G,$B,$W)

echo u.colored(255,127,0,$W)
echo u.red($W)
echo u.bold($W)
echo u.italic($W)

Y=u.yellow($W)
echo $Y
echo u.bold($Y)

256x256x256 warna tersedia jika Anda memiliki dukungan warna dalam aplikasi terminal Anda.

Fil
sumber
-3

setelah mencampurkan solusi lain dari utas, inilah cara saya berhasil mendapatkan warna dalam npm scriptskeluaran (gitbash CLI):

{
    "deploy": "echo \u001b[1;32m && ng build && echo \u001b[1;0mdeploy {\u001b[1;33mcopy\u001b[1;0m: \u001b[1;32m0% && cp -r -f dist/packaged/* \\\\SERVER-01\\dist\\ && echo \u001b[1;0mdeploy {\u001b[1;33mcopy\u001b[1;0m} \u001b[1;34m\u001b[1;1m100% DEPLOYED"
}

masukkan deskripsi gambar di sini

godblessstrawberry
sumber
-4

Sama seperti sesuatu yang sedikit di luar sana, melewati grep akan menyorotnya sebagai merah (tetapi hanya merah). Anda juga dapat menggunakan pipa bernama sehingga string Anda lebih dekat ke akhir baris:

 grep '.*' --color=always <(echo "foobar")
FinalDuty
sumber
Anda kehilangan titik untuk dapat memilih warna pilihan Anda. juga grep sebagai utilitas pewarnaan benar-benar dipertanyakan: P
Ahmed Masud
Tidak juga, OP secara khusus mengatakan mereka ingin merah. Saya setuju bahwa ada pilihan yang lebih baik daripada menggunakan grep, tetapi itu mencapai apa yang mereka minta dan menghemat karena harus belajar sesuatu yang lebih kompleks.
FinalDuty
-5
red='\e[0;31m'
NC='\e[0m' # No Color
echo -e "${red}Hello Stackoverflow${NC}"

Jawaban ini benar, kecuali bahwa panggilan untuk warna tidak boleh berada di dalam tanda kutip.

echo -e ${red}"Hello Stackoverflow"${NC}

Sebaiknya lakukan triknya.

Dale Corns
sumber
3
Berfungsi dengan baik di dalam tanda kutip. saklar -e mengevaluasi apa yang ada dalam tanda kutip juga. Menjalankan keduanya (tanda kutip di dalam dan di luar) menggunakan bash -x output dengan perintah yang dieksekusi sama echo -e '\e[0;31mHello Stackoverflow\e[0m'. Jadi sama saja untuk bash.
naab