Mac OS X: nie znaleziono dircolors?

19

Właśnie przełączyłem się na Macbook Air. Zainstalowałem Zsh za pomocą HomeBrew, ale kiedy używam trochę kodu, który (pierwotnie miałem) w moim .zshrc, pojawia się błąd mówiąc o tym .dircolors was not found.

Poniżej znajduje się kod, o którym mowa:

zstyle ':completion:*' auto-description 'specify: %d'
zstyle ':completion:*' completer _expand _complete _correct _approximate
zstyle ':completion:*' format 'Completing %d'
zstyle ':completion:*' group-name ''
zstyle ':completion:*' menu select=2
eval "$(dircolors -b)"
zstyle ':completion:*:default' list-colors ${(s.:.)LS_COLORS}
zstyle ':completion:*' list-colors ''
zstyle ':completion:*' list-prompt %SAt %p: Hit TAB for more, or the character to insert%s
zstyle ':completion:*' matcher-list '' 'm:{a-z}={A-Z}' 'm:{a-zA-Z}={A-Za-z}' 'r:|[._-]=* r:|=* l:|=*'
zstyle ':completion:*' menu select=long
zstyle ':completion:*' select-prompt %SScrolling active: current selection at %p%s
zstyle ':completion:*' use-compctl false
zstyle ':completion:*' verbose true

zstyle ':completion:*:*:kill:*:processes' list-colors '=(#b) #([0-9]#)*=0=01;31'
zstyle ':completion:*:kill:*' command 'ps -u $USER -o pid,%cpu,tty,cputime,cmd'

Czy dircolorsnie dostarczany z Mac OS X? Jak mam to zainstalować?

Aktualizacja:

Jeśli uruchomię dircolors bezpośrednio na powłoce, otrzymuję:

bash: dircolors; command not found

Amelio Vazquez-Reina
źródło
Czy na pewno ten kod powoduje błąd? Tylko dircolors -bwydaje się podejrzane, ale na moim komputerze działa bez ~/.dircolorspliku.
Martin von Wittich,
Spróbuj uruchomić dircolorsręcznie w powłoce, aby sprawdzić, czy plik binarny istnieje i znajduje się w pliku $PATH.
Martin von Wittich,
Czy błąd jest naprawdę, .dircolors was not founda nie o dircolors? Nie ma dircolorskomendy w OSX, chyba że zainstalujesz ją samodzielnie, jest ona specyficzna dla Linuksa (a ściślej dla jądra GNU).
Gilles „SO- przestań być zły”
Dzięki @Gilles. Po wpisaniu w powłoce dircolorsuzyskać: bash: dircolors: command not found. Kod, który opublikowałem w OP został automatycznie wygenerowany przez Zsh na maszynie z systemem Linux. Myślałem, że mogę bezpośrednio sklonować mój system .zshrcdo Mac OS X. Czy wiesz, co robi kod w moim OP, czy masz jakieś sugestie, jak go zmodyfikować, aby wprowadzić równoważną funkcjonalność do Mac OS X?
Amelio Vazquez-Reina,

Odpowiedzi:

15

Polecenie dircolorsjest specyficzne dla rdzeni GNU, więc znajdziesz je w niewbudowanym systemie Linux i Cygwin, ale nie w innych systemach uniksowych, takich jak OSX. Wygenerowane ustawienia .zshrcnie są przenośne na OSX.

Ponieważ używasz kolorów domyślnych, możesz przekazać pusty ciąg znaków, list-colorsaby uzyskać kolory w uzupełnieniach plików.

Aby uzyskać kolory za pomocą rzeczywistego lspolecenia , ustaw CLICOLORzmienną środowiskową w OSX, a także ustaw LSCOLORS(patrz instrukcja formatu), jeśli chcesz zmienić kolory.

if whence dircolors >/dev/null; then
  eval "$(dircolors -b)"
  zstyle ':completion:*:default' list-colors ${(s.:.)LS_COLORS}
  alias ls='ls --color'
else
  export CLICOLOR=1
  zstyle ':completion:*:default' list-colors ''
fi

Jeśli chcesz ustawić kolory inne niż domyślne ( dircolorsz argumentem pliku), zalecam kodowanie wyjścia dircolors -b ~/.dircolorsw twoim pliku .zshrci używanie tych ustawień zarówno dla zsh jak i GNU.

LS_COLORS=…
zstyle ':completion:*:default' list-colors ${(s.:.)LS_COLORS}
if whence dircolors >/dev/null; then
  export LS_COLORS
  alias ls='ls --color'
else
  export CLICOLOR=1
  LSCOLORS=…
fi
Gilles „SO- przestań być zły”
źródło
3
GNU dircolorsjest podana gdircolorsprzez brew„s coreutilsopakowaniu.
m8mble
13

Ponieważ FreeBSD nie ma polecenia, dircolora OS X ma bazę FreeBSD, nie można go używać.

Najprostszą rzeczą jest użycie

export CLICOLOR=YES

w twoim .zshrci .bashrci usuń eval "$(dircolors -b)". Aby zmienić kolory, możesz użyć zmiennej środowiskowej LSCOLORS. Na przykład:

export LSCOLORS="Gxfxcxdxbxegedabagacad"

Możesz dowiedzieć się więcej na ten temat na stronie man za pomocą

man ls

Alternatywą export CLICOLOR=YESjest użycie aliasu dlals

alias ls=ls -G

Niektórzy sugerowali instalację GNU-Coreutils z portów Mac, ale moim zdaniem jest to przesada. Port można znaleźć tutaj

Raphael Ahrens
źródło
7

Nie robię już tego całego Maca, więc nie mam nic do przetestowania, ale starając się, aby działało to na FreeBSD, udało mi się dowiedzieć, jak to zrobić z portów. Pamiętam, że OSX ma takie rzeczy brewi macports- Spróbuj zainstalować z niego jądra GNU, jeśli naprawdę chcesz dircolorspracować. Miałem również ustawić alias dircolorsdo gdircolorsjak to jest polecenie, które porty FreeBSD instalowane jako zabawę. Powodzenia dla każdego, kto skończy próbować!

Oto link do kogoś, kto sprowadza coreutils poprzez napar:

http://www.topbug.net/blog/2013/04/14/install-and-use-gn-command-line-tools-in-mac-os-x/

Dmitri DB
źródło