it-swarm-ru.tech

Где $ 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 заявления

134
Andrew

Когда запускается 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.

157
Steve Folly

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

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

47
Jim Logan

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

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

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

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

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

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

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

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

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

25
leanne

Чтобы показать свой путь, введите $ PATH.

echo $PATH

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

4
jtimberman

Также есть путь, который определяется как 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
Keith Bentrup

Это может быть определено либо:

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

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

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

1
ricbax

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

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

для OS-X Snow Leopard

1
A B