Trên một số thiết bị đầu cuối tương thích với XTerm / ANSI (như xterm
và gnome-terminal
), bạn có thể đặt màu bằng bảng màu lớn hơn bảng màu 8/16 mặc định (ví dụ: sử dụng bảng màu 88 màu, 256 màu hoặc 16777216 màu (RGB) ; cả hai xterm
và gnome-terminal
hỗ trợ cả bảng màu 256 màu và bảng màu 16777216 (RGB)); lưu ý rằng shell có thể ghi đè lên điều này (đây là trường hợp ví dụ zsh
).
Đây là tập lệnh liệt kê các màu trong bảng màu 256 cùng với mã màu ANSI của chúng trong các thiết bị đầu cuối tương thích với XTerm / ANSI với bảng màu 256 hỗ trợ:
#!/bin/bash
for((i=16; i<256; i++)); do
printf "\e[48;5;${i}m%03d" $i;
printf '\e[0m';
[ ! $((($i - 15) % 6)) -eq 0 ] && printf ' ' || printf '\n'
done


Tùy thuộc vào việc bạn muốn áp dụng màu cho nền trước hay nền sau, sử dụng <fg_bg>
giá trị 38
hoặc 48
(tương ứng) trong lệnh sau:
printf '\e[<fg_bg>;5;<ANSI_color_code>m'
Ví dụ: để đặt màu nền trước ( <fg_bg>
= 38
) thành màu đỏ ( <ANSI_color_code>
= 196
) và màu nền ( <fg_bg>
= 48
) thành màu đen ( <ANSI_color_code>
= 0
):
printf '\e[38;5;196m Foreground color: red\n'
printf '\e[48;5;0m Background color: black\n'

Cần phải vẽ lại lời nhắc bằng cách sử dụng printf '\e[K'
màu nền để áp dụng cho toàn bộ dòng và để màu nền trước áp dụng cho con trỏ:
Điều tương tự có thể được thực hiện bằng cách sử dụng các giá trị RGB thay vì mã màu ANSI trong một thiết bị đầu cuối tương thích; tùy thuộc vào việc bạn muốn áp dụng màu cho nền trước hay nền, sử dụng <fg_bg>
giá trị 38
hoặc 48
(tương ứng) trong lệnh sau:
printf '\e[<fg_bg>;2;<R>;<G>;<B>m'
Ví dụ: để đặt màu nền trước ( <fg_bg>
= 38
) thành màu đỏ ( <R>
= 255
, <G>
= 0
, <B>
= 0
) và màu nền ( <fg_bg>
= 48
) thành màu đen ( <R>
= 0
, <G>
= 0
, <B>
= 0
):
printf '\e[38;2;255;0;0m Foreground color: red\n'
printf '\e[48;2;0;0;0m Background color: black\n'

Một lần nữa, cần phải vẽ lại lời nhắc bằng cách sử dụng printf '\e[K'
màu nền để áp dụng cho toàn bộ dòng và để màu nền trước được áp dụng cho con trỏ:

Sử dụng một trong hai phương pháp, bạn có thể sử dụng printf '\e[0m'
để đặt lại tất cả các thuộc tính:
