Я хочу понять, как переменная PATH устанавливается в Linux/Mac. Какие все файлы загружены и в какой последовательности установить переменную PATH для BASH.
2 ответа
PATH может быть немного сложнее, поскольку ваши конфигурационные файлы могут делать такие вещи, как PATH="~/bin:${PATH}"
или PATH="${PATH}:~/bin"
и оба они вполне приемлемы и имеют допустимое ситуативное использование , Я полагаю, что на самом деле вы спрашиваете, какие конфигурационные файлы читает оболочка при запуске - определение того, как назначен ваш PATH, является функцией прохождения конфигурационных файлов по порядку и просмотра того, что они делают.
На OS X следующие файлы конфигурации читаются в этом порядке:
Для интерактивных оболочек входа в систему:
* /etc/profile
* Сначала сопоставляются в следующем порядке: ~/.bash_profile
, ~/.bash_login
, ~/.profile
* О завершении оболочки: ~/.bash_logout
Для интерактивных оболочек без входа в систему:
* /private/etc/bashrc
(обычно в Linux /etc/bash.bashrc
)
* ~/.bashrc
Чтобы немного подробнее рассказать о том, что devnall объяснил очень хорошо для интерактивных оболочек: WRT OS X 10.10 (Yosemite) и, возможно, ранее, /etc/profile
вызовет /usr/libexec/path_helper
если этот файл доступен и исполняем. path_helper
будет читать каждый файл в /etc/paths.d/
и добавлять содержимое (которое должно быть одной строкой) в $PATH
а затем экспортировать весь результат. Это делает простой и понятный способ указать, почему задан конкретный путь:
$ cat /etc/paths.d/40-XQuartz
/opt/X11/bin
$ cat /etc/paths.d/MacGPG2
/usr/local/MacGPG2/bin
Затем, если есть /etc/bashrc
, он будет вызван.
Затем запускается один из файлов .bash_profile, .bash_login или .profile в вашем домашнем каталоге. (И, конечно, ~/.bash_logout
при выходе.)