GNU/Linux >> Tutoriels Linux >  >> Linux

Quel est l'avantage objectif des séquences d'échappement sur Tput ?

Dans le ‘.*rc des personnes ' que je vois en ligne ou dans divers codes, j'ai tendance à voir beaucoup de gens qui utilisent manuellement les séquences d'échappement ANSI au lieu d'utiliser tput .

J'ai compris que tput est plus universel/sûr, donc cela me fait me demander :

Existe-t-il une raison objective pour utiliser des séquences d'échappement à la place de tput ? (Portabilité, robustesse sur les erreurs, terminaux inhabituels… ?)

Réponse acceptée :

tput peut gérer des expressions (par exemple dans sgr et setaf ) que le shell-scripter typique trouverait moins utilisable. Pour avoir une idée de ce qui est impliqué, consultez la sortie de infocmp avec le -f (formatage) option appliquée. Voici l'un des exemples utilisant ces chaînes à partir des descriptions terminfo de 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,

Le formatage divise les choses - un script ou un programme pour faire la même chose devrait suivre ces rebondissements. La plupart des gens abandonnent et utilisent simplement les chaînes les plus simples.

La fonctionnalité 16 couleurs est empruntée à IBM aixterm, qui mappe 16 codes chacun pour le premier plan et l'arrière-plan sur deux plages ;

  • premier plan sur 30-37 et 90-97
  • arrière-plan sur 40-47 et 100-107

Un script simple

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

et la sortie montrent comment cela fonctionne :

      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

Les nombres sont divisés car aixterm utilise les plages 30-37 et 40-47 pour correspondre aux couleurs ECMA-48 (également appelées "ANSI"), et utilise la plage 90-107 pour les codes pas défini dans la norme.

Voici une capture d'écran avec xterm en utilisant TERM=xterm-16color , où vous pouvez voir l'effet.

Connexe :Apprendre l'anglais – Mot pour quelque chose qui est chargé émotionnellement d'une manière qui réduit les chances d'aborder le sujet d'un point de vue objectif ?

Lectures complémentaires :

  • infocmp comparer ou imprimer les descriptions terminfo
  • tput , reset initialiser un terminal ou interroger la base de données terminfo
  • ECMA-48 :Fonctions de contrôle pour les jeux de caractères codés
  • aixterm Commande
  • Les couleurs vives ne sont-elles pas identiques aux couleurs vives ? (FAQ XTerm)

Linux
  1. Les séquences d'échappement Ascii et les appariements de caractères de contrôle font-ils partie d'une norme ?

  2. Supprimer les séquences barre oblique inverse + retour à la ligne ?

  3. Oring avec True dans une commande sur Ssh ?

  4. Itérer sur chaque ligne de la sortie ls -l

  5. Comment différencier les répertoires sur ssh

Couleurs dans les pages de manuel ?

Utiliser un appareil via SSH ?

Btrfs sur mdadm raid6 ?

Échappez un caractère étoile (*) dans bash

Imprimer les couleurs de la console

Les séquences d'échappement en écho ne sont pas interprétées dans Linux tty