人々の「.*rc
‘オンラインまたはさまざまなコードで表示されるファイルでは、tput
を使用する代わりにANSIエスケープシーケンスを手動で使用する人が多い傾向があります。 。
tput
より普遍的で安全なので、これは私に不思議に思います:
tput
の代わりにエスケープシーケンスを使用する必要がある客観的な理由はありますか ? (携帯性、エラーに対する堅牢性、異常な端末…?)
承認された回答:
tput
式を処理できます(たとえば、sgr
およびsetaf
)これは、一般的なシェルスクリプターでは使用できないと思われます。何が関係しているかを知るには、infocmp
からの出力を参照してください。 -f
を使用 (フォーマット)オプションが適用されます。 xtermのterminfoの説明からこれらの文字列を使用した例の1つを次に示します。
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色の機能はIBMaixtermから借用しており、前景と背景の16個のコードをそれぞれ2つの範囲にマッピングします。
- 前景を30-37、90-97に
- 40-47、100-107の背景
簡単なスクリプト
#!/bin/sh
TERM=xterm-16color
export TERM
printf ' %12s %12sn' Foreground Background
for n in $(seq 0 15)
do
F=$(tput setaf $n | cat -v)
B=$(tput setab $n | cat -v)
printf '%2d %12s %12sn' $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はECMA-48(「ANSI」とも呼ばれます)の色と一致するように30-37と40-47の範囲を使用し、コードには90-107の範囲を使用するため、数値は分割されます。 標準で定義されています。
これは、TERM=xterm-16color
を使用したxtermのスクリーンショットです。 、効果を確認できます。
さらに読む:
-
infocmp
–terminfoの説明を比較または印刷する -
tput
、reset
–ターミナルまたはクエリterminfoデータベースを初期化します - ECMA-48:コード化された文字セットの制御機能
-
aixterm
コマンド - 明るい色は太字と同じではありませんか? (XTerm FAQ)