tput
สามารถจัดการกับนิพจน์ (เช่นในsgr
และsetaf
) ซึ่ง shell-scripter ทั่วไปจะพบว่าใช้งานได้น้อยกว่า หากต้องการทราบว่าเกี่ยวข้องกับอะไรให้ดูผลลัพธ์จากinfocmp
การ-f
ใช้ตัวเลือก (การจัดรูปแบบ) นี่คือตัวอย่างหนึ่งที่ใช้สตริงเหล่านั้นจากคำอธิบาย terminfoของ 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,
การจัดรูปแบบแยกสิ่งต่าง ๆ ออกไป - สคริปต์หรือโปรแกรมที่จะทำเช่นเดียวกันจะต้องติดตามการบิดและการหมุนเหล่านั้น คนส่วนใหญ่ยอมแพ้และใช้สายที่ง่ายที่สุด
คุณลักษณะ 16 สีถูกยืมจาก IBM aixterm ซึ่งแม็พรหัส 16 รหัสสำหรับพื้นหน้าและพื้นหลังลงบนสองช่วง
- เบื้องหน้าสู่ 30-37 และ 90-97
- พื้นหลังลงบน 40-47 และ 100-107
สคริปต์ง่าย ๆ
#!/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
และเอาท์พุทแสดงวิธีการทำงาน:
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
ตัวเลขถูกแบ่งออกเนื่องจาก aixterm ใช้ช่วง 30-37 และ 40-47 เพื่อจับคู่สี ECMA-48 (หรือที่เรียกว่า "ANSI") และใช้ช่วง 90-107 สำหรับรหัสที่ไม่ได้กำหนดไว้ในมาตรฐาน
นี่คือภาพหน้าจอที่ใช้ xterm TERM=xterm-16color
ซึ่งคุณสามารถเห็นเอฟเฟกต์
อ่านเพิ่มเติม:
printf
และ ANSI escape sequences แต่tput
ล้มเหลว (อย่างน้อยก็ในกล่องของฉัน)