Nessun output colorato in meno per il comando ls


21

Se corro lsottengo un output colorato che trovo abbastanza utile per ottenere rapidamente uno sguardo al tipo di file. Quando provo a convogliarlo lessanche con i flag -re, -Rla colorazione si perde sempre. Sto usando la zshversione 5.0.7. Qualche idea? Grazie.

modifica: sono su OS X.


Potete confermare che lsviene invocato con --color? Prova a sospendere la pipeline ( ^Z) o a usarla psda un altro terminale. Quale output which lsproduce?
Zackse,

L'ho cancellato dalla coda stretta poiché l'OP ha chiaramente affermato che lo stanno usando, less -rquindi non è un problema con lessma conls
terdon

Sono sorpreso che questo non sia ancora un duplicato, ma il più vicino che ho trovato è stato l' output del comando Store in variabile , e questo è su Super User.
Scott,

@Scott Non sono sicuro che ci sia un duplicato esatto, ma ci sono alcune domande per le quali la risposta è molto simile (il lsrisultato dipende dallo stdout). Quello che ricordo è unix.stackexchange.com/questions/157285/… che a sua volta è contrassegnato come duplicato di unix.stackexchange.com/questions/10421/…
jimmij

@jimmij Ma quelle domande non menzionano che ls --color=autosignifica usare il colore solo quando si scrive su un terminale (cioè quando l'output standard è un terminale), e non quando si tratta di un file o di una pipe.
Scott,

Risposte:


21

Questo è in base alla progettazione: i programmi che producono output colorati in genere lo fanno solo quando il loro output va su un terminale, non quando viene inviato a una pipe o ad un normale file. Il motivo è che i dati inviati su un terminale sono presumibilmente letti da un essere umano, mentre i dati inviati a un programma o scritti su un file sono probabilmente analizzati da alcuni programmi, quindi non dovrebbero contenere contenuti estranei come sequenze di escape che cambiano colore .

GNU lsvisualizza l'output colorato su un terminale quando si passa l'opzione --color(o --color=auto). Per forzare l'output colorato indipendentemente dal tipo di file dell'output standard, passare --color=alwayso --color=yes(sono sinonimi). Questa convenzione è stata seguita da altri comandi, come GNU grep, FreeBSD grep git diff, ecc.

ls --colors=yes -l | less

Con la versione di FreeBSD ls(disponibile anche su OSX e disponibile come colorlsporta su OpenBSD e NetBSD), passa l'opzione -Gper visualizzare i colori quando l'output è un terminale. Imposta l'ambiente CLICOLOR_FORCEper visualizzare i colori indipendentemente dal tipo di file di output.

CLICOLOR_FORCE=1 ls -l | less

20

Il problema molto probabilmente è che il tuo lsprogramma ha impostato un'opzione --color=autoche sostanzialmente significa che l'output deve essere colorato solo se è collegato al terminale, altrimenti (output collegato a una pipe o un file) non vengono emessi colori.

Se vuoi avere i colori in questi casi dovresti impostare l' --coloropzione su always, quindi prova

ls --color=always | less -R

Se questo comportamento è quello che ti aspetti sempre, crea un alias:

alias ls='ls --color=always'

Nella mia configurazione, bash versione 4.3, --color è un'opzione illegale. Il grepping per "color" mi dice dell'opzione "-G" ma non dice nulla su un'opzione auto o sempre. Qualche idea?
nunos,

5
@nunos lsnon viene bash, è un programma autonomo. Esegui ls --versionper controllare la sua versione. Il mio è ls GNU coreutils) 8.21 .
jimmij,

@jimiij la mia lsversione non ha la --versionbandiera. Sto usando quello predefinito da OS X, non sono sicuro se questo aiuta.
nunos,

@nunos, per favore, menziona sempre il tuo sistema operativo. Ci sono enormi differenze tra i nodi Linux e quelli non GNU come OSX.
terdon

0

Non posso commentare la risposta di @jimmij, perché ho meno di 50 rappresentanti, ma vorrei spiegare cosa ha funzionato per me in Bash.

Se corri

$ man ls | grep color

vedrai tutte le voci della manpagina per il tuo specifico ambiente shell (nel nostro caso bash).

Per me la seguente regolazione ha fatto il trucco:

$ alias ls='ls -G'

3
Ha funzionato per cosa? La -Gbandiera non ha nulla a che fare con il modo in cui lsgestisce la sua uscita colorata. Ciò rimuove semplicemente i gruppi dall'output di ls -l. Influisce sulla resa cromatica in BSD ls (anche quella usata su OSX), è questo che intendi? In ogni caso, non penso che mostrerà colore quando reindirizzato a un file, mostrerà solo colore sulla riga di comando.
terdon
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.