1

Я хочу понять, как переменная PATH устанавливается в Linux/Mac. Какие все файлы загружены и в какой последовательности установить переменную PATH для BASH.

2 ответа2

1

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

1

Чтобы немного подробнее рассказать о том, что 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 при выходе.)

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