2009-07-06 4 views
8

Voglio prendere qualsiasi programma che viene visualizzato sullo schermo, catturare l'output e colorare determinate parole chiave prima che vengano visualizzate sullo schermo. Ad esempio, ecco il normale output del programma:Come si colorano automaticamente gli output del programma in una shell bash?

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

vs.

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

Idealmente non importa ciò che il programma è. Sto solo cercando un buon modo per incorporare più colori nei miei konsoles.

Modifica: Siamo spiacenti, dovrebbe essere stato chiaro. Non sto cercando di colorare solo gli output degli script di shell.

+0

dare suggerimenti di Pete una prova: yourprogram | ack --passthru - colore "(parola chiave1 | parola chiave2 | parola chiave3)" –

risposta

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" 

Vedere terminfo per un lungo elenco di funzionalità del terminale. Un $TERM con il suffisso -m (ad es ansi-m) significa che lo schermo è in bianco e nero, ma finché le opere a colori, le seguenti funzionalità stringa dovrebbe essere non-vuoto:

 
     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 

Colori 0-7 sono praticamente standard: nero, rosso, verde, giallo, blu, magenta, ciano, bianco. Oltre questo potrebbe non esistere o potrebbe essere più variabile.

3

È possibile scrivere uno script di colorizzazione. C'è un'eccellente guida qui http://www.faqs.org/docs/abs/HTML/colorizing.html

+0

Ugh ... davvero non dovrebbe dire alle persone di usare ANSI o VT10x sfugge manualmente. termcap e terminfo sono esistiti per * eons * allo scopo di contenere tutti i tipi di informazioni specifiche del terminale come questo. – ephemient

+0

@ephemient, eccetto che nessuno usa un vero terminale da decenni, ed è ora solo uno standard software: è OK presumere che un emulatore di terminale sia compatibile con VT10x, per evitare problemi di 'ncurses'. – Hibou57

+0

A proposito, alcuni buoni riferimenti: ftp: //ftp.cs.utk.edu/pub/Shuford/terminale / – Hibou57

5

Il programma ack è una versione di grep che evidenzia l'evidenziazione del colore delle corrispondenze di espressioni regolari nel suo output. Potresti usarlo per colorare per te, oppure potresti studiare il suo codice Perl.

Un'altra opzione sarebbe quella di eseguire il pipe su grep di GNU, con un argomento --color=always o --color=auto.

0

provare il semplice e geniale generic colouriser (homepage): Colouriser

Generico è ancora un altro colouriser (scritto in python) per abbellire i vostri file di log o output dei comandi.

E 'disponibile in Debian ed è preconfigurato per molti strumenti:

$ grc traceroute www.linux.org 

enter image description here

$ grc tail -25 /var/log/syslog 

enter image description here