En .*rc
los archivos de las personas que veo en línea o en varios códigos, tiendo a ver a muchas personas que usan manualmente secuencias de escape ANSI en lugar de usar tput
.
Comprendí que tput
es más universal / seguro, así que esto me hace preguntarme:
¿Hay alguna razón objetiva por la que uno deba usar secuencias de escape en lugar de tput
? (Portabilidad, robustez ante errores, terminales inusuales ...?)
terminal
escape-characters
tput
Capitán Hombre
fuente
fuente
printf
secuencias de escape ANSI, perotput
falla (al menos en mi caja).Respuestas:
tput
puede manejar expresiones (por ejemplo ensgr
ysetaf
) que el shell-scripter típico encontraría menos que utilizables. Para tener una idea de lo que está involucrado, vea el resultadoinfocmp
con la-f
opción (formateo) aplicada. Aquí hay uno de los ejemplos que usan esas cadenas de las descripciones terminfo de xterm :El formato divide las cosas: un script o programa para hacer lo mismo tendría que seguir esos giros y vueltas. La mayoría de las personas se rinden y solo usan las cuerdas más fáciles.
La característica de 16 colores está prestada de IBM aixterm, que asigna 16 códigos cada uno para el primer plano y el fondo en dos rangos;
Un guion simple
y la salida muestran cómo funciona:
Los números se dividen porque aixterm usa los rangos 30-37 y 40-47 para que coincidan con los colores ECMA-48 (también conocido como "ANSI"), y usa el rango 90-107 para códigos no definidos en el estándar.
Aquí hay una captura de pantalla con xterm usando
TERM=xterm-16color
, donde puedes ver el efecto.Otras lecturas:
infocmp
- comparar o imprimir descripciones de terminfotput
,reset
- inicializar un terminal o consultar la base de datos terminfoaixterm
Mandofuente
Viniendo de una época en que las plataformas UNIX podían tener una variedad de dispositivos conectados a ellas, todavía prefiero tput y sus amigos a las secuencias de escape literales.
Creo que la verdadera razón es que la mayoría de la gente simplemente no sabe acerca de
tput
susterminfo
/termcap
archivos y bibliotecas asociadas .fuente
Una de las razones es que
tput
es el comando externo, por lo que puede ejecutarse más lentamente que los códigos de escape de shell integrados. Otra cosa es que uno puede crear fácilmente un revestimiento que combina códigos de escape ANSI con caracteres escapados específicos del shell, comobash
por ejemplo en el indicador:de manera similar en
zsh
:Aquí todo es claro y compacto. Con
tput
uno necesitaría dividirlo en varias líneas o hacer que sea una línea mucho más larga y compleja, ejecutartput
varias veces, etc.fuente
PS1="$(tput setaf 2)\u@\h$(tput reset) >
$(tput sgr0)
para el final, pero aceptar que tput es una mejora.