Mac OS X: dircolors introuvable?

19

Je viens de passer à un Macbook Air. J'ai installé zsh en utilisant homebrew, mais lorsque j'utilise une partie du code que j'avais (à l'origine) dans mon .zshrc, j'obtiens une erreur en disant cela .dircolors was not found.

Voici le code en question:

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'est dircolorspas livré avec Mac OS X? Comment dois-je l'installer?

Mise à jour:

Si je lance des dircolors directement sur la coque, j'obtiens:

bash: dircolors; command not found

Amelio Vazquez-Reina
la source
Êtes-vous sûr que c'est vraiment ce code qui cause l'erreur? Seul le dircolors -bsemble suspect, mais sur mon ordinateur, cela fonctionne sans ~/.dircolorsfichier très bien.
Martin von Wittich
Essayez de l'exécuter dircolorsmanuellement dans un shell pour voir si le binaire existe et se trouve dans le $PATH.
Martin von Wittich
L'erreur est-elle vraiment .dircolors was not foundet non dircolors? Il n'y a pas de dircolorscommande sur OSX à moins que vous ne l'ayez installée vous-même, elle est spécifique à Linux (ou plus précisément aux coreutils GNU).
Gilles 'SO- arrête d'être méchant'
Merci @Gilles. Quand je tape dans la coquille que dircolorsje reçois: bash: dircolors: command not found. Le code que j'ai publié dans l'OP a été généré automatiquement par Zsh sur une machine Linux. Je pensais que je pouvais cloner .zshrcdirectement mon Mac OS X. Savez-vous ce que fait le code de mon OP ou avez-vous des suggestions sur la façon de le modifier pour apporter la fonctionnalité équivalente à Mac OS X?
Amelio Vazquez-Reina

Réponses:

15

La commande dircolorsest spécifique à GNU coreutils, vous la trouverez donc sur Linux non intégré et sur Cygwin mais pas sur d'autres systèmes Unix tels que OSX. Les paramètres générés dans votre .zshrcne sont pas portables sur OSX.

Puisque vous utilisez les couleurs par défaut, vous pouvez passer une chaîne vide à list-colorspour obtenir les couleurs dans les complétions de fichiers.

Pour les couleurs avec la commande réellels , définissez la CLICOLORvariable d'environnement sur OSX et définissez également LSCOLORS(voir le manuel pour le format) si vous souhaitez modifier les couleurs.

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

Si vous vouliez définir des couleurs non par défaut ( dircolorsavec un argument de fichier), ma recommandation serait de coder en dur la sortie de dircolors -b ~/.dircolorsvotre .zshrcet d'utiliser ces paramètres pour zsh et 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- arrête d'être méchant'
la source
3
GNU dircolorsest fourni comme gdircolorspar brewle coreutilspaquet de.
m8mble
13

Puisque FreeBSD n'a pas de commande dircoloret OS X a la base de FreeBSD, vous ne pouvez pas l'utiliser.

La chose la plus simple est d'utiliser

export CLICOLOR=YES

dans votre .zshrcet .bashrcet supprimez eval "$(dircolors -b)". Pour changer les couleurs, vous pouvez utiliser la variable d'environnement LSCOLORS. Par exemple:

export LSCOLORS="Gxfxcxdxbxegedabagacad"

Vous pouvez en savoir plus à ce sujet dans la page de manuel avec

man ls

Une alternative à export CLICOLOR=YESconsiste à utiliser un alias pourls

alias ls=ls -G

Certains ont suggéré d'installer GNU-Coreutils à partir des ports Mac, mais à mon avis, c'est une exagération. Vous pouvez trouver le port ici

Raphael Ahrens
la source
7

Je ne fais plus tout le Mac, donc je n'ai rien à tester, mais dans la quête pour que cela fonctionne sur FreeBSD, j'ai réussi à comprendre comment faire fonctionner les ports. Je me souviens que OSX a des trucs commebrew et macports- Essayez d'installer les coreutils GNU à partir de cela si vous voulez vraiment dircolorstravailler. Je devais aussi mettre un alias pour dircolorsde gdircolorscar cela est la commande que les ports FreeBSD installés le plaisir que. Bonne chance à tous ceux qui finissent par essayer!

Voici un lien vers quelqu'un qui récupère les coreutils via une infusion:

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

Dmitri DB
la source