GNU/Linux >> Znalost Linux >  >> Linux

Ny Objektivní přínos pro únik sekvencí přes Tput?

V lidovém ‘.*rc ‘ soubory, které vidím online nebo v různém kódu, mám tendenci vidět mnoho lidí, kteří ručně používají escape sekvence ANSI namísto použití tput .

Pochopil jsem, že tput je univerzálnější/bezpečnější, takže mě to zajímá:

Existuje nějaký objektivní důvod, proč bychom měli místo tput používat escape sekvence ? (Přenositelnost, odolnost proti chybám, neobvyklé terminály…?)

Přijatá odpověď:

tput dokáže zpracovat výrazy (například v sgr a setaf ), které by typický shell-scripter považoval za méně než použitelné. Chcete-li získat představu o tom, co to obnáší, podívejte se na výstup z infocmp pomocí -f byla použita možnost (formátování). Zde je jeden z příkladů použití těchto řetězců z popisů terminfo 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,

Formátování věci rozděluje – skript nebo program, který by udělal totéž, by musel tyto zvraty sledovat. Většina lidí to vzdá a použije ty nejjednodušší řetězce.

Funkce 16 barev je vypůjčena od IBM aixterm, která mapuje 16 kódů pro popředí a pozadí do dvou rozsahů;

  • v popředí na 30-37 a 90-97
  • pozadí na 40-47 a 100-107

Jednoduchý 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

a výstup ukazují, jak to funguje:

      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

Čísla jsou rozdělena, protože aixterm používá rozsahy 30-37 a 40-47, aby odpovídaly barvám ECMA-48 (také známé jako „ANSI“), a pro kódy ne používá rozsah 90-107 definované ve standardu.

Zde je snímek obrazovky s xterm pomocí TERM=xterm-16color , kde můžete vidět efekt.

Související:Naučte se anglicky – slovo pro něco, co je emocionálně nabité způsobem, který snižuje šance na přiblížení předmětu z objektivního úhlu pohledu?

Další čtení:

  • infocmp porovnejte nebo vytiskněte popisy terminfo
  • tput , reset inicializovat terminálovou nebo dotazovací databázi terminfo
  • ECMA-48:Ovládací funkce pro kódované znakové sady
  • aixterm Příkaz
  • Nejsou světlé barvy to samé jako tučné? (Nejčastější dotazy k XTerm)

Linux
  1. Ssh – přesměrovat Stdout přes Ssh?

  2. Ssh – Proč je Firefox tak pomalý oproti Ssh?

  3. Escape Strings, které mají být zveřejněny přes Curl?

  1. Iterování přes každý řádek výstupu ls -l

  2. Jak porovnávat adresáře přes ssh

  3. Btrfs přes mdadm raid6?

  1. Escape znak hvězdičky (*) v bash

  2. Tisk barev konzoly

  3. Echoed escape sekvence nejsou v Linuxu tty interpretovány