10

Хорошо, извиняюсь, если это что-то глупое, но у меня заканчиваются идеи.

Цель: добавить /usr/local/bin к $PATH

Проблема: $PATH не будет делать то, что я хочу или ожидаю

Как я сюда попал: я хочу начать учиться программировать, так что мне становится удобно бездельничать, но у меня нет большого опыта. Я установил раковину fish (потому что это дружелюбно!) используя homebrew и установите его в качестве оболочки по умолчанию (в system prefs>users & groups>advanced). В какой-то момент я запустил brew doctor чтобы проверить, все ли мои установки были кошерными, и он предложил переместить /usr/local/bin в начало $PATH чтобы я мог использовать мою установку git а не системную копию. Хорошо - но между path_helper и fish что-то происходило с $PATH что было вне моего контроля, и я никогда не мог правильно расположить пути.

Среда: OSX 10.8.2, обновленная с 10.7ish, с установленным xcode и devtools, плюс x11 , homebrew и fish

Больше информации: я установил оболочку моего пользователя по умолчанию на bash и пробовал различные оболочки через terminal.app - bash , fish , sh . Я переместил /usr/local/bin в начало /etc/paths но это ничего не изменило. Я просмотрел различные файлы config.fish и закомментировал вещи, которые могут связываться с $ PATH, не помогло. У меня есть следующие файлы в /etc/paths.d/:

./10-homebrew содержащий /usr/local/bin

./20-fish содержащая /usr/local/Cellar/fish/1.23.1/bin

./40-XQuartz содержащий /opt/X11/bin

Я добавил set +x в свой profile и когда я запускаю terminal.app я получаю:

Last login: Mon Oct  1 13:31:06 on ttys000
+ '[' -x /usr/libexec/path_helper ']'
+ eval '/usr/libexec/path_helper -s'
++ /usr/libexec/path_helper -s PATH="/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/Cellar/fish/1.23.1/bin:/opt/X11/bin";
export PATH;
+ '[' /bin/bash '!=' no ']'
+ '[' -r /etc/bashrc ']'
+ . /etc/bashrc
++ '[' -z '\s-\v\$ ' ']'
++ PS1='\h:\W \u\$ '
++ shopt -s checkwinsize
++ '[' Apple_Terminal == Apple_Terminal ']'
++ '[' -z '' ']'
++ PROMPT_COMMAND='update_terminal_cwd; '
++ update_terminal_cwd
++ local 'SEARCH= '
++ local REPLACE=%20
++ local PWD_URL=file://Chriss-iMac.local/Users/c4
++ printf '\e]7;%s\a' file://Chriss-iMac.local/Users/c4 
Chriss-iMac:~ c4$

Похоже, что path_helper запускается, но после запуска echo $PATH выводит меня /usr/bin:/bin:/usr/sbin:/sbin . Итак, похоже, что path_helper даже не делает то, что должен?

Я уверен, что здесь есть определенное поведение, которого я не понимаю, или я что-то испортил, пытаясь это исправить. Пожалуйста помоги!

3 ответа3

5

решение:

выберите, хотите ли вы общесистемную настройку или пользовательскую конфигурацию и отредактируйте соответствующий файл конфигурации, не используйте path_helper с fish.

Больше

У fish нет исходного кода /etc /profile, для общесистемной и пользовательской конфигурации он будет читать /etc/fish/config.fish и ~ /.config /fish /config.fish соответственно [1].

path_helper предназначен для использования для оболочек, которые являются источником общесистемного файла профиля (sh, csh и их производные). Так как 10.7 path_helper, кажется, соблюдает порядок в /etc /paths, AFAIR этого не сделал в 10.6, и с этим было сложнее справиться.

Если вы действительно хотите использовать path_helper с fish, вам нужно проанализировать его вывод, поскольку он предоставит только синтаксис sh и csh с опциями -s и -c .

Что-то вроде

/usr/libexec/path_helper -c | sed -e 's/setenv/set -x/' -e 's/:/ /g' -e 's/[";]//g'

должен сделать работу:

[1] http://ridiculousfish.com/shell/user_doc/html/index.html#initialization

3

Я абсолютно не знаю о /etc/paths.d, path_helper и т.д., Которые кажутся мне чрезмерными осложнениями, но следующее в конце вашего ~ /.bashrc должно вас исправить:

 PATH=/usr/local/bin:$PATH

Надеюсь это поможет!

3

Спасибо Аарону за ответы и за всех тех, кто ответил на другие подобные вопросы на сайтах stackexchange. Ради потомков вот что я понял:

  1. path_helper вызывается из /etc/profile с помощью синтаксиса eval '/usr/libexec/path_helper -s' (где апострофы на самом деле являются обратными метками ). Как манекен, я не знал, как работают обратные кавычки, и почему-то изменил их на кавычки. Это сломало мой profile при загрузке path_helper . Заменены галочки и теперь все работает как надо (конечно).
  2. использование set PATH /usr/local/bin $PATH в моем ~/.config/fish/profile.fish гарантирует, что я получу правильный порядок в моей предпочитаемой оболочке, но пока работает path_helper это может быть избыточно.
  3. Для обеспечения того, чтобы полный $PATH был доступен для сценариев, приложений с графическим интерфейсом и т.д., Похоже, что это разрыв между launchd.conf и environment.plist ... все еще исследуем его.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .