2009-07-06 5 views
8

Quiero tomar cualquier programa que salga a la pantalla, atrape la salida y coloree ciertas palabras clave antes de que salgan a la pantalla. Por ejemplo, aquí está la salida normal del programa:¿Cómo se colorean automáticamente las salidas del programa en un shell bash?

bash# <program> 
blah blah blah  <-- this output has no color 

vs

bash# <program> 
blah blah blah  <-- this output is colorful 

Lo ideal sería que no importa qué es el programa. Solo estoy buscando una buena manera de incorporar más color a mis konsoles.

Editar: Lo sentimos, debería haber sido claro. No intento simplemente colorear los resultados del script de shell.

+0

Dale sugerencia de Pete intentarlo: yourprogram | ACK --passthru - color "(keyword1 | keyword2 | keyword3)" –

Respuesta

7
#!/bin/sh 
redf=$(tput setaf 1) 
redb=$(tput setab 1) 
reset=$(tput op) 
echo "${redf}red${reset} in front, ${redb}red${reset} in back" 

Para obtener una lista larga de capacidades de terminal, consulte terminfo. Un $TERM con el sufijo -m (por ejemplo ansi-m) significa que la pantalla está en blanco y negro, pero siempre y cuando las obras de color, las siguientes características de cadena debe ser no vacía:

 
     enter_bold_mode    bold   md  turn on bold (extra 
                  bright) mode 
     enter_italics_mode   sitm   ZH  Enter italic mode 
     enter_reverse_mode   rev   mr  turn on reverse 
                  video mode 
     orig_pair      op   op  Set default pair to 
                  its original value 
     set_a_background    setab  AB  Set background 
                  color to #1, using 
                  ANSI escape 
     set_a_foreground    setaf  AF  Set foreground 
                  color to #1, using 
                  ANSI escape 

Colores 0-7 son bastante estándar: negro, rojo, verde, amarillo, azul, magenta, cian, blanco. Más allá de eso puede no existir o puede ser más variable.

3

Puede escribir un script de coloreado. Hay una excelente guía aquí http://www.faqs.org/docs/abs/HTML/colorizing.html

+0

Ugh ... realmente no debería decirle a la gente que use ANSI o VT10x escapa manualmente. termcap y terminfo han existido durante * eons * con el fin de mantener todo tipo de información específica de la terminal como esta. – ephemient

+0

@ephemient, excepto que nadie usa un terminal real desde hace décadas, y ahora es solo un estándar de software: está bien suponer que un emulador de terminal es compatible con VT10x, para evitar problemas con 'ncurses'. – Hibou57

+0

Por cierto, algunas buenas referencias: ftp: //ftp.cs.utk.edu/pub/shuford/terminal / – Hibou57

5

El programa ack es una versión del grep que hace destacar el color de la expresión regular coincide en su salida. Podría usarlo para colorearlo, o podría estudiar su código Perl.

Otra opción sería canalizar a grep de GNU, con un argumento --color=always o --color=auto.

0

Prueba el simple y brillante generic colouriser (homepage): Colouriser

Genérico es otro colouriser (escrito en Python) para el embellecimiento de sus archivos de registro o salida de los comandos.

Está disponible en Debian y está preconfigurado para muchas herramientas:

$ grc traceroute www.linux.org 

enter image description here

$ grc tail -25 /var/log/syslog 

enter image description here

Cuestiones relacionadas