2009-02-28 9 views
35

Podczas wykonywania ls w powłoce bash, czasami są kolory wskazujące różne typy zasobów, i można włączyć/kontrolować to z argumentem --color.Jak określić, co oznaczają kolory bash ls?

Ale ani człowiek, ani strona Google jest dostarczenie odpowiedzi na pytanie:

Co te kolory oznaczają domyślnie i jak mogę wyświetlić co wykorzystuje obecny system?


UPDATE:

Dzięki wszystkim za odpowiedzi tak daleko, jednak aby go łatwiej wybrać zwycięzcę, może ktoś pójść o krok dalej i zapewnić metodę opisów wyjściowych w kolory, do których się odnoszą.

Hmmm ... mój przykład nie działa, gdy pisał (tylko podczas podglądu), więc jeśli podgląd tego kodu będzie to pokazać, co mam na myśli ...

<ul style="list-style:none; background:black; margin:0;padding:0.5em; width:10em"> 
    <li style="color:blue">directory</li> 
    <li style="color:aqua">symbolic link</li> 
    <li style="color:#A00000;">*.tar files</li> 
    <li style="color:white">...</li> 
</ul> 

Dzięki.

Odpowiedz

43

Kolory są definiowane przez zmienną środowiskową $LS_COLORS. W zależności od Twojej dystrybucji jest generowany automatycznie po uruchomieniu powłoki, używając ~/.dircolors lub /etc/DIR_COLORS.

Edit:

Do listy kolorów znaczenia, należy użyć tego skryptu:

eval $(echo "no:global default;fi:normal file;di:directory;ln:symbolic link;pi:named pipe;so:socket;do:door;bd:block device;cd:character device;or:orphan symlink;mi:missing file;su:set uid;sg:set gid;tw:sticky other writable;ow:other writable;st:sticky;ex:executable;"|sed -e 's/:/="/g; s/\;/"\n/g') 
{ 
    IFS=: 
    for i in $LS_COLORS 
    do 
    echo -e "\e[${i#*=}m$(x=${i%=*}; [ "${!x}" ] && echo "${!x}" || echo "$x")\e[m" 
    done 
} 
+0

Wierzę, że używa ona ZARÓWNO - wartości domyślne są ustawione w DIR_COLORS, a wszystko w ~/.dir_colors ma pierwszeństwo. – chris

+1

Może ... Nie wiem, inne dystrybucje, w Fedorze, jest ustawione w /etc/profile.d/colorls.sh, i czyta tylko jeden z nich. – Juliano

+0

To fajny skrypt, ale chciałbym też zobaczyć kolory rozszerzeń, których nie ma na liście. –

3

Powinieneś być w stanie zobaczyć listę mapowań w/etc/DIR_COLORS. Możesz to zmienić, tworząc .dir_colors w swoim katalogu domowym.

3

próbować "man 5 dir_colors", aby zobaczyć, jak to jest ustawione w systemie. Mój nie ma/etc/DIR_COLORS, więc musi być ustawiony gdzieś indziej.

2

Google for LS_COLORS za kilka przydatnych linków.

Edit: Do listy kolorów, to prosty skrypt bash może dać wyobrażenie:

IFS=: 
set $LS_COLORS 
for C in $* 
do 
    IFS='=' 
    set $C 
    echo -e "\033[$2m$1\033[00m" 
done 
+0

Dzięki Neil ... niestety nie ma sposobu, aby zaakceptować wtórną/częściową odpowiedź, a Juliano jest nieco bardziej kompletna. –