Я использую brew
для извлечения и установки общих версий терминальных команд и утилит GNU с помощью brew install coreutils
.
Затем в моем .bash_profile я включаю их PATH с помощью
if [ -d $(brew --prefix coreutils)/libexec/gnubin ]; then
PATH="$(brew --prefix coreutils)/libexec/gnubin:$PATH"
fi
пока все хорошо, я могу использовать версию coreutils GNU.
Проблема исходит от ls
. Apple реализует ACL, который не реализован в GNU ls
. Я обнаружил это, много раз ударившись головой и не понимая, почему (например) ls -le@
выдает ошибку ls: invalid option -- 'e'
.
Итак, теперь я понял, что проблема в GNU ls.
ВОПРОС:
как мне получить все coreutils, НО ls
? Я хочу использовать версию Apple ls
, но продолжать использовать остальные coreutils. Как я могу добиться этого, изменив свой .bash_profile
?
ИЗМЕНИТЬ:
Если я создам флаг, чтобы понять, использую ли я сейчас coretuils или нет, и, как следствие, я создам псевдоним:
ls_flag=false
if [[ $(brew) && -d $(brew --prefix coreutils)/libexec/gnubin ]]; then
PATH="$(brew --prefix coreutils)/libexec/gnubin:$PATH"
ls_flag=true
fi
export PATH
if [[ ls_flag -eq true ]]; then
alias ls=/bin/ls
fi
Это сработает, если я остановлю свой .bash_profile
здесь. Но другая проблема возникает из следующих условий. Я использую их, чтобы понять, использую ли я GNU ls или Apple ls, и выбрал правильный вариант раскрашивания команды ls:
# Detect which `ls` flavour is in use
if ls --color > /dev/null 2>&1; then # GNU `ls`
alias ls='ls --color=always'
# load my color scheme (it only works with GNU ls)
# dircolors only work with coreutils
eval `dircolors ~/.dotfiles/data/dircolors`
else # OS X `ls`
alias ls='ls -G'
fi
Итак, на данный момент ls должен быть:
1) alias ls=/bin/ls # из 1-го условия ls_flag == true
2) alias ls='ls -G' # из 2-го условия "if ls --color" (ложь)
НО, если я подскажу, ls -@
все равно выдаст ошибку, говорящую мне, что я все еще использую GNU ls... интересно, почему последний псевдоним переопределит предыдущие...
chmod -x
) coreutils'ls
? - person gniourf_gniourf   schedule 27.10.2014ls
), в вашем/usr/local/bin
(или другом каталоге, который может быть более подходящим для OSX), убедившись, что этот каталог отображается перед/bin
в вашей переменнойPATH
. - person gniourf_gniourf   schedule 27.10.2014PATH="$(brew --prefix coreutils)/libexec/gnubin:$PATH"
. Вручную связывать их все, но ls не кажется хорошим решением. Допустим, есть 100 команд, вместо удаления единственной 1, которая мне не нужна, вы предлагаете связать 99, которые мне нужны... много работы - person Leonardo   schedule 27.10.2014chmod -x
ls
из coreutils? - person gniourf_gniourf   schedule 27.10.2014