Вопрос Где $ PATH устанавливается в OS X 10.6 Snow Leopard?


Я печатаю echo $PATH в командной строке и получить

/opt/local/bin:/opt/local/sbin:/Users/andrew/bin:/usr/local/bin:/usr/local/mysql/bin:/usr/local/pear/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/X11/bin:/opt/local/bin:/usr/local/git/bin

Мне интересно, где это происходит после моего .bash_login файл пуст.

Я особенно обеспокоен тем, что после установки MacPorts он установил кучу хлама в /opt, Я не думаю, что этот каталог существует даже в обычной Mac OS X.

Обновить: Благодаря jtimberman для исправления моих echo $PATH заявление


132
2017-11-11 18:48


происхождения


комментарий от SMcCandlish:easiest solution when you want to make a site-wide path change (e.g. to include /usr/libexec or whatever) is to edit  /etc/paths  . While the new  /etc/paths.d/  thing is functional, it's actually more hassle than maintaining a single file. As others have hinted but not spelled out, if the path changes you want would be useful only for one user, it's best to make that change in the bash and/or tcsh config files in that user's home directory instead of system-wide. - Sathya♦
@ Сатья, Мне кажется /etc/paths.d полезен для скриптов установки. Если я хочу, чтобы мой установочный скрипт добавлял установленную программу в путь, я могу удалить файл в /etc/paths.d, Если я хочу отредактировать путь вручную, /etc/paths это лучший вариант. - haydenmuhl
Я сделал сценарий в основном на этом посту, который быстро распечатывает, где PATH определяется в этих нескольких местах: gist.github.com/lopespm/6407349952bc8a1ff8fb - Pedro Lopes


ответы:


когда bash он начинает чтение следующих файлов при каждом входе в систему. Для целей OS X это означает, что каждый раз, когда вы открываете новый Terminal окно.

/etc/profile
~/.bash_profile
~/.bash_login   (if .bash_profile does not exist)
~/.profile      (if .bash_login does not exist)

Когда вы запускаете новую оболочку, набрав bash в командной строке он читает .bashrc

OS X также использует ~/.MacOSX/environment.plist для установки дополнительных переменных среды, включая пути, если это необходимо.

В заключение, /etc/paths а также /etc/paths.d также читаются оболочкой.


/opt/local/bin и т. д. добавляются в ~/.tcshrc от MacPorts. Также не забудьте посмотреть ~/.cshrc,


152
2017-11-11 20:57



По всей видимости, ~/.MacOSX/environment.plist не работает для некоторых людей. В Изменить путь для OS X альтернатива, используя папку /etc/paths.d описывается. Я не проверял это. - Arjan
+1 для ~/.cshrc, Пошли гайки, пытаясь понять, почему ~/.profile не работает. - tomlogic
Я думаю, что этот ответ неполный. Я пытаюсь выяснить, где ошибочный (несуществующий) путь: / usr / bin / local, моя оболочка жалуется, и она не находится ни в одном из этих файлов. - Tommy
я думаю .bashrc считывается независимо от того, вводите ли вы bash или нет. - Xiao Peng - ZenUML.com


Взгляните на файл /etc/paths, который используется /usr/libexec/path_helper, который используется /etc/profile,

Для MacPorts используйте sudo /etc/paths/opt/local/bin и снова открыть окно терминала.


47
2017-12-30 20:31





Серьезно, Leopard дал нам новый способ добавить путь. Просто создайте файл, содержащий часть пути, которую вы хотите добавить, и поместите его в /etc/paths.d

Быстрый пример этого в один шаг:

echo "/some/path/to/add" >> /etc/paths.d/somefilename

В противном случае вы можете просто перейти к /etc/paths.d и поместить файл туда напрямую. В любом случае любые части пути в файлах в этом каталоге будут добавлены к пути по умолчанию.

Это также работает для manpath.

Вот ссылка на более подробную информацию:

ars technica: как мне добавить что-то в PATH в снежный барс?

На второй ноте: MacPorts помещает все в каталог opt именно потому, что он не используется материалами Apple. Таким образом, это не будет конфликтовать. Их руководство (превосходно написанное, BTW) объясняет, почему оно использует opt и как изменить этот параметр по умолчанию, если хотите.

Руководство MacPorts


25
2018-03-25 18:07



Очень круто. Теперь нам нужно только заставить эти зависимые от приложения приложения больше не загрязнять наши файлы профилей ... - Daniel Beck♦
Любить это. Просто! - Andrew Hedges
комментарий от SMcCandlish: I have to concur that there's nothing weird or bad about MacPorts using   /opt  (likewise Fink uses /sw); trying to replace stock Mac BSD parts with bleeding-edge builds from external projects like these is a recipe for an unusable system that requires an OS reinstallation. - Sathya♦
Одиночная строка, без добавления файлов и простое удаление. Люблю это. Спасибо, leanne - Ibrahim Lawal


Чтобы показать свой путь, эхо $ PATH.

echo $PATH

Чтобы задать свой путь, отредактируйте ~/.bash_profile, а не ~/.bash_login,


4
2017-11-11 19:07





Существует также путь, определяемый SSH,

сравнить echo $PATH в ssh localhost 'echo $PATH', Поскольку ssh не читает / etc / profile, / usr / libexec / path_helper не запускается и, таким образом, пропускается / etc / paths. Теперь попробуйте ssh localhost 'source /etc/profile; echo $PATH', Пути должны быть ближе. Остальные различия, скорее всего, будут связаны с изменением пути в вашем .bash_profile (который также пропускается ssh) и .bashrc (который читается ssh).

Если вы хотите, чтобы ваш путь ssh был похож на ваш обычный конечный путь, вы можете добавить source /etc/profile к вашему .bashrc.


3
2018-02-07 19:36



Спасибо за подсказку! Я точно искал решение с помощью ssh. svn + ssh не смог найти команду svnserve точно, потому что путь к svnserve был в .profile, но не был в .bashrc. - KIR


Его можно определить как:

  • Системные переменные - /etc/paths
  • Пользовательские переменные - см. Объяснение @Steve Folly

2
2018-06-01 09:50





Фактически он хранится в вашем .profile вместо .bash_login и обычно, MacPorts будет использовать это вместо .bash_login файл.

Так же /opt каталог обычно создается MacPorts и хранит его файлы в этой папке.


1
2017-11-11 19:13





относительно документы для /usr/libexec/path_helper полезность, исходные компоненты для $ PATH были взяты из /etc/pathsи по умолчанию выглядит

/usr/bin
/bin
/usr/sbin
/sbin
/usr/local/bin

для OS-X Snow Leopard


1
2018-06-26 01:40