zsh, macOS: Какой файл следует использовать для изменения переменной $PATH и как именно?

Вопрос или проблема

Как правильно добавить что-то в переменную $PATH на macOS?

  • Например, я могу сделать это в .zshrc:

    path+=$HOME/foo/bar
    
  • …но кажется, что в таком случае изменённый путь будет доступен только для интерактивного использования, и поэтому более надежное решение – поместить его в .zshenv.

  • …Но с другой стороны, некоторые люди говорят (см. комментарии к этому ответу), что изменять путь в .zshenv – не лучшая идея. (И, если я правильно понимаю, они предполагают, что путь должен изменяться в .zshrc или, возможно, каким-то другим способом…)

  • Я также читал эту и эту статьи.

Тем не менее, я все еще не понимаю, какой файл использовать для этого и как именно. Мог бы кто-нибудь объяснить это так, будто мне пять?

Ответ или решение

Для изменения переменной окружения $PATH на macOS, если вы используете оболочку zsh, вам нужно понимать, как конкретные конфигурационные файлы для оболочки работают и в каком контексте они загружаются.

Основные конфигурационные файлы zsh

  1. .zshenv: Этот файл загружается всегда, когда запускается оболочка zsh, независимо от того, является ли она интерактивной или неинтерактивной. Это значит, что все изменения, внесенные в .zshenv, будут доступны во всех сеансах, включая автоматические и скриптовые.

  2. .zshrc: В отличие от .zshenv, файл .zshrc загружается только для интерактивных сеансов. Это означает, что изменения, внесенные сюда, будут значительными, только когда вы работаете в интерактивной оболочке.

  3. .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 в нужный файл, и изменения вступят в силу при следующем запуске терминала.

Оцените материал
Добавить комментарий

Капча загружается...