Đó là các chuỗi thoát ANSI ; liên kết đó là một biểu đồ mã màu nhưng cũng có những điều thú vị khác trên trang Wikipedia đó. Không phải tất cả chúng đều hoạt động trên (ví dụ) một giao diện điều khiển Linux bình thường.
Điều này là không đúng:
\033]00m\] # white
0
đặt lại thiết bị đầu cuối về mặc định của nó (có lẽ là màu trắng). Mã thực tế cho tiền cảnh màu trắng là 37. Ngoài ra, dấu ngoặc đóng thoát ở cuối ( \]
) không phải là một phần của chuỗi màu (xem một vài đoạn cuối dưới đây để được giải thích về mục đích của chúng khi đặt dấu nhắc).
Lưu ý rằng một số thiết bị đầu cuối GUI cho phép bạn chỉ định bảng màu tùy chỉnh. Điều này sẽ ảnh hưởng đến đầu ra.
Có một danh sách ở đây có thêm 7 màu nền trước và 7 màu nền mà tôi chưa từng thấy trước đây, nhưng chúng dường như hoạt động:
# Foreground colors
90 Dark gray
91 Light red
92 Light green
93 Light yellow
94 Light blue
95 Light magenta
96 Light cyan
# Background colors
100 Dark gray
101 Light red
102 Light green
103 Light yellow
104 Light blue
105 Light magenta
106 Light cyan
Ngoài ra, nếu bạn có thiết bị đầu cuối GUI 256 màu (tôi nghĩ rằng hầu hết trong số chúng hiện nay), bạn có thể áp dụng màu từ biểu đồ này:
Trình tự ANSI để chọn các số này, sử dụng số ở góc dưới bên trái, bắt đầu 38;5;
cho nền trước và 48;5;
cho nền, sau đó là số màu, ví dụ:
echo -e "\\033[48;5;95;38;5;214mhello world\\033[0m"
Cung cấp cho tôi một màu cam nhạt trên da nâu (có nghĩa là biểu đồ màu gần đúng).
Bạn có thể thấy các màu trong biểu đồ 1 này vì chúng sẽ xuất hiện trên thiết bị đầu cuối của bạn khá dễ dàng:
#!/bin/bash
color=16;
while [ $color -lt 245 ]; do
echo -e "$color: \\033[38;5;${color}mhello\\033[48;5;${color}mworld\\033[0m"
((color++));
done
Đầu ra là tự giải thích.
Một số hệ thống đặt biến $ TERM thành xterm-256color
nếu bạn đang ở trên thiết bị đầu cuối 256 màu thông qua một số mã vỏ /etc/profile
. Trên những người khác, bạn sẽ có thể cấu hình thiết bị đầu cuối của bạn để sử dụng này. Điều đó sẽ cho các ứng dụng TUI biết có 256 màu và cho phép bạn thêm một cái gì đó như thế này vào ~/.bashrc
:
if [[ "$TERM" =~ 256color ]]; then
PS1="MyCrazyPrompt..."
fi
Xin lưu ý rằng khi bạn sử dụng các chuỗi thoát màu trong lời nhắc của mình, bạn nên đặt chúng trong \
các dấu ngoặc vuông thoát ( tiền tố), như sau:
PS1="\[\033[01;32m\]MyPrompt: \[\033[0m\]"
Lưu ý phần [
bên trong của chuỗi màu không được thoát, nhưng phần bên trong là. Mục đích của cái sau là để chỉ ra cho shell rằng chuỗi được đính kèm không được tính vào chiều dài ký tự của dấu nhắc. Nếu số đó sai, những điều kỳ lạ sẽ xảy ra khi bạn cuộn qua lịch sử, ví dụ: nếu quá dài, độ dài quá mức của chuỗi cuộn cuối cùng sẽ xuất hiện được đính kèm với lời nhắc của bạn và bạn sẽ không thể lùi lại vào nó (nó bị bỏ qua giống như cách nhắc nhở).
Cũng lưu ý rằng nếu bạn muốn bao gồm đầu ra của lệnh chạy mỗi khi dấu nhắc được sử dụng (trái ngược với chỉ một lần khi lời nhắc được đặt), bạn nên đặt nó dưới dạng một chuỗi bằng chữ với các dấu ngoặc đơn, ví dụ:
PS1='\[\033[01;32m\]$(date): \[\033[0m\]'
Mặc dù đây không phải là một ví dụ tuyệt vời nếu bạn hài lòng với việc sử dụng các lối thoát đặc biệt \d
hoặc \D{format}
nhanh chóng của bash - không phải là chủ đề của câu hỏi nhưng có thể được tìm thấy ở man bash
bên dưới PROMPTING
. Có nhiều lối thoát hữu ích khác như \w
thư mục hiện tại, \u
cho người dùng hiện tại, v.v.
1. Phần chính của biểu đồ này, màu 16 - 231 (lưu ý rằng chúng không theo thứ tự số) là một khối màu 6 x 6 x 6 RGB. "Khối màu" đề cập đến thực tế là không gian màu RGB có thể được biểu diễn bằng mảng ba chiều (với một trục cho màu đỏ, một cho màu xanh lục và một cho màu xanh lam). Mỗi màu trong khối ở đây có thể được biểu diễn dưới dạng tọa độ trong một mảng 6 x 6 x 6 và chỉ số trong biểu đồ được tính như vậy:
16 + R * 36 + G * 6 + B
Màu đầu tiên trong khối, ở chỉ số 16 trong biểu đồ, là màu đen (RGB 0, 0, 0). Bạn có thể sử dụng công thức này trong shell script:
#!/bin/sh
function RGBcolor {
echo "16 + $1 * 36 + $2 * 6 + $3" | bc
}
fg=$(RGBcolor 1 0 2) # Violet
bg=$(RGBcolor 5 3 0) # Bright orange.
echo -e "\\033[1;38;5;$fg;48;5;${bg}mviolet on tangerine\\033[0m"
\]
ở đây thực sự không phải là một phần của chuỗi màu; nó phục vụ một mục đích trong việc thiết lập các lời nhắc cụ thể (tôi đã thêm một vài đoạn vào cuối câu trả lời của tôi về điều này). "Sẽ thật tuyệt nếu có một hình thức dễ đọc hơn nữa." -> cắt n 'dán trong câu trả lời của riêng bạn là một cách để làm điều này.