Câu hỏi Làm thế nào để thay đổi màu đầu ra của echo trong Linux


Tôi đang cố gắng để in một văn bản trong thiết bị đầu cuối bằng cách sử dụng lệnh echo.

Tôi muốn in văn bản bằng màu đỏ. Làm thế nào tôi có thể làm điều đó?


1150
2018-05-10 09:07


gốc


Liên kết này khá hữu ích: misc.flogisoft.com/bash/tip_colors_and_formatting - Pithikos
loại màu nào bạn muốn thay đổi? - Jasur Kurbanov
hãy xem cái này, tôi trả lời câu hỏi của bạn ở đó: stackoverflow.com/a/48216286/3782119 - SHi ON


Các câu trả lời:


Bạn có thể sử dụng những Mã thoát 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

Và sau đó sử dụng chúng như thế này trong kịch bản của bạn:

#    .---------- 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"

bản in nào love màu đỏ.

Từ nhận xét của @ james-lim, nếu bạn đang sử dụng echo lệnh, hãy đảm bảo sử dụng cờ -e để cho phép thoát dấu gạch chéo ngược.

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

(đừng thêm "\n" khi sử dụng tiếng vọng trừ khi bạn muốn thêm dòng trống bổ sung)


1569
2018-05-10 09:11



Không làm việc cho tôi - đầu ra: \e[0;31mHello Stackoverflow\e[0m - Ben Harold
Bạn đã thử nó với "-e"? Nó nói echo để kích hoạt dấu gạch chéo ngược. - James Lim
+1 thật tuyệt vời !!! :) Bằng cách này, nơi bạn đã nhận được những con số này và họ có tiêu chuẩn trên các chương trình thiết bị đầu cuối và distro Linux? - Bitdiot
Trong MacOSX, sử dụng \x1B thay vì \e. \033 sẽ là ok cho tất cả các nền tảng. - Xiao
Giống như msanford làm cho tput, đây là "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 - everyman


Bạn có thể sử dụng tuyệt vời tput lệnh (được đề xuất trong Câu trả lời của Ignacio) để tạo ra các mã điều khiển đầu cuối cho tất cả mọi thứ.


Sử dụng

Riêng tput các lệnh con sẽ được thảo luận sau.

Thẳng thắn

Gọi điện tput như một phần của chuỗi lệnh:

tput setaf 1; echo "this is red text"

Sử dụng ; thay vì && do đó, nếu tput lỗi văn bản vẫn hiển thị.

Biến Shell

Một tùy chọn khác là sử dụng các biến shell:

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

tput tạo ra các chuỗi ký tự được giải thích bởi terminal như có ý nghĩa đặc biệt. Chúng sẽ không được hiển thị. Lưu ý rằng chúng vẫn có thể được lưu vào các tệp hoặc được xử lý dưới dạng đầu vào của các chương trình khác với thiết bị đầu cuối.

Thay thế lệnh

Nó có thể là thuận tiện hơn để chèn tputđầu ra trực tiếp vào echo chuỗi sử dụng thay thế lệnh:

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

Thí dụ

Lệnh trên tạo ra điều này trên Ubuntu:

Screenshot of colour terminal text


Lệnh màu nền và nền trước

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

Màu sắc như sau:

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

Ngoài ra còn có các phiên bản không thuộc ANSI của các chức năng cài đặt màu (setb thay vì setabsetf thay vì setaf) sử dụng các số khác nhau, không được đưa ra ở đây.

Lệnh chế độ văn bản

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

Lệnh di chuyển con trỏ

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

Xóa và chèn lệnh

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

Các lệnh khác

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

Với compiz wobbly windows, các bel lệnh làm cho thiết bị đầu cuối lung lay trong một giây để thu hút sự chú ý của người dùng.


Kịch bản

tput chấp nhận các tập lệnh chứa một lệnh trên mỗi dòng, được thực thi theo thứ tự trước tput thoát.

Tránh các tệp tạm thời bằng cách lặp lại chuỗi nhiều dòng và đường ống:

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

Xem thêm

  • Xem man 1 tput
  • Xem man 5 terminfo để có danh sách đầy đủ các lệnh và thông tin chi tiết hơn về các tùy chọn này. (Tương ứng tput lệnh được liệt kê trong Cap-name cột của bảng lớn bắt đầu ở dòng 81.)

651
2018-01-07 22:25



Câu trả lời chính xác. Đây là thứ giúp tôi nhiều nhất. Đối với bất cứ ai khác, những người đang tự hỏi điều tôi đang thắc mắc, $() là một thay thế lệnh. Tất cả các tput af 1 không tạo chuỗi mã màu, nhưng các mã không phải là ký tự có thể in, vì vậy hãy nhập tput af 1 một mình sẽ tạo ra một dòng đầu ra trống. - Chris Middleton
Lưu ý: nếu bạn đang sử dụng CygWin và không có cài đặt tput ncurses - Enrico
tput cũng hoạt động bên trong sed cho phân tích cruft vào dễ đọc, đầy màu sắc cruft: gist.github.com/nickboldt/fab71da10bd5169ffdfa - nickboldt
Điều này đẹp hơn rất nhiều so với làm việc trực tiếp với mã màu! - Kyle Strand
Là một phần tput của hầu hết các distro? - Nepoxx


một số biến mà bạn có thể sử dụng:

# 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

 

nhân vật thoát trong bash, hex và bát phân tương ứng:

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

ví dụ ngắn:

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

ngoại lệ bash:

Nếu bạn định sử dụng các mã này trong biến bash đặc biệt 

  • PS0
  • PS1
  • PS2 (= đây là để nhắc)
  • PS4

bạn nên thêm các ký tự thoát khác để  có thể giải thích chúng một cách chính xác. Nếu không có thêm các ký tự thoát khác, nó hoạt động nhưng bạn sẽ gặp phải các vấn đề khi bạn sử dụng Ctrl + r cho tìm kiếm trong lịch sử của bạn.

quy tắc ngoại lệ cho bash

Bạn nên thêm \[ trước khi bắt đầu bất kỳ mã ANSI nào và thêm \] sau bất kỳ kết thúc nào.
Thí dụ:
sử dụng thường xuyên: \033[32mThis is in green\033[0m
cho PS0 / 1/2/4: \[\033[32m\]This is in green\[\033[m\] 

\[ là để bắt đầu một chuỗi không thể in được nhân vật
\] là kết thúc chuỗi không thể in được nhân vật

Mẹo: để ghi nhớ nó, trước tiên bạn có thể thêm \[\] và sau đó đặt mã ANSI của bạn giữa chúng:
  - - \[start-ANSI-code\]
  - - \[end-ANSI-code\] 

loại chuỗi màu:

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

Trước khi đi sâu vào những màu này, bạn nên biết về 4 chế độ với những mã này:

1. chế độ màu

Nó sửa đổi phong cách của màu KHÔNG văn bản. Ví dụ: làm cho màu sáng hơn hoặc tối hơn.

  • 0  cài lại
  • 1;  nhẹ hơn bình thường
  • 2; tối hơn bình thường

Chế độ này không được hỗ trợ rộng rãi. Nó hỗ trợ đầy đủ trên Gnome-Terminal.

2. chế độ văn bản

Chế độ này là để sửa đổi kiểu chữ KHÔNG màu.

  • 3; nghiêng
  • 4; gạch dưới
  • 5; nhấp nháy (chậm)
  • 6; nhấp nháy (nhanh)
  • 7; đảo ngược
  • 8; ẩn giấu
  • 9; Gạch bỏ

và hầu như được hỗ trợ.
Ví dụ: KDE-Konsole hỗ trợ 5; nhưng Gnome-Terminal không hỗ trợ Gnome 8; nhưng KDE thì không.

3. chế độ nền trước

Chế độ này là để tô màu cho nền trước.

4. chế độ nền

Chế độ này là để tô màu nền.

 

Bảng dưới đây cho thấy một bản tóm tắt 3/4 bit phiên bản màu 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                                            |                                                                                       |
|------------+----------+---------+-------+------------------+------------------------------+--------------------------------------|

 

Bảng dưới đây cho thấy một bản tóm tắt 8 bit phiên bản màu 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     |
|------------+-----------+-----------+---------+------------------+------------------------------------+-------------------------|

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

 

Bảng dưới đây cho thấy một bản tóm tắt 24 bit phiên bản màu 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 |
|------------+-----------+-----------+---------+-------------+------------------------------------------+-----------------|

 

một số ảnh chụp màn hình

tóm tắt 8 bit nền trước trong một .gif 

foreground.gif

tóm tắt 8 bit nền trong một .gif 

background.gif

tóm tắt màu với giá trị của chúng

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

blinking trên KDE-Terminal

KDE-blinking

 một cách đơn giản C mã cho bạn thấy nhiều hơn

cecho_screenshot

 một công cụ nâng cao hơn mà tôi đã phát triển để xử lý những màu này:
bline 


chế độ chụp màu

fade-normal-bright

chế độ văn bản shot

only-text-mode

kết hợp là OK

combine

nhiều ảnh hơn


Mẹo và thủ thuật cho người dùng và lập trình nâng cao:

Chúng tôi có thể sử dụng các mã này bằng ngôn ngữ lập trình không?

Có, bạn có thể. Tôi đã trải qua , , ,   ,

Chúng có làm chậm tốc độ của một chương trình không?

Tôi nghĩ không có.

Chúng ta có thể sử dụng chúng trên Windows không?

3/4-bit Có, nếu bạn biên dịch mã với gcc
một số ảnh chụp màn hình trên Win-7 

Làm thế nào để tính toán độ dài của mã?

\033[ = 2, các bộ phận khác 1

Chúng ta có thể sử dụng những mã này ở đâu?

Bất cứ nơi nào có tty thông dịch viên
xterm, gnome-terminal, kde-terminal, mysql-client-CLI và vân vân.
Ví dụ nếu bạn muốn colorize đầu ra của bạn với mysql bạn có thể sử dụng 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;

lưu trữ mã này trong tên tệp: pcc (= Perl Colorize Character) và sau đó đặt tệp vào hợp lệ PATH sau đó sử dụng nó bất cứ nơi nào bạn muốn.

ls | pcc
df | pcc 

phía trong mysql đầu tiên đăng ký nó cho pager và sau đó thử:

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

pcc

Nó không KHÔNG PHẢI xử lý Unicode.

Những mã này chỉ làm màu sắc?

Không, họ có thể làm rất nhiều điều thú vị. Thử:

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

hoặc là:

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

Có rất nhiều người mới bắt đầu muốn xóa màn hình với system( "clear" ) để bạn có thể sử dụng nó thay vì system(3) gọi điện

Chúng có sẵn trong Unicode không?

Vâng. \u001b 

Phiên bản màu nào thích hợp hơn?

Nó rất dễ dàng để sử dụng 3/4-bit, nhưng nó là chính xác và đẹp để sử dụng 24-bit.
Nếu bạn không có kinh nghiệm với  đây là hướng dẫn nhanh:
24 bit có nghĩa là: 00000000 và 00000000 và 00000000. Mỗi bit 8 bit cho một màu cụ thể.
24..17 là cho  và 16..9 cho  và 8..1 cho
Vì vậy, trong   #FF0000 có nghĩa  và đây là: 255;0;0
trong   #00FF00 có nghĩa  đây là: 0;255;0
Điều đó có ý nghĩa? màu nào bạn muốn kết hợp nó với ba giá trị 8 bit này.


tài liệu tham khảo:
Wikipedia
Trình tự ANSI thoát
tldp.org
tldp.org
misc.flogisoft.com
một số blog / trang web mà tôi không nhớ

danh hiệu:


465
2018-03-09 09:02



Tôi thích nó, đặc biệt shell, hex và oct thông tin. - Fredrick Gauss
Chắc chắn câu trả lời tuyệt vời nhưng tôi không thể đọc tất cả ... Cảm ơn bạn! - Worker
@ ShakibaMoshiri scrips của tôi có màu sắc ngay bây giờ! Cảm ơn bạn! - Worker
Quá lâu! Tốt cho một bài đăng trên blog; bạn có thể cắt giảm xuống các chi tiết tối thiểu sau đó liên kết ở nơi khác để đọc đầy đủ? - Duncan Jones
@ DuncanJones Tôi muốn tham khảo. Đây cũng chỉ là một chi tiết rất ngắn. Tôi cắt ra rất nhiều. - Shakiba Moshiri


Sử dụng tput với setaf khả năng và thông số của 1.

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

158
2018-05-10 09:10



Đây sẽ là lựa chọn tốt nhất. gì tput nó sẽ đọc thông tin đầu cuối và hiển thị mã ANSI được thoát đúng cách cho bạn. mã như \033[31m sẽ phá vỡ readline thư viện trong một số thiết bị đầu cuối. - Tian Chen
Khám phá màu sắc bằng một vòng lặp đơn giản (tăng i's trên ràng buộc cho nhiều sắc thái): for (( i = 0; i < 17; i++ )); do echo "$(tput setaf $i)This is ($i) $(tput sgr0)"; done - msanford
Đây là một HOWTO trên mã tput: tldp.org/HOWTO/Bash-Prompt-HOWTO/x405.html - maxywb
Tại sao nó cũng thay đổi màu sắc của các dòng khác? - zygimantus
@zygimantus Đó chỉ là cách mã màu vỏ hoạt động: chúng tồn tại cho đến khi chúng được đặt lại. tput sgr0 nên đặt lại mã, vì vậy bạn nên không phải xem hiệu ứng liên tục nếu bạn sao chép nguyên văn dòng trên. - Kyle Strand


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

Các [31m điều khiển màu văn bản:

  • 30- -37 bộ vấn đề xung quanh màu
  • 40- -47 bộ lý lịch màu

Danh sách mã màu hoàn chỉnh hơn có thể tìm thấy ở đây.

Thực hành tốt là đặt lại màu văn bản trở lại \033[0m ở cuối chuỗi.


96
2018-05-10 09:10



@ Neo-Bạn có thể cung cấp liên kết mã màu - satheesh.droid
echo -e "\ 033 [31m Hello World", [31m là màu - Neo


Đây là công tắc màu  \033[. Xem lịch sử.

Màu mã số giống như 1;32 (Màu xanh lợt), 0;34 (Màu xanh da trời), 1;34 (Màu lam nhạt), v.v.

Chúng tôi chấm dứt chuỗi màu bằng công tắc màu \033[ và 0m, các Khôngmã màu. Cũng giống như mở và đóng các tab bằng ngôn ngữ đánh dấu.

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

Màu đơn giản echo giải pháp chức năng:

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



Tôi muốn thay đổi text biến bởi text="$color${@: 2}${code}0m" theo cách này, toàn bộ dòng trừ thông số màu sẽ được tô màu. - Shairon Toledo
Không thực sự biết lý do tại sao, nhưng sử dụng mã này với "echo" đã không màu đầu ra, nhưng in mã thay vào đó. Khi thay thế nó bằng "printf", văn bản màu đã hoạt động. - tomazahlin
@tomazahlin chỉ cần thêm -e để echo, như nhiều lần đã đề cập ở trên - Artem Medvedev


Một cách gọn gàng để thay đổi màu sắc chỉ dành cho một echo là để xác định chức năng như vậy:

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

Sử dụng:

coloredEcho "This text is green" green

Hoặc bạn có thể trực tiếp sử dụng mã màu được đề cập trong Câu trả lời của Drew:

coloredEcho "This text is green" 2

25
2018-04-11 07:36



Nếu bạn thêm -n để echo sau đó bạn có thể sử dụng nó như màu inline echo "Red `coloredEcho "fox" red` jumps over the lazy dog" - sobi3ch


Sử dụng tput để tính toán mã màu. Tránh sử dụng mã thoát ANSI (ví dụ: \E[31;1m cho màu đỏ) vì nó ít di động hơn. Bash trên OS X chẳng hạn, không hỗ trợ nó.

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





Câu hỏi này đã được trả lời hơn và hơn nữa :-) nhưng tại sao không.

Đầu tiên sử dụng tput di động nhiều hơn trong môi trường hiện đại hơn là chèn mã ASCII theo cách thủ công thông qua echo -E 

Đây là một hàm bash nhanh:

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

Bây giờ bạn có thể sử dụng:

 say @b@green[[Success]] 

để có được:

Bold-Green Success

Ghi chú về tính di động của tput

Lần đầu tiên tput(1) mã nguồn được tải lên vào tháng 9 năm 1986

tput(1) đã có sẵn trong X / Open nguyền rủa ngữ nghĩa trong những năm 1990 (tiêu chuẩn 1997 có ngữ nghĩa được đề cập dưới đây).

Vậy nó là (khá) phổ biến.


13
2017-09-20 21:02



Cái này hay đấy! Không biết điều này. Bạn có thể nói điều gì đó về sự sẵn có của tput? Có sẵn trên hầu hết các máy chủ không có quyền quản trị để cài đặt không? Bạn có một liên kết đến nơi kỹ thuật này lần đầu tiên được 'phát minh'? - Redsandro
tput là tiêu chuẩn tuân thủ cách để làm điều này, nơi nó hoàn toàn độc lập với bạn biết khả năng thiết bị đầu cuối. Nếu thiết bị đầu cuối không hỗ trợ một khả năng nhất định, nó sẽ hạ xuống một cách duyên dáng đối với bất cứ điều gì nó có thể làm mà không đẩy ra các mã thoát hiểm. - Ahmed Masud
Tôi đã ngừng sử dụng phương pháp này vì nó lộn xộn với vị trí con trỏ trong các đường bash. Nó sẽ quấn ngẫu nhiên trước khi kết thúc dòng, và sẽ không quay trở lại tất cả các cách để bắt đầu của dòng khi sử dụng nhà hoặc các phím mũi tên. Quay lại các mã thoát bằng tay vụng về để khắc phục sự cố này. - Redsandro
@ Resandro - là bởi vì bạn đang sử dụng nó trong $PS1 không có \[...\] xung quanh các phần không khoảng cách? Tiếp tục sử dụng các đánh dấu Bash PS1 với các chuỗi tput. - Toby Speight


Các mã này hoạt động trên hộp Ubuntu của tôi:

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"

Điều này in các chữ cái một b c d tất cả trong các màu sắc khác nhau:

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

Đối với vòng lặp:

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



Bằng cách này: Điều này không phụ thuộc nhiều vào việc cài đặt một phiên bản cụ thể của ubuntu, nhưng sử dụng PuTTY! - urzeit