Giới thiệu
Sản phẩm echo
lệnh xuất một chuỗi nhất định cho ống đầu ra tiêu chuẩn, thường trỏ đến thiết bị đầu cuối. Mặc dù đường ống đầu ra tiêu chuẩn có thể trỏ đến các giao diện khác - echo
lệnh thường được sử dụng để in và hiển thị thông báo trong thiết bị đầu cuối. Theo mặc định, văn bản của văn bản được hiển thị sẽ thừa hưởng màu của văn bản khác trong thiết bị đầu cuối (có thể tùy chỉnh trong và của chính nó). Tuy nhiên - có một số cách bạn có thể thay đổi màu đầu ra của echo
- cho cả các chuỗi riêng lẻ và cho toàn bộ thư.
Trong hướng dẫn ngắn này, chúng ta sẽ xem xét cách bạn có thể thay đổi màu đầu ra của
echo
trong các hệ thống dựa trên Linux, sử dụng mã thoát ANSI,tput
và cách bạn có thể làm cho quá trình này ít dài dòng hơn trong các tập lệnh Bash.
Thay đổi màu đầu ra với mã thoát ANSI
Cách dễ nhất để thay đổi màu là thông qua các chuỗi / mã thoát ANSI. Tất cả các mã thoát ANSI bắt đầu bằng Escape
, có thể được biểu diễn ở nhiều định dạng khác nhau - 27
trong số thập phân, x1B
trong hệ thập lục phân, làm phím điều khiển ^[
, hoặc là 33
ở định dạng bát phân. Các trình tự sau đó được theo sau bởi lệnh:
33[command
Nơi mở ngoặc (Trình giới thiệu trình tự điều khiển) là tùy chọn, nhưng giúp tách lệnh khỏi ký tự thoát. Khi bạn đặt một mã màu như lệnh, nó thay đổi màu của văn bản đang đến:
33[0;34
0;34
là mã cho màu xanh lam, chẳng hạn. Chỉ với điều này, bạn có thể thay đổi màu của văn bản trong echo
với:
33[0;34Text
Ở đâu Text
sẽ có màu xanh lam. Ngoài ra, hãy xem xét một tập lệnh bash đơn giản để in “Chào mừng đến với Pháp” trong màu cờ Pháp:
#!/bin/bash
BLUE='33[0;34m'
WHITE= '33[0;37m'
RED= '33[0;31m'
echo -e "${Blue}Welcome ${WHITE}to ${RED}France"
Tùy chọn -e
cờ của echo
lệnh cho phép bạn sử dụng các ký tự đặc biệt như n
(dòng mới) và t
(tab) bên trong chuỗi đầu vào.
Khi bạn chạy tập lệnh:
$ ./colors.sh
Nó dẫn đến:
Mã ANSI không giới hạn ở màu sắc - nhưng cũng có thể được áp dụng cho kiểu dáng. Các mã 0..9
đại diện cho các kiểu văn bản, trong khi các mã 30...37
đại diện cho màu sắc:
Màu | Mã số | Kiểu văn bản | Mã số |
Đen | 30 | Văn bản đơn giản | 0 |
đỏ | 31 | Chữ in đậm | 1 |
màu xanh lá | 32 | Văn bản cường độ thấp | 2 |
Nâu / cam | 33 | Gạch chân văn bản | 4 |
Màu xanh da trời | 34 | Văn bản nhấp nháy | 5 |
Màu tím | 35 | Văn bản ẩn | 8 |
Cyan | 36 | Văn bản gạch ngang | 9 |
Xám nhạt | 37 |
Hãy tạo một tập lệnh bash để khám phá một số tùy chọn sau:
#!/bin/bash
echo -e "33[0;33mSample text"
echo -e "33[1;33mBold text"
echo -e "33[2;33mLow intensity text"
echo -e "33[4;33mUnderline text"
echo -e "33[5;33mBlinking text"
echo -e "33[8;33mInvisible text"
echo -e "33[9;33mStrikethrough text"
Chạy tập lệnh này dẫn đến:
Xem hướng dẫn thực hành, thực tế của chúng tôi để học Git, với các phương pháp hay nhất, các tiêu chuẩn được ngành công nghiệp chấp nhận và bảng lừa đảo đi kèm. Dừng lệnh Googling Git và thực sự học nó!
Tương tự, bạn có thể thay đổi màu nền của các văn bản này bằng cách sử dụng mã 40..47
:
màu sắc | Mã số |
Đen | 40 |
đỏ | 41 |
màu xanh lá | 42 |
Nâu / cam | 43 |
Màu xanh da trời | 44 |
Màu tím | 45 |
Cyan | 46 |
Xám nhạt | 47 |
Việc thay đổi nền của một chuỗi đã cho sẽ tuân theo quy tắc tương tự như khi thay đổi màu phông chữ - bản thân mã sẽ thay đổi hành vi:
#!/bin/bash
BLUE='33[0;44m'
BLACK='33[0;30m'
WHITE='33[0;30;47m'
RED='33[0;41m'
echo -e "${BLUE}Welcome ${WHITE}to ${RED}France"
Lưu ý: Theo quy tắc chung - bạn có thể dịch màu phông chữ sang màu nền bằng cách thêm 10. 30
là màu phông chữ đen, 40
là màu nền đen.
Thay đổi màu đầu ra với tput
Một giải pháp thay thế cho mã ANSI đang sử dụng tput
chỉ huy:
$ tput setaf color_code
setf
cho phép 8 màu, trong khi setaf
cho phép 256 màu, do đó, tùy thuộc vào lệnh bạn đang sử dụng, bạn có thể đi giữa 0..7
và 0..255
như các mã màu. Cả hai lệnh dành riêng 0..7
với các mã màu giống nhau, trong khi với setaf
, 8..15
là những màu có cường độ cao và 16..231
là các màu khác nhau của 8 màu đầu tiên, và 232..255
là các màu thang độ xám:
Tín dụng: Wikipedia
Ngoài ra, thẻ cào tput
cũng cho phép bạn thay đổi màu nền, thêm đậm, giảm cường độ, v.v. bằng các lệnh khác:
Kiểu văn bản | Lệnh |
Màu nền | setaf |
Màu nền | thiết lập |
Không có phong cách | sgv0 |
Chữ in đậm | đậm |
Văn bản cường độ thấp | Sun. |
Gạch chân văn bản | ủ rũ |
Văn bản nhấp nháy | nháy mắt |
Đảo ngược văn bản | vòng quay |
Hãy tạo một tập lệnh khác sử dụng tput
để thay đổi màu đầu ra echo
:
#!/bin/bash
YELLOW=`tput setaf 3`
echo "${YELLOW}Changing"
WHITE=`tput setaf 7 bold`
echo "${WHITE}Colors"
BLUE=`tput setaf 4 smul`
echo "${BLUE}With tput"
CYAN=`tput setaf 6 blink`
echo "${CYAN}is less"
RED=`tput setab 1 setaf 7`
echo "${RED}verbose!"
Tập lệnh này sẽ in đầu ra sau trong thiết bị đầu cuối:
Lệnh tput cung cấp một cách dễ dàng để in bất kỳ màu nào thông qua một mã màu đơn giản. Bây giờ, hãy tạo một tập lệnh có thể in mọi mã màu có sẵn cho lệnh tput:
#!/bin/bash
tput init
end = $ (($ (tput colors) - 1))
w = 1
for c
in $ (seq 0 $end)
do
eval "$(printf " tput setaf % 3 s " " $c ")"
echo - n "$_"
[[$c - ge $ ((w * 2))]]
offset = 2 || offset = 0
[[$ (((c + offset) % (w - offset))) - eq $ (((w - offset) - 1))]]
echo
done
tput init
Nó sẽ in từ 0 đến 255 màu và mã của chúng:
Kết luận
Trong hướng dẫn ngắn này - chúng tôi đã xem xét cách bạn có thể thay đổi màu của echo
đầu ra của Linux - sử dụng ANSI Escape Sequences và tput
chỉ huy.
Chúng tôi cũng đã khám phá cách bạn có thể làm cho quá trình ít dài dòng hơn bằng cách sử dụng các biến Bash, tinh chỉnh màu nền và văn bản kiểu.