Mac OS X: dircolors не найдены?

19

Я только что переключился на Macbook Air. Я установил zsh, используя homebrew, но когда я использую часть кода, который у меня (изначально был) в моем .zshrc, я получаю сообщение об ошибке .dircolors was not found.

Ниже приведен код вопроса:

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'

Есть dircolorsне поставляется с Mac OS X? Как мне его установить?

Обновить:

Если я запускаю dircolors непосредственно на оболочке, я получаю:

bash: dircolors; command not found

Амелио Васкес-Рейна
источник
Вы уверены, что именно этот код вызывает ошибку? Только dircolors -bкажется подозрительным, но на моем компьютере это работает без ~/.dircolorsфайла просто отлично.
Мартин фон Виттих,
Попробуйте запустить dircolorsвручную в оболочке, чтобы увидеть, существует ли двоичный файл и находится ли он в $PATH.
Мартин фон Виттих,
Ошибка действительно .dircolors was not foundи не о dircolors? На dircolorsOSX нет команды, если вы не установили ее самостоятельно, она специфична для Linux (или, точнее, для GNU coreutils).
Жиль "ТАК - перестать быть злым"
Спасибо, Жиль. Когда я набираю в оболочке dircolorsя получаю: bash: dircolors: command not found. Код, который я разместил в OP, был автоматически сгенерирован Zsh на компьютере с Linux. Я думал, что смогу .zshrcнапрямую клонировать свою Mac OS X. Знаете ли вы, что делает код в моем OP, или есть какие-либо предложения о том, как его изменить, чтобы привнести эквивалентные функциональные возможности в Mac OS X?
Амелио Васкес-Рейна

Ответы:

15

Эта команда dircolorsспецифична для GNU coreutils, поэтому вы найдете ее в не встроенных Linux и Cygwin, но не в других системах Unix, таких как OSX. Сгенерированные настройки .zshrcне переносимы в OSX.

Поскольку вы используете цвета по умолчанию, вы можете передать пустую строку в, list-colorsчтобы получить цвета в файлах.

Для цветов с фактической lsкомандой установите CLICOLORпеременную среды в OSX, а также установите LSCOLORS(см. Руководство по формату), если вы хотите изменить цвета.

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

Если вы хотите установить цвета не по умолчанию ( dircolorsс аргументом файла), я бы порекомендовал жестко запрограммировать вывод dircolors -b ~/.dircolorsв вашем .zshrcфайле и использовать эти настройки для zsh и 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
Жиль "ТАК - прекрати быть злым"
источник
3
GNU dircolorsпредоставляется как gdircolorsна brew«S coreutilsпакета.
m8mble
13

Поскольку у FreeBSD нет команды, dircolorа у OS X есть база FreeBSD, вы не можете ее использовать.

Самое простое - это использовать

export CLICOLOR=YES

в вашем .zshrcи .bashrcи удалить eval "$(dircolors -b)". Для изменения цвета вы можете использовать переменную окружения LSCOLORS. Например:

export LSCOLORS="Gxfxcxdxbxegedabagacad"

Вы можете узнать больше об этом на странице руководства с

man ls

Альтернативой export CLICOLOR=YESявляется использование псевдонима дляls

alias ls=ls -G

Некоторые предлагали установить GNU-Coreutils из портов Mac, но, на мой взгляд, это излишнее. Вы можете найти порт здесь

Рафаэль Аренс
источник
7

Я больше не работаю с Mac, поэтому мне не с чем тестировать, но в стремлении заставить это работать на FreeBSD, мне удалось выяснить, как заставить это работать из портов. Напомню, в OSX есть такие вещи, как brewи macports- попробуйте установить из этого ядро ​​GNU coreutils, если вы действительно хотите dircolorsработать. Я также должен был установить псевдоним для , dircolorsчтобы , gdircolorsкак это команда , которая порты FreeBSD установлена забава , как. Удачи всем, кто в итоге попробует это!

Вот ссылка на того, кто записывает coreutils через brew:

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

Дмитрий Д.Б.
источник