Il piping dell'output di ls o dell'albero a meno perde i colori?


12

treee lspuò distinguere i tipi di file colorando i nomi dei file in modo diverso.

treee lsspesso output un lungo elenco di file (comprese le directory), quindi installo l'output stdout a less.

Ma lessnon conserva i colori. Come possiamo far sì che mostri i colori o alcuni modi alternativi?

Ho appena visto l'elenco dei link, ma il piping less -Ro less -rnon funziona. Il mio sistema operativo è Ubuntu 12.04. lessè la versione 444: 09 giu 2011.


1
@JosephR. l'altra domanda è semi-correlata ma non duplicata. Qui stiamo parlando ls(non tree) per cui è necessario dire ad alcune implementazioni di forzare l'output a colori quando l'output non va a un terminale (oltre a less -Ressere necessario)
Stéphane Chazelas,

Ci hai provato tree -C | less -R? L' -Copzione è l'equivalente dell'albero di less --color=always, credo (almeno funziona per me, su Ubuntu 12.04).
steeldriver,

@steeldriver grazie. Funziona. treecon e senza il -Csolo output sempre a colori, ma perché sono diversi se usati con less?
Tim

@Tim 2 motivi: 1. lessrimuove i colori di default a meno che tu non gli dia l' -Ropzione, che gli dice di lasciarlo dentro, e 2. treee lse altri programmi di solito disattivano la colorazione quando rilevano che il loro output sta andando su un altro programma (come less) anziché direttamente sul terminale, a meno che non si imponga la colorazione con -Co --color=always.
jw013,

2
Cos'è questa lista collegata di cui scrivi?
Anthon,

Risposte:


15

Presumo che tu stia usando ls --color=auto, il che dice lsdi usare il colore in modalità "automatica". La modalità 'Automatica' indica lessse STDOUT è un terminale e, in tal caso, usa il colore, altrimenti non usa il colore. Quando esegui il pipe lsin less, STDOUT non è un terminale, è collegato a STDIN di less, che è un normale pipe.

La soluzione, utilizzare ls --coloro ls --color=always.

Tuttavia ora questo porta ad un altro potenziale problema. A seconda del tuo less, potrebbe non mostrare il colore, ma invece mostrare i codici di escape. La soluzione è quella di utilizzare less -R. Questo dice lessdi passare attraverso i codici di escape per le fughe di colore ANSI. Non si desidera utilizzare in -rquanto ciò causerà problemi con le linee lunghe che si avvolgono, poiché meno non calcola correttamente la lunghezza della linea.

Quindi soluzione completa:

ls --color | less -R

Allo stesso modo per tree:

tree -C | less -R
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.