Risposte:
Su macOS, ls
non è GNU ls
e non accetta--color=always
opzione che gli utenti Linux potrebbero aspettarsi per questa funzionalità.
Nella versione macOS di ls
, i colori sono controllati da due variabili : $CLICOLOR
e $CLICOLOR_FORCE
. Se viene definito il primo, il terminale specificato da $TERM
supporta il colore e l'output è verso un terminale, questo output verrà colorato, proprio come l' --color=auto
opzione GNU . Se viene definita anche quest'ultima variabile, la condizione finale viene eliminata, comportandosi come quella di GNU --color=always
.
Quindi, per far passare il colore sed
, avresti bisogno di qualcosa di simile al seguente:
CLICOLOR_FORCE=1 ls -la | sed -En '/Desktop/q;p'
-G
equivale a definire $CLICOLOR
(e quindi non sufficiente)
Immagino ciecamente che la tua distribuzione, come molti, abbia un alias ls
a cui corrisponda ls --color=auto
.ls -la --color=always | sed …
dovrebbe funzionare.
(L' auto
impostazione fa, in linea di massima, ls
verificare se il suo output va al display o meno, e solo il colore per il display. La ragione di ciò è che il colore è realizzato da sequenze di escape, ovvero caratteri di comando invisibili, quindi un programma potrebbe confonderli per parte del nome del file, cose del genere.)
ls
ha anche l'-G
opzione per abilitare il colore, ma non sono sicuro di come si comporti in una pipeline.