Po uruchomieniu ls
otrzymuję kolorowe wydruki, które uważam za całkiem przydatne, aby szybko przejrzeć rodzaj pliku. Kiedy próbuję nadać mu kolor, less
nawet przy użyciu flag -r
i, -R
kolorowanie zawsze się gubi. Używam zsh
wersji 5.0.7. Jakieś pomysły? Dzięki.
edycja: korzystam z systemu OS X.
ls
że jest wywoływany--color
? Spróbuj zawiesić potok (^Z
) lub użyćps
z innego terminala. Jaką produkcjęwhich ls
daje?less -r
więc nie jest to problem z,less
ale zls
ls
wynik zależy od standardu). Ten, który pamiętam, to unix.stackexchange.com/questions/157285/…, który sam jest oznaczony jako duplikat unix.stackexchange.com/questions/10421/…ls --color=auto
oznacza to, że używaj koloru tylko podczas pisania na terminalu (tj. gdy standardowym wyjściem jest terminal), a nie gdy jest to plik lub potok.Odpowiedzi:
Wynika to z założenia: programy, które wytwarzają kolorowe wydruki, zwykle robią to tylko wtedy, gdy ich wyjście trafia do terminala, a nie gdy jest wysyłane do potoku lub zwykłego pliku. Powodem jest to, że dane wysyłane do terminala są prawdopodobnie odczytywane przez człowieka, podczas gdy dane przesyłane do programu lub zapisywane do pliku prawdopodobnie zostaną przeanalizowane przez jakiś program, więc nie powinny zawierać obcych treści, takich jak zmieniające kolor sekwencje specjalne .
GNU
ls
wyświetla kolorowe dane wyjściowe na terminalu po przejściu opcji--color
(lub--color=auto
). Aby wymusić kolorowe wyjście niezależnie od typu pliku standardowego wyjścia, pass--color=always
lub--color=yes
(to synonimy). Po tej konwencji pojawiły się inne polecenia, takie jak GNU grep, FreeBSD grepgit diff
itp.W wersji FreeBSD
ls
(dostępnej także w OSX i dostępnej jakocolorls
port w OpenBSD i NetBSD) przekaż opcję-G
wyświetlania kolorów, gdy wyjście jest terminalem. Ustaw środowisko tak,CLICOLOR_FORCE
aby wyświetlało kolory niezależnie od typu pliku wyjściowego.źródło
Problem najprawdopodobniej polega na tym, że
ls
program ma ustawioną opcję,--color=auto
co w zasadzie oznacza, że dane wyjściowe powinny być zabarwione tylko wtedy, gdy są podłączone do terminala, w przeciwnym razie (dane wyjściowe podłączone do potoku lub pliku) kolory nie są emitowane.Jeśli chcesz mieć kolory w takich przypadkach, powinieneś ustawić
--color
opcję naalways
, więc spróbujJeśli takie zachowanie jest oczekiwane przez cały czas, po prostu utwórz alias:
źródło
ls
nie pochodzibash
, to samodzielny program. Uruchom,ls --version
aby sprawdzić jego wersję. Mój jest rdzeniem GNU) 8.21 .ls
wersja nie ma--version
flagi. Używam domyślnego z OS X, nie jestem pewien, czy to pomaga.Nie mogę skomentować odpowiedzi @jimmij, ponieważ mam mniej niż 50 powtórzeń, ale chciałbym wyjaśnić, co działało dla mnie w Bash.
Jeśli uciekniesz
zobaczysz wszystkie wpisy na stronie
man
dla twojego konkretnego środowiska powłoki (w naszym przypadkubash
).Dla mnie następująca korekta pomogła:
źródło
-G
Flaga nie ma nic wspólnego z tym, jakls
udaje jej kolorową wyjście. To po prostu usuwa grupy z wyjścials -l
. Wpływa to na kolor wyjściowy w BSD ls (ten używany również w OSX), czy o to ci chodzi? W każdym razie nie sądzę, że pokaże kolor po przekierowaniu do pliku, po prostu pokaże kolor w wierszu poleceń.