Вопрос или проблема
Как правильно добавить что-то в переменную $PATH
на macOS?
-
Например, я могу сделать это в
.zshrc
:path+=$HOME/foo/bar
-
…но кажется, что в таком случае изменённый путь будет доступен только для интерактивного использования, и поэтому более надежное решение – поместить его в
.zshenv
. -
…Но с другой стороны, некоторые люди говорят (см. комментарии к этому ответу), что изменять путь в
.zshenv
– не лучшая идея. (И, если я правильно понимаю, они предполагают, что путь должен изменяться в.zshrc
или, возможно, каким-то другим способом…)
Тем не менее, я все еще не понимаю, какой файл использовать для этого и как именно. Мог бы кто-нибудь объяснить это так, будто мне пять?
Ответ или решение
Для изменения переменной окружения $PATH
на macOS, если вы используете оболочку zsh
, вам нужно понимать, как конкретные конфигурационные файлы для оболочки работают и в каком контексте они загружаются.
Основные конфигурационные файлы zsh
-
.zshenv
: Этот файл загружается всегда, когда запускается оболочкаzsh
, независимо от того, является ли она интерактивной или неинтерактивной. Это значит, что все изменения, внесенные в.zshenv
, будут доступны во всех сеансах, включая автоматические и скриптовые. -
.zshrc
: В отличие от.zshenv
, файл.zshrc
загружается только для интерактивных сеансов. Это означает, что изменения, внесенные сюда, будут значительными, только когда вы работаете в интерактивной оболочке. -
.zprofile
: Этот файл загружается для логин-сессий и может использоваться для установки переменных окружения, включая$PATH
. Он применяется в том числе и когда пользователь входит в систему через графический интерфейс.
Рекомендованное решение
В большинстве случаев для изменения переменной $PATH
на macOS в zsh
рекомендуют использовать файл .zprofile
или .zshrc
, в зависимости от ваших потребностей:
-
Использование .zshrc: Если вы хотите добавить каталог в
$PATH
только для интерактивных сеансов, например, чтобы использовать определенные команды в терминале, выполните следующее:export PATH="$HOME/foo/bar:$PATH"
Этот код добавит каталог
foo/bar
, расположенный в домашней директории пользователя, в начало переменной$PATH
. Итак, при выполнении команд оболочка сначала будет проверять этот путь. -
Использование .zprofile: Если вы предпочитаете, чтобы изменения были доступны как для интерактивных, так и для неинтерактивных сеансов, вы можете использовать файл
.zprofile
. Это хороший выбор для пользовательских переменных окружения, включая$PATH
.export PATH="$HOME/foo/bar:$PATH"
Почему не стоит использовать .zshenv
Как правило, избегайте внесения изменений в $PATH
в .zshenv
, потому что этот файл загружается для всех сеансов, включая те, которые могут быть связаны с автоматическим запуском скриптов, например. Изменение переменной окружения здесь может привести к непредвиденным последствиям для программ, которые ожидают стандартные настройки среды.
Заключение
На основании вышеприведённой информации, рекомендую использовать .zshrc
для интерактивных сеансов и .zprofile
для изменений, нуждающихся в применении для всех типов сеансов. Это гарантирует корректную и безопасную работу вашей среды. Просто добавьте строчку с экспортизацией $PATH
в нужный файл, и изменения вступят в силу при следующем запуске терминала.