tput
có thể xử lý các biểu thức (ví dụ trong sgr
và setaf
) mà trình biên dịch shell điển hình sẽ tìm thấy ít hơn mức có thể sử dụng. Để có ý tưởng về những gì liên quan, hãy xem kết quả đầu ra infocmp
với -f
tùy chọn (định dạng) được áp dụng. Đây là một trong những ví dụ sử dụng các chuỗi từ mô tả terminfo của xterm :
xterm-16color|xterm with 16 colors,
colors#16,
pairs#256,
setab=\E[
%?
%p1%{8}%<
%t%p1%{40}%+
%e
%p1%{92}%+
%;%dm,
setaf=\E[
%?
%p1%{8}%<
%t%p1%{30}%+
%e
%p1%{82}%+
%;%dm,
setb=
%p1%{8}%/%{6}%*%{4}%+\E[%d%p1%{8}%m%Pa
%?%ga%{1}%=
%t4
%e%ga%{3}%=
%t6
%e%ga%{4}%=
%t1
%e%ga%{6}%=
%t3
%e%ga%d
%;
m,
setf=
%p1%{8}%/%{6}%*%{3}%+\E[%d%p1%{8}%m%Pa
%?%ga%{1}%=
%t4
%e%ga%{3}%=
%t6
%e%ga%{4}%=
%t1
%e%ga%{6}%=
%t3
%e%ga%d
%;
m,
use=xterm+256color,
use=xterm-new,
Định dạng chia nhỏ mọi thứ - một kịch bản hoặc chương trình để làm tương tự sẽ phải tuân theo các vòng xoắn và lượt đó. Hầu hết mọi người bỏ cuộc và chỉ sử dụng các chuỗi dễ nhất.
Tính năng 16 màu được mượn từ IBM aixterm, ánh xạ 16 mã mỗi mã cho tiền cảnh và nền trên hai phạm vi;
- tiền cảnh vào 30-37 và 90-97
- nền 40-47 và 100-107
Một kịch bản đơn giản
#!/bin/sh
TERM=xterm-16color
export TERM
printf ' %12s %12s\n' Foreground Background
for n in $(seq 0 15)
do
F=$(tput setaf $n | cat -v)
B=$(tput setab $n | cat -v)
printf '%2d %12s %12s\n' $n "$F" "$B"
done
và đầu ra cho thấy cách nó hoạt động:
Foreground Background
0 ^[[30m ^[[40m
1 ^[[31m ^[[41m
2 ^[[32m ^[[42m
3 ^[[33m ^[[43m
4 ^[[34m ^[[44m
5 ^[[35m ^[[45m
6 ^[[36m ^[[46m
7 ^[[37m ^[[47m
8 ^[[90m ^[[100m
9 ^[[91m ^[[101m
10 ^[[92m ^[[102m
11 ^[[93m ^[[103m
12 ^[[94m ^[[104m
13 ^[[95m ^[[105m
14 ^[[96m ^[[106m
15 ^[[97m ^[[107m
Các số được chia ra vì aixterm sử dụng các phạm vi 30-37 và 40-47 để khớp với các màu ECMA-48 (còn được gọi là "ANSI") và sử dụng phạm vi 90-107 cho các mã không được xác định trong tiêu chuẩn.
Dưới đây là một ảnh chụp màn hình với xterm sử dụng TERM=xterm-16color
, nơi bạn có thể thấy hiệu ứng.
Đọc thêm:
printf
và các chuỗi thoát ANSI, nhưngtput
không thành công (ít nhất là trên hộp của tôi).