GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Ny objektiver Vorteil, um Sequenzen über Tput zu entkommen?

In „.*rc der Leute ‘-Dateien, die ich online oder in verschiedenen Codes sehe, sehe ich viele Leute, die ANSI-Escape-Sequenzen manuell verwenden, anstatt tput zu verwenden .

Ich hatte das Verständnis, dass tput ist universeller/sicherer, also frage ich mich:

Gibt es einen objektiven Grund, warum man Escape-Sequenzen anstelle von tput verwenden sollte? ? (Portabilität, Robustheit gegenüber Fehlern, ungewöhnliche Endgeräte…?)

Akzeptierte Antwort:

tput kann mit Ausdrücken umgehen (zum Beispiel in sgr und setaf ), die der typische Shell-Scripter nicht brauchbar finden würde. Sehen Sie sich die Ausgabe von infocmp an, um eine Vorstellung davon zu bekommen, worum es geht mit dem -f (Formatierungs-)Option angewendet. Hier ist eines der Beispiele, die diese Zeichenfolgen aus den terminfo-Beschreibungen von xterm verwenden:

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,

Die Formatierung teilt die Dinge auf – ein Skript oder Programm, das dasselbe tut, müsste diesen Drehungen und Wendungen folgen. Die meisten Leute geben auf und verwenden einfach die einfachsten Saiten.

Die 16-Farben-Funktion ist von IBM aixterm entlehnt, das jeweils 16 Codes für Vorder- und Hintergrund auf zwei Bereiche abbildet;

  • Vordergrund auf 30-37 und 90-97
  • Hintergrund auf 40-47 und 100-107

Ein einfaches Skript

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

und Ausgabe zeigen, wie es funktioniert:

      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

Die Nummern sind aufgeteilt, weil aixterm die Bereiche 30–37 und 40–47 verwendet, um ECMA-48-Farben (auch bekannt als „ANSI“) abzugleichen, und den Bereich 90–107 für Codes nicht verwendet im Standard definiert.

Hier ist ein Screenshot mit xterm unter Verwendung von TERM=xterm-16color , wo Sie den Effekt sehen können.

Verwandte:Englisch lernen – Wort für etwas, das emotional so aufgeladen ist, dass es die Chancen verringert, sich dem Thema von einem objektiven Standpunkt aus zu nähern?

Weiterführende Literatur:

  • infocmp termininfo-Beschreibungen vergleichen oder ausdrucken
  • tput , reset ein Terminal initialisieren oder Termininfo-Datenbank abfragen
  • ECMA-48:Kontrollfunktionen für codierte Zeichensätze
  • aixterm Befehl
  • Sind helle Farben nicht dasselbe wie kräftig? (XTerm-FAQ)

Linux
  1. Sind ASCII-Escape-Sequenzen und Steuerzeichenpaare Teil eines Standards?

  2. Escape-Strings sollen über Curl gepostet werden?

  3. Oring mit True in einem Befehl über SSH?

  4. Wie überschleife ich Verzeichnisse in Linux?

  5. Wie man entkommt! im Passwort?

Wie entkomme ich Zitaten in der Shell?

Farben in Manpages?

Escape einem Sternzeichen (*) in der Bash

Konsolenfarben drucken

Was ist der Vorteil von /etc/apt/sources.list.d gegenüber /etc/apt/sources.list

Echo-Escape-Sequenzen werden in Linux tty nicht interpretiert