tputと比較してエスケープシーケンスには客観的な利点はありますか?

tputと比較してエスケープシーケンスには客観的な利点はありますか?

オンラインまたはさまざまなコードで見る人の ''ファイルから.*rc。を使用する代わりに、ANSIエスケープシーケンスを手動で使用している人の多くを見る傾向がありますtput

私の理解はtputより一般的で安全なので、これが気になります。

代わりにエスケープシーケンスを使用する必要がある客観的な理由はありますかtput? (移植性、エラー堅牢性、異常端末…?)

ベストアンサー1

tput一般的なシェルスクリプトの作成者があまり役に立たないと見なす式(inやなど)を処理できますsgrsetaf関連情報を表示するには、infocmp適用(形式)オプションの出力を見てください。-f以下は、xtermでこれらの文字列を使用する例の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色機能はIBM aixtermによって借用されており、前景と背景のそれぞれに16のコードを2つの範囲にマップします。

  • 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はECMA-48(「ANSI」とも呼ばれます)の色を一致させるために30〜37および40〜47の範囲を使用し、コードには90〜107の範囲を使用するため、これらの数字は区別されます。いいえ標準で定義されています。

TERM=xterm-16color以下は、効果を見ることができるxtermの使用のスクリーンショットです。

ここに画像の説明を入力してください。

追加資料:

おすすめ記事