Хорошо, извиняюсь, если это что-то глупое, но у меня заканчиваются идеи.
Цель: предварять /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
даже не делает то, что должен?
Я уверен, что здесь есть определенное поведение, которого я не понимаю, или я что-то испортил, пытаясь это исправить. Пожалуйста помоги!
fish
, создавая~/.config/fish/config.fish
с помощью,set PATH /usr/local/bin $PATH
но у меня все еще есть проблема, по-path_helper
видимому, не работать, как следует, и,$PATH
следовательно, неполный. Также все еще есть проблема различных$PATH
сценариев, приложений, запускаемых из графического интерфейса и т. Д.Ответы:
решение:
выберите, хотите ли вы общесистемную настройку или пользовательскую конфигурацию и отредактируйте соответствующий файл конфигурации, не используйте 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 .
Что-то типа
должен сделать работу:
[1] http://ridiculousfish.com/shell/user_doc/html/index.html#initialization
источник
if status --is-login eval (/usr/libexec/path_helper -c | sed -e 's/setenv/set -x/' -e 's/:/ /g' -e 's/[";]//g') end
- отлично работает здесь с fish 2 и Mac OS 10.8.3Я абсолютно не имею представления о /etc/paths.d, path_helper и т. Д., Которые кажутся мне чрезмерными осложнениями, но следующее в конце вашего ~ / .bashrc должно вас исправить:
Надеюсь это поможет!
источник
path_helper
это OSX-специфическая утилита, которая предположительно устанавливается$PATH
при входе в систему, читая/etc/paths
и затем/etc/paths.d/*
. В любом случае, я понимаю, что ваше предложение должно исправить меняbash
, но я действительно хочу, чтобы оно работалоfish
(и последовательно по всей системе, если это не слишком много, чтобы ожидать).Спасибо Аарону за ответы и за всех тех, кто ответил на другие подобные вопросы на сайтах stackexchange. Ради потомков, вот что я понял:
path_helper
вызывается из/etc/profile
синтаксисаeval '/usr/libexec/path_helper -s'
(где апострофы на самом деле являются обратными чертами). Как манекен, я не знал, как работают обратные кавычки, и почему-то изменил их на кавычки. Это сломало моюprofile
от загрузкиpath_helper
. Заменены галочки и теперь все работает как надо (конечно).set PATH /usr/local/bin $PATH
в моем~/.config/fish/profile.fish
гарантирует, что я получаю правильный порядок в моей предпочитаемой оболочке, но покаpath_helper
он работает, он может быть избыточным.$PATH
доступна скриптов, GUI приложений и т.д., это , кажется, жеребьевка междуlaunchd.conf
иenvironment.plist
... до сих пор исследования , что один.источник