GNU/Linux >> Linux の 問題 >  >> Linux

Tputを超えてシーケンスをエスケープするためのNyの客観的な利点?

人々の「.*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)

Linux
  1. Ssh – Sshを介してStdoutをリダイレクトしますか?

  2. Ssh – FirefoxがSshよりも遅いのはなぜですか?

  3. エスケープ文字列をCurl経由で投稿しますか?

  1. ターミナルカラーエスケープシーケンスはBashのどこでも定義されていますか?

  2. Sshを介したコマンドでTrueを使用しますか?

  3. Linuxでディレクトリをループする方法は?

  1. ls -l 出力の各行を繰り返す

  2. SSH 経由でデバイスを使用しますか?

  3. bash でアスタリスク (*) 文字をエスケープする