Terminal
轉義序列比 tput 有什麼客觀好處嗎?
在我在網上看到的人們的 ’
.*rc
’ 文件或各種程式碼中,我傾向於看到很多人手動使用 ANSI 轉義序列而不是使用tput
.我有更普遍/更安全的理解
tput
,所以這讓我想知道:是否有任何客觀原因應該使用轉義序列代替
tput
?(可移植性、對錯誤的強韌性、異常終端……?)
tput
可以處理典型的 shell-scripter 會發現不太可用的表達式(例如 insgr
和)。setaf
要了解所涉及的內容,請查看應用infocmp
了-f
(格式化)選項的輸出。這是使用 xterm 的terminfo 描述中的這些字元串的範例之一: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 using 的螢幕截圖
TERM=xterm-16color
,您可以在其中看到效果。進一步閱讀: