¿Hay alguna página de manual para la salida de color shell?

23

Ya sabes, esa salida coloreada hecha por secuencias especiales de caracteres, por ejemplo:

echo -e "\e[34m Hello\n \e[0m"

Esto producirá la palabra "Hola" coloreada en azul. Para hacer esto tuve que buscar en la web, y es difícil, porque diferentes fuentes pueden decir algo diferente. Pensé que debía haber algunos manuales, pero no pude encontrarlos. Incluso con apropos coloro algo similar. Entonces, la pregunta es: ¿dónde puedo encontrar manuales confiables?

Sergio
fuente
2
Está buscando documentación sobre los códigos de escape ANSI. (Tiendo a usar la página de Wikipedia cuando necesito buscar una.)
chepner el
Tenga en cuenta que no necesariamente necesita conocer esas secuencias de escape. Varios shells (tcsh, zsh, fish al menos) tienen soporte incorporado para generar en colores sin tener que escribir explícitamente esas secuencias.
Stéphane Chazelas

Respuestas:

27

Hay demasiadas fuentes de información para enumerar en esta página:

  • El comando echo -eusa una extensión para representar \eASCII 27 (octal 33 o "\ 033"). La forma portátil de imprimir estos usos printf(POSIX). Comparar con estándar echo(POSIX).
  • Su ejemplo puede reescribirse como

    printf "\033[34m Hello\n \033[0m"

  • El estándar para los escapes de color es ECMA-48 (Funciones de control para juegos de caracteres codificados).
  • En ECMA-48, 8.3.117 SGR - SELECCIONAR RENDICIÓN GRÁFICA enumera las secuencias de control para configurar 8 colores de primer plano y 8 de fondo.
  • También enumera los códigos 39/49 "color de pantalla predeterminado (definido por la implementación)" y 38/48 "reservado para la estandarización futura; destinado a establecer el color de primer plano de los caracteres como se especifica en ISO 8613-6 [Recomendación CCITT T.416]". Es decir, hay una recomendación de otra organización pero no fue (hasta ahora, después de 24 años) parte de la norma.
  • al leerlo detenidamente, puede notar que el estándar es vago en muchos lugares, lo que permite diferentes interpretaciones. Describe la sintaxis de estas secuencias de control pero no describe su comportamiento . Para eso, debe ir a la documentación de los terminales respectivos.
  • La documentación para xterm se encuentra en Secuencias de control de XTerm , que supone una familiaridad con la documentación de DEC que se encuentra en http://vt100.net
  • para otros terminales, sus páginas de manual pueden enumerar los controles (como se hizo para la consola de Linux en console_codes ).
  • otros terminales se documentan como "xterm"; para discusión vea las preguntas frecuentes de xterm Comparación de versiones, contando los controles . Afortunadamente, los controles de color son en su mayoría compatibles (pero vea las preguntas frecuentes de ncurses Mi terminal muestra algunos espacios sin color ).
  • también puede leer las páginas del manual para tput, que le permite usar terminfocapacidades en un script de shell. Su ejemplo podría reescribirse como

    printf '%s\n' "$(tput setaf 4)Hello$(tput setaf 0)"
    
  • Algunas fuentes, como Bash Prompt HOWTO y Advanced Bash-Scripting Guide, mencionan el color, pero (incluso estos), por regla general, tienen lagunas y omisiones y no son útiles con respecto a ECMA-48.

  • La mayoría de las otras fuentes que encontrará con una copia de búsqueda en la web de otras fuentes (como las citadas), etc., y por lo general prestan poca atención al estándar real.
Thomas Dickey
fuente
La sección relevante en ECMA-48 parece ser 8.3.117 - "SGR - SELECCIONAR RENDICIÓN GRÁFICA". Tiene las únicas menciones de la palabra "azul", y los códigos encontrados allí funcionan al menos en mi XTerm.
l0b0
sí, agregaré una aclaración.
Thomas Dickey
2
Es una respuesta realmente genial, desearía que todas las respuestas fueran como las suyas
Sergio
1
xterm también admite el modo de 256 colores, presumiblemente esto está documentado en uno de los manuales anteriores.
sendmoreinfo
Visite wynnnetherland.com/journal/… para obtener un montón de información útil que incluye el paquete grc que puede hacer todo tipo de cosas para colorear con salida de comandos.
Joe