Mac OS X: dircolors tidak ditemukan?

19

Saya baru saja beralih ke Macbook Air. Saya menginstal zsh menggunakan homebrew, tetapi ketika saya menggunakan beberapa kode yang saya (awalnya miliki) di saya .zshrc, saya mendapatkan kesalahan mengatakan itu .dircolors was not found.

Di bawah ini adalah kode yang dimaksud:

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'

Apakah dircolorstidak diberikan bersama Mac OS X? Bagaimana saya menginstalnya?

Memperbarui:

Jika saya menjalankan dircolors langsung pada shell saya mendapatkan:

bash: dircolors; command not found

Amelio Vazquez-Reina
sumber
Apakah Anda yakin benar kode ini yang menyebabkan kesalahan? Hanya yang dircolors -btampak mencurigakan, tetapi di komputer saya itu berfungsi tanpa ~/.dircolorsfile baik-baik saja.
Martin von Wittich
Cobalah untuk menjalankan dircolorssecara manual di shell untuk melihat apakah biner ada dan terletak di $PATH.
Martin von Wittich
Apakah kesalahan itu benar .dircolors was not founddan bukan tentang dircolors? Tidak ada dircolorsperintah di OSX kecuali Anda menginstalnya sendiri, ini khusus untuk Linux (atau lebih tepatnya untuk GNU coreutils).
Gilles 'SO- stop being evil'
Terima kasih @Gilles. Ketika saya ketik di shell dircolorssaya mendapatkan: bash: dircolors: command not found. Kode yang saya posting di OP secara otomatis dihasilkan oleh Zsh di mesin Linux. Saya pikir saya bisa mengkloning saya .zshrcke Mac OS X saya secara langsung. Apakah Anda tahu apa kode dalam OP saya atau memiliki saran tentang cara memodifikasinya untuk membawa fungsionalitas yang setara ke Mac OS X?
Amelio Vazquez-Reina

Jawaban:

15

Perintah dircolorsini khusus untuk GNU coreutils, jadi Anda akan menemukannya di Linux yang tidak tertanam dan pada Cygwin tetapi tidak pada sistem unix lainnya seperti OSX. Pengaturan yang dihasilkan di Anda .zshrctidak portabel untuk OSX.

Karena Anda menggunakan warna default, Anda dapat meneruskan string kosong ke list-colorsuntuk mendapatkan warna dalam penyelesaian file.

Untuk warna dengan perintah aktualls , atur CLICOLORvariabel lingkungan pada OSX, dan juga atur LSCOLORS(lihat manual untuk format) jika Anda ingin mengubah warna.

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

Jika Anda ingin mengatur warna-warna non-standar ( dircolorsdengan argumen file), rekomendasi saya adalah untuk membuat hard-code output dircolors -b ~/.dircolorsdi Anda .zshrcdan menggunakan pengaturan ini untuk zsh dan 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 'SANGAT berhenti menjadi jahat'
sumber
3
GNU dircolorsdisediakan sebagai gdircolorsoleh brew's coreutilspaket.
m8mble
13

Karena FreeBSD tidak memiliki perintah dircolordan OS X memiliki basis FreeBSD Anda tidak dapat menggunakannya.

Hal paling sederhana adalah menggunakan

export CLICOLOR=YES

di Anda .zshrcdan .bashrcdan hapus eval "$(dircolors -b)". Untuk mengubah warna, Anda dapat menggunakan variabel lingkungan LSCOLORS. Sebagai contoh:

export LSCOLORS="Gxfxcxdxbxegedabagacad"

Anda dapat mengetahui lebih lanjut tentang hal itu di halaman manual dengan

man ls

Alternatif untuk export CLICOLOR=YESadalah menggunakan alias untukls

alias ls=ls -G

Beberapa menyarankan untuk menginstal GNU-Coreutils dari Mac Ports, tetapi menurut saya ini adalah kerja keras. Anda dapat menemukan porta di sini

Raphael Ahrens
sumber
7

Saya tidak melakukan semua hal mac lagi, jadi saya tidak punya apa-apa untuk diuji, tetapi dalam upaya untuk mendapatkan ini berfungsi pada FreeBSD, saya berhasil mencari cara untuk mendapatkan ini berfungsi dari port. Saya ingat OSX memiliki hal-hal seperti brewdan macports- Coba instal GNU coreutils dari ini jika Anda benar-benar ingin dircolorsbekerja. Saya juga harus mengatur alias untuk dircolorsuntuk gdircolorskarena ini adalah perintah yang port FreeBSD diinstal menyenangkan sebagai. Semoga beruntung bagi siapa saja yang akhirnya mencoba ini!

Berikut ini tautan ke seseorang yang menurunkan core melalui minuman:

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

Dmitri DB
sumber