Mac OS X: dircolors não encontrado?

16

Eu acabei de mudar para um Macbook Air. Eu instalei o zsh usando o homebrew, mas quando eu uso parte do código que eu tinha (originalmente) no meu .zshrc , recebo um erro dizendo que .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'

O dircolors não é fornecido com o Mac OS X? Como devo instalar?

Atualização:

Se eu executar dircolors diretamente no shell, obtenho:

bash: dircolors; command not found

    
por Amelio Vazquez-Reina 23.09.2013 / 01:32

3 respostas

10

O comando dircolors é específico do GNU coreutils, então você vai encontrá-lo no Linux não embutido e no Cygwin, mas não em outros sistemas unix como o OSX. As configurações geradas no seu .zshrc não são portáveis para o OSX.

Como você está usando as cores padrão, pode passar uma string vazia para o list-colors para obter cores nas conclusões dos arquivos.

Para cores com o comando ls real , defina a variável de ambiente CLICOLOR no OSX e também defina LSCOLORS (consulte o manual para o formato) se você quiser 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 ( dircolors com um argumento de arquivo), minha recomendação seria codificar a saída de dircolors -b ~/.dircolors em seu .zshrc e usar essas configurações para zsh e 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
    
por 23.09.2013 / 09:51
10

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

O mais simples é usar

export CLICOLOR=YES

no seu .zshrc e .bashrc e remova 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 man page com

man ls

Uma alternativa para export CLICOLOR=YES é usar um alias para ls

alias ls=ls -G

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

    
por 23.09.2013 / 07:51
4

Eu não faço mais o mac, então eu não tenho nada para testar, mas na tentativa de fazer isso funcionar no FreeBSD, eu consegui descobrir como fazer isso funcionar nos ports. Eu lembro que o OSX tem coisas como brew e macports - Tente instalar o GNU coreutils a partir disso se você realmente quer que dircolors funcione. Eu também tive que definir um alias para dircolors to gdircolors , pois este é o comando que as portas do FreeBSD instalaram. Boa sorte para quem acaba tentando isso!

Aqui está um link para alguém pegando os coreutils via brew:

link

    
por 17.12.2014 / 03:49