GNU/Linux >> Linux Esercitazione >  >> Linux

Vantaggio dell'obiettivo per sfuggire alle sequenze su Tput?

Nelle persone '.*rc ' file che vedo online o in vari codici, tendo a vedere molte persone che usano manualmente sequenze di escape ANSI invece di usare tput .

Ho capito che tput è più universale/sicuro, quindi questo mi fa pensare:

C'è qualche ragione oggettiva per cui si dovrebbero usare sequenze di escape al posto di tput ? (Portabilità, robustezza agli errori, terminali insoliti…?)

Risposta accettata:

tput può gestire espressioni (ad esempio in sgr e setaf ) che il tipico scripter di shell troverebbe meno che utilizzabile. Per avere un'idea di ciò che è coinvolto, vedere l'output da infocmp con il -f opzione (formattazione) applicata. Ecco uno degli esempi che utilizzano quelle stringhe dalle descrizioni terminfo di 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,

La formattazione divide le cose:uno script o un programma per fare lo stesso dovrebbe seguire quei colpi di scena. La maggior parte delle persone si arrende e usa solo le corde più facili.

La funzione a 16 colori è presa in prestito da IBM aixterm, che mappa 16 codici ciascuno per il primo piano e lo sfondo su due intervalli;

  • in primo piano su 30-37 e 90-97
  • sfondo su 40-47 e 100-107

Un semplice script

#!/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

e l'output mostra come funziona:

      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

I numeri sono suddivisi perché aixterm utilizza gli intervalli 30-37 e 40-47 per abbinare i colori ECMA-48 (noti anche come "ANSI") e utilizza l'intervallo 90-107 per i codici non definito nella norma.

Ecco uno screenshot con xterm usando TERM=xterm-16color , dove puoi vedere l'effetto.

Correlati:Impara l'inglese - Parola per qualcosa che è emotivamente carico in un modo che riduce le possibilità di avvicinarsi all'argomento da un punto di vista oggettivo?

Ulteriori letture:

  • infocmp confronta o stampa le descrizioni di terminfo
  • tput , reset inizializzare un terminale o interrogare un database terminfo
  • ECMA-48:funzioni di controllo per set di caratteri codificati
  • aixterm Comando
  • I colori accesi non sono uguali a quelli audaci? (FAQ XTerm)

Linux
  1. Come sfuggire alle citazioni in Shell?

  2. Ssh – Reindirizza Stdout su Ssh?

  3. Rimuovere la barra rovesciata + le sequenze di nuova riga?

  4. Escape stringhe da inserire tramite curl?

  5. Le sequenze di escape del colore terminale sono definite ovunque per Bash?

Colori nelle pagine uomo?

Btrfs su mdadm raid6?

Sfuggi a un carattere asterisco (*) in bash

Stampa i colori della console

Qual è il vantaggio di /etc/apt/sources.list.d rispetto a /etc/apt/sources.list

Le sequenze di escape con eco non vengono interpretate in Linux tty