Mac OS X: dircolors não encontrado?

19

Acabei de mudar para um Macbook Air. Eu instalei o zsh usando o homebrew, mas quando uso algum código que eu (originalmente tinha) no meu .zshrc, recebo um erro dizendo isso .dircolors was not found.

Abaixo está o código em questão:

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'

Não dircolorsé fornecido com o Mac OS X? Como devo instalá-lo?

Atualizar:

Se eu executar dircolors diretamente no shell, recebo:

bash: dircolors; command not found

Amelio Vazquez-Reina
fonte
Tem certeza de que é realmente esse código que causa o erro? Apenas o dircolors -bparece suspeito, mas no meu computador ele funciona sem um ~/.dircolorsarquivo muito bem.
Martin von Wittich
Tente executar dircolorsmanualmente em um shell para ver se o binário existe e está localizado no diretório $PATH.
Martin von Wittich
O erro é realmente .dircolors was not founde não é dircolors? Não existe dircolorscomando no OSX, a menos que você o tenha instalado, é específico para Linux (ou mais precisamente para GNU coreutils).
Gilles 'SO- stop be evil'
Obrigado @Gilles. Quando eu digito no shell dircolorseu recebo: bash: dircolors: command not found. O código que publiquei no OP foi gerado automaticamente pelo Zsh em uma máquina Linux. Eu pensei que poderia clonar meu .zshrcno meu Mac OS X diretamente. Você sabe o que o código no meu OP faz ou tem alguma sugestão sobre como modificá-lo para trazer a funcionalidade equivalente ao Mac OS X?
Amelio Vazquez-Reina

Respostas:

15

O comando dircolorsé específico ao coreutils do GNU, portanto você o encontrará no Linux não incorporado e no Cygwin, mas não em outros sistemas unix, como o OSX. As configurações geradas no seu .zshrccomputador não são portáteis para o OSX.

Como você está usando as cores padrão, você pode passar uma string vazia para a list-colorspara obter cores nas conclusões do arquivo.

Para cores com o comando realls , defina a CLICOLORvariável de ambiente no OSX e também defina LSCOLORS(consulte o manual para o formato) se desejar alterar as cores.

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

Se você quiser definir cores não padrão ( dircolorscom um argumento de arquivo), minha recomendação seria codificar a saída do dircolors -b ~/.dircolorsseu .zshrce usar essas configurações para o zsh e o GNU ls.

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- parar de ser mau'
fonte
3
GNU dircolorsé fornecido como gdircolorspor brew's coreutilspacote.
m8mble 7/07
13

Como o FreeBSD não tem comando dircolore o OS X tem a base do FreeBSD, você não pode usá-lo.

A coisa mais simples é usar

export CLICOLOR=YES

na sua .zshrce .bashrce remover eval "$(dircolors -b)". Para alterar as cores, você pode usar a variável de ambiente LSCOLORS. Por exemplo:

export LSCOLORS="Gxfxcxdxbxegedabagacad"

Você pode descobrir mais sobre isso na página de manual com

man ls

Uma alternativa export CLICOLOR=YESé usar um alias parals

alias ls=ls -G

Alguns sugeriram instalar o GNU-Coreutils a partir de portas Mac, mas na minha opinião isso é um exagero. Você pode encontrar a porta aqui

Raphael Ahrens
fonte
7

Eu não faço mais o mac, então não tenho nada para testar, mas na busca para que isso funcione no FreeBSD, eu consegui descobrir como fazer isso funcionar no ports. Lembro-me de que o OSX tem coisas como brewe macports- Tente instalar os GNU coreutils a partir disso, se você realmente quiser dircolorstrabalhar. Eu também tive que definir um alias para dircolorsa gdircolorscomo este é o comando que portos FreeBSD instalado a diversão como. Boa sorte para quem acaba tentando isso!

Aqui está um link para alguém baixar os coreutils por meio do brew:

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

Dmitri DB
fonte