134

Я набираю 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

8 ответов8

156

Когда 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 .

47

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

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

25

Серьезно, 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

4

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

echo $PATH

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

3

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

2

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

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

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

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

1

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

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

для OS-X Snow Leopard

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