Jak wyłączyć kolor za pomocą `ls`?

50

Jest to zwykle miło mieć wyjście z kolorów ls, grepitp Ale jeśli nie chcesz go (tak jak w skrypcie gdzie jesteś potokiem wyników do innego polecenia) jest tam przełącznik że można go wyłączyć? ls -Gwłącza (w niektórych wersjach pochodzących z BSD ls), jeśli nie jest domyślny, ale ls +Ggo nie wyłącza. Czy jest coś jeszcze, co będzie?

ikonoklasta
źródło
4
Późno, ale dla każdego, kto szuka: GNU ls i greppodczas potokowania nie musisz nic robić, ponieważ --color=autojuż wyłącza kolorowanie, gdy jego wyjściem jest potok lub właściwie tty; to właśnie oznacza „auto”. Podobnie FreeBSD ls -Glub „CLICOLOR” jest „wyłączone”, jeśli dane wyjściowe nie są kierowane do terminala, chyba że ... CLICOLOR_FORCE ... ”.
dave_thompson_085

Odpowiedzi:

69

Wyjście kolorów dla lszwykle jest obecnie włączane poprzez alias w większości dystrybucji.

$ alias ls
alias ls='ls --color=auto'

Zawsze możesz tymczasowo wyłączyć alias, poprzedzając go odwrotnym ukośnikiem.

$ \ls

Wykonanie powyższego spowoduje zwarcie aliasu tylko dla tego jednego wywołania. Możesz go użyć w dowolnym momencie, aby wyłączyć dowolny alias.

slm
źródło
3
Oczywiście możesz również użyć command ls, ale jest to trochę szybsze.
iconoclast
Sztuczka! Musisz zaktualizować skrypty, aby mieć wiodące ``.
Wietnam
1
Bardzo podobało mi się
Alex Angelico
27

W GNU lsmożesz określić, ls --color=neveraby jawnie wyłączać wyświetlanie kolorów. (Nawet jeśli masz alias ls='ls --color=auto', po uruchomieniu ls --color=neverrozwinie się do ls --color=auto --color=never, a późniejsza opcja ma pierwszeństwo.)

200_sukces
źródło
1
To jest naprawdę odpowiedź, której szukałem, ale zachowam odpowiedź SLM jako wybraną, ponieważ obsługuje przypadki nie-GNU, takie jak wersje pochodzące z BSD (OS X, Solaris i oczywiście * BSD).
iconoclast
3

Możesz także po prostu użyć (jak w DOS):

dir

Pokaże wyniki bez koloru, możesz dodać takie same argumenty ls, jak -l.

esilence
źródło
2
alias ls=ls

lub

unalias ls

To powoduje trwałe wyłączenie kolorowania.

Slyx
źródło
3
Oczywiście jest to trochę jak zabicie muchy za pomocą strzelby: tracisz wszystkie inne opcje dodane do lsaliasów i tracisz je na całą sesję, zamiast jednego polecenia.
iconoclast
Dlatego powiedziałem „na stałe” :-)
Slyx,
2

W wielu dystrybucjach Linuksa jest to domyślnie włączone u użytkowników .bashrc.

Edytuj ~/.bashrci usuń linię, która wygląda:

alias ls='ls --color=auto'

Jeśli chcesz wyłączyć tę funkcję dla wszystkich nowych kont generowanych na tym komputerze w przyszłości, usuń ten sam wiersz z:

/etc/skel/.bashrc 
James Aanderson
źródło
1

Na Centos7 jest to ustawione /etc/profile.d/colorls.sh... ostatnie 3 wiersze tego skryptu to:

alias ll='ls -l --color=auto' 2>/dev/null
alias l.='ls -d .* --color=auto' 2>/dev/null
alias ls='ls --color=auto' 2>/dev/null

Jeśli masz ochotę i uprawnienia ... komentowanie niepożądanej linii powinno załatwić sprawę.

James Gawron
źródło
Lub unalias ls ll lw tobie, .bashrcjeśli nie masz uprawnień
avsej
0

Aby wyłączyć kolor: unalias ls

Aby włączyć kolor: alias ls = 'ls --color = auto'

Aby tymczasowo wyłączyć kolor: \ ls -ltr

Ravichandran K
źródło
0

Mogło się dziać coś innego. lsnie powinien używać kolorów, chyba że wydaje się, że jest to połączone z czymś interaktywnym. Nie powinno to koloryzować rzeczy podczas łączenia z innym programem.

Alias ​​jest ogólnie złym pomysłem, ponieważ nigdy nie możesz pozbyć się tej opcji i przyzwyczajasz się do osobistych ustawień, których możesz nie być w stanie przenieść ze sobą na inną maszynę, nad którą musisz pracować. Jeśli chcesz go wyłączyć, aby połączyć go z czymś innym, użyj przełącznika w tej rurze. Ale kolory nie powinny być w rurze.

Sprawdź ls, czy Twoja obsługuje LS_COLORSzmienną środowiskową. Trapd00r / LS_COLORS pokazuje prace jak THT. dircolors pozwala na drobną regulację kolorów w zależności od rodzaju pliku. Jeśli nie ustawisz, LS_COLORSale masz włączone kolorowanie, lswykona kilka wywołań systemowych, aby dowiedzieć się, jakie są typy plików i atrybuty, aby mógł dowiedzieć się, co należy pokolorować. Ludzie stojący za Sherlockiem odkryli, że ustawienie LS_COLORSmoże tego uniknąć i daje 40-krotną poprawę prędkości . Przeczytaj ich krwawe szczegóły, aby zobaczyć, co znaleźli.

Sprawiam, że wszystkie typy plików używają domyślnych kolorów:

$ export LS_COLORS='bd=0:ca=0:cd=0:di=0:do=0:ex=0:pi=0:fi=0:ln=0:mh=0:no=0:or=0:ow=0:sg=0:su=0:so=0:st=0:tw=0:'

Oto plik LS_COLORS, który podałem dircolorsom:

BLK                   0
CAPABILITY            0
CHR                   0
DIR                   0
DOOR                  0
EXEC                  0
FIFO                  0
FILE                  0
LINK                  0
MULTIHARDLINK         0
NORMAL                0
ORPHAN                0
OTHER_WRITABLE        0
SETGID                0
SETUID                0
SOCK                  0
STICKY                0
STICKY_OTHER_WRITABLE 0

Sprawdź grep, czy twoje obsługuje GREP_COLORSlub GREP_OPTIONS.

Brian D. Foy
źródło
Zauważ, że wciąż powoduje to, że lssekwencje wyjściowe GNU dla wybranych kolorów. Porównaj dane wyjściowe z danymi ls --color=always | od -az ls --color=never | od -aprzy tym ustawieniu LS_COLORS.
Kusalananda
Prawdziwa sztuczka polega na tym, ls | od -aże nie emituje ucieczek i właśnie tego chcę. lsPowinien emitować tylko te sekwencje, gdy jest wysyłanie wyjście do terminalu. Jeśli to powiesz, na pewno to zrobi. Więc nie rób tego.
brian d foy
-1

dodając odpowiedź @ brian-d-foy, przez większość czasu występuje prosty irytujący kolor, który lubisz zmienić instancję niewidzialnego błękitu katalogu lub jaskrawej zieleni „OTHER_WRITABLE”, więc skorzystaj z naszego 24- wyświetlanie bitów :)

export LS_COLORS='di=04;01;38;5;33:ow=04;01;38;5;33;48;2;60;10;0'

aby przedefiniować tylko kolor katalogu i jego inny zapisywalny kolor

04: underline;
01: bold/brighter;
38;5;33: redifined-blue;
48;2;60;10;0: dark red background

czytaj więcej o kodzie de ANSI

Iggy Lake
źródło
1
Pytanie, o które chodzi, polega na usunięciu wszystkich kolorów z danych wyjściowych GNU ls, a nie na tym, jak zmienić poszczególne kolory.
Kusalananda
ok, a może „wyłączyć jeden konkretny kolor za pomocą„ ls ”za pomocą: export LS_COLORS =„ ow = 00 ”, aby wyłączyć tylko OTHER_WRITABLE.
Iggy Lake