Pertanyaan Cara mengubah warna output echo di Linux


Saya mencoba mencetak teks di terminal menggunakan perintah echo.

Saya ingin mencetak teks dengan warna merah. Bagaimana saya bisa melakukannya?


1145
2018-05-10 09:07


asal


Jawaban:


Anda bisa menggunakan ini Kode melarikan diri ANSI:

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 mereka 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 love merah.

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

# 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)


1563
2018-05-10 09:11



Anda bisa menggunakan yang luar biasa tput perintah (disarankan dalam Jawaban Ignacio) untuk menghasilkan kode kontrol terminal untuk semua hal.


Pemakaian

Spesifik tput sub-perintah akan dibahas nanti.

Langsung

Panggilan tput sebagai bagian dari urutan perintah:

tput setaf 1; echo "this is red text"

Menggunakan ; dari pada && jadi jika tput kesalahan teks masih muncul.

Variabel cangkang

Pilihan lainnya 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 arti khusus. Mereka tidak akan ditampilkan sendiri. Perhatikan bahwa mereka masih dapat disimpan ke dalam file atau diproses sebagai masukan oleh program selain terminal.

Substitusi komando

Ini mungkin lebih nyaman untuk dimasukkan tputoutput langsung ke Anda echo string 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 dari pada setab, dan setf dari pada setaf) yang menggunakan nomor 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 gerakan 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 goyah windows, yang bel perintah membuat terminal goyah sedetik untuk menarik perhatian pengguna.


Skrip

tput menerima skrip yang berisi satu perintah per baris, yang dijalankan dalam urutan sebelumnya tput keluar.

Hindari file sementara dengan menggemakan string multiline dan pemipaannya:

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. (Yang sesuai tput perintah terdaftar di Cap-name kolom dari meja besar yang dimulai pada baris 81.)

646
2018-01-07 22:25



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 pelolosan masuk pesta, 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 |
|             |              |                |                |                                       |

pengecualian bash:

Jika Anda akan menggunakan kode ini di Anda variabel bash khusus 

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

Anda harus menambahkan karakter pelarian ekstra sehingga  dapat menafsirkannya dengan benar. Tanpa ini menambahkan karakter pelarian ekstra itu berhasil tetapi Anda akan menghadapi masalah ketika Anda menggunakan Ctrl + r untuk pencarian dalam sejarah Anda.

aturan pengecualian untuk bash

Anda harus menambahkan \[ sebelum memulai kode ANSI dan tambahkan \] setelah yang berakhir.
Contoh:
dalam penggunaan biasa: \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 bisa dicetak karakter
\] adalah untuk akhir urutan tidak bisa dicetak karakter

Kiat: untuk menghafalnya, Anda dapat menambahkan terlebih dahulu \[\] lalu letakkan 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 teks warna NOT. Misalnya bikin 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 didukung di Gnome-Terminal.

2. mode teks

Mode ini untuk memodifikasi gaya teks warna TIDAK.

  • 3; miring
  • 4; menggarisbawahi
  • 5; berkedip (lambat)
  • 6; berkedip (cepat)
  • 7; membalikkan
  • 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 menunjukkan ringkasan 3/4 bit versi warna ANSI

|------------+----------+---------+-------+------------------+------------------------------+--------------------------------------|
| 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 menunjukkan ringkasan 8 bit versi 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 menunjukkan ringkasan 24 bit versi 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 screen-shots

ringkasan 8-bit foreground dalam a .gif 

foreground.gif

latar belakang ringkasan 8-bit dalam .gif 

background.gif

ringkasan warna dengan nilai-nilai mereka

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

blinking di KDE-Terminal

KDE-blinking

 sederhana C kode yang menunjukkan Anda lebih banyak

cecho_screenshot

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


bidikan mode warna

fade-normal-bright

pemotretan mode teks

only-text-mode

menggabungkan adalah OK

combine

lebih banyak tembakan


Kiat dan Trik untuk Pengguna dan Pemrogram Lanjut:

Bisakah kita menggunakan kode ini dalam bahasa pemrograman?

Ya kamu bisa. Saya berpengalaman dalam , , ,   ,

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 screen-shot pada Win-7 

Bagaimana cara menghitung panjang kode?

\033[ = 2, bagian lain 1

Di mana kita dapat menggunakan kode-kode ini?

Di mana saja yang memiliki tty penerjemah
xterm, gnome-terminal, kde-terminal, mysql-client-CLI dan seterusnya.
Misalnya jika Anda ingin mewarnai output Anda dengan mysql yang dapat Anda gunakan 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) dan kemudian masukkan file yang valid PATH lalu gunakan di mana pun Anda suka.

ls | pcc
df | pcc 

dalam mysql pertama mendaftar untuk pager dan kemudian coba:

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

pcc

Itu benar TIDAK menangani Unicode.

Apakah kode-kode ini hanya melakukan pewarnaan?

Tidak, mereka bisa 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 membersihkan layar dengan system( "clear" ) jadi kamu bisa menggunakan ini sebagai gantinya system(3) panggilan

Apakah mereka tersedia di Unicode?

Iya nih. \u001b 

Versi mana dari warna-warna ini yang lebih disukai?

Sangat mudah digunakan 3/4-bit, tetapi jauh lebih akurat dan indah untuk digunakan 24-bit.
Jika Anda tidak memiliki pengalaman dengan  jadi di sini adalah tutorial singkat:
24 bit berarti: 00000000 dan 00000000 dan 00000000. Setiap 8-bit untuk warna tertentu.
24..17 adalah untuk  dan 16..9 untuk  dan 8..1 untuk
Jadi dalam   #FF0000 cara  dan ini dia: 255;0;0
di   #00FF00 cara  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
Urutan melarikan diri ANSI
tldp.org
tldp.org
misc.flogisoft.com
beberapa blog / halaman web yang saya tidak ingat

lencana:


463
2018-03-09 09:02



Menggunakan tput dengan setaf kemampuan dan parameter 1.

echo "$(tput setaf 1)Hello, world$(tput sgr0)"

158
2018-05-10 09:10



echo -e "\033[31m Hello World"

Itu [31m mengontrol warna teks:

  • 30-37 set latar depan warna
  • 40-47 set Latar Belakang warna

Daftar kode warna yang lebih lengkap dapat ditemukan di sini.

Ini adalah praktik yang baik untuk mereset warna teks kembali \033[0m di ujung tali.


96
2018-05-10 09:10



Ini adalah pergantian warna  \033[. Lihat sejarah.

Warna kode seperti 1;32 (Hijau muda), 0;34 (Biru), 1;34 (Light Blue), dll.

Kami mengakhiri urutan warna dengan tombol warna \033[ dan 0m, yang tidak-Kode warna. Sama seperti membuka dan menutup tab dalam bahasa markup.

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

Warna yang sederhana echo solusi fungsi:

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

29
2018-02-25 01:38



Cara yang rapi untuk mengubah warna hanya untuk satu echo adalah mendefinisikan fungsi seperti itu:

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 di dalamnya Jawaban Drew:

coloredEcho "This text is green" 2

25
2018-04-11 07:36



Menggunakan tput untuk menghitung kode warna. Hindari menggunakan kode pelarian ANSI (mis. \E[31;1m untuk 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"

18
2018-04-04 10:37



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

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

Berikut 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:

Bold-Green Success

Catatan tentang portabilitas tput

Pertama kali tput(1) kode sumber diunggah pada bulan September 1986

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

Jadi begitu (cukup) di mana-mana.


13
2017-09-20 21:02



Kode-kode ini berfungsi 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


10
2017-09-05 18:40