2014-12-10 7 views
19

Un sacco di volte (non sempre) lo stdout viene visualizzato a colori. Normalmente tengo ogni registro di output anche in un file diverso. Naturalmente nel file, i colori non vengono più visualizzati.Come scrivere stdout su file con colori?

enter image description here

Mi piacerebbe sapere se c'è un modo (in Linux) per scrivere l'output in un file con i colori. Sto cercando di usare tee per scrivere l'output di vagabondo in un file, in questo modo posso ancora vedere l'output (quando si applica). Voglio usare in modo specifico per la vagabonda (potrebbe cambiare in futuro, ovviamente ...)

Grazie!

+2

In genere il programma che esegue la scrittura determina se sta scrivendo su un terminale e, in caso contrario, non utilizzerà i colori. Quindi è probabilmente questione di dire al programma in questione di usare comunque i colori. Alcuni programmi hanno qualcosa come '--color sempre', ma non c'è uno standard. – Biffen

risposta

9

È possibile salvare le sequenze ANSI che colourise l'output in un file:

echo a | grep --color=always . > colour.txt 
cat colour.txt 

Alcuni programmi, però, tendono usarli non se la loro uscita non va al terminale (è per questo che Ho dovuto usare --color-always con grep).

+0

sai se c'è un modo per farlo con 'tee'? – AAlvz

+0

@AAlvz: cosa è successo quando hai provato? 'echo a | grep --color = sempre. | tee colour.txt' – choroba

+0

È sempre rosso, non importa cosa =/ – AAlvz

17

Da molti programmi solo sequenze di colore di uscita se il loro stdout è un terminale, una soluzione generale a questo problema li richiede ingannando a credere che il tubo si scrivono è un terminale. Ciò è possibile con il comando script da bsdutils:

script -q -c "vagrant up" filename.txt 

questo scriverà l'output da vagrant up a filename.txt (e il terminale). Se l'eco non è desiderabile,

script -q -c "vagrant up" filename > /dev/null 

lo scriverà solo nel file.

+0

Mi piace molto questa risposta ed è la migliore finora, ma non è un po 'eccessivo? :) – AAlvz

+2

'script' è sorprendentemente leggero, in realtà. Per lo più si apre solo un pty, genera una shell e ne canalizza l'output. Sono circa 500 righe di codice C, tutto sommato. – Wintermute

+0

Grazie! Mi piace molto questa soluzione. Lo script ha un sacco di potenziale! – AAlvz

6

È possibile anche colorare la vostra uscita con eco con colori diversi e salvare l'output di colore nel file.Esempio

echo -e '\E[37;44m'"Hello World" > my_file 

Anche Lei avrebbe dovuto essere a conoscenza con i codici colore dei terminali

Uso tee

< command line > |tee -a 'my_colour_file' 

Aprire il file in gatto

cat 'my_colour_file' 

Utilizzando un nome pipe può anche funzionare per reindirizzare tutti o scita dal tubo con colori a un altro file

per esempio

Creare una pipa denominata

mkfifo pipe.fifo 

ciascuna riga di comando reindirizzare al tubo come segue

<command line> > pipe.fifo 

In un altro terminale reindirizzare tutti i messaggi dalla pipa al file

cat pipe.fifo > 'my_log_file_with_colours' 

apri il tuo file con cat e vedi i risultati attesi.

+0

Il problema qui è che l'output di Vagrant ha già i colori ... Attualmente sto usando 'tee' per salvarli a un file – AAlvz

+0

buona osservazione ... tuttavia, dimostra ancora il principio che è possibile salvare l'output colorato. Rispondi modificato per correggere questo piccolo dettaglio. – repzero

+0

Sono anche sicuro che possa essere fatto ... Ma ancora non so come. Se vieni con un'idea, per favore dimmelo. – AAlvz

0

ho scoperto che utilizzando lo strumento chiamato ansi2html.sh

è il modo più semplice per esportare i dati dei terminali colorati a file html,

I comandi da usare esso sono:

ls --color=always | ansi2html.sh --palette=solarized > ~/Desktop/ls.html 
  • Tutto ciò che serve è inviare l'output utilizzando una pipe e quindi inviare lo stdout al semplice file html