Linux

Как установить системную переменную $PATH в Linux/Unix

В Linux как добавить каталог в $PATH, чтобы он оставался постоянным в разных сессиях? Я пытаюсь добавить каталог в мой основной путь, чтобы он всегда был в моем пути Linux. Я использовал:

  1. export PATH=$PATH:/path/to/dir

Это работает, однако каждый раз, когда я выхожу из терминала и запускаю новый экземпляр терминала, этот путь теряется и мне нужно снова выполнить команду export.

Как я могу сделать так, чтобы этот путь был установлен постоянно?

Ответ 1

Существует несколько способов сделать это. Фактическое решение зависит от цели. Значения переменных обычно хранятся либо в списке назначений, либо в сценарии оболочки, который запускается в начале системного или пользовательского сеанса. В случае сценария оболочки вы должны использовать специальный синтаксис оболочки и команды export или set.

Системное окружение

  1. /etc/environment. Список уникальных назначений. Позволяет делать ссылки. Отлично подходит для добавления общесистемных каталогов, таких как /usr/local/something/bin, в переменную PATH или определения JAVA_HOME. Используется PAM и systemd.

  2. /etc/environment.d/*.conf. Список уникальных назначений. Разрешает ссылки. Идеально подходит для добавления общесистемных каталогов, таких как /usr/local/something/bin, в переменную PATH или определения JAVA_HOME. Конфигурация может быть разделена на несколько файлов, обычно по одному на каждый инструмент (Java, Go и Node.js). Используется systemd, который по смыслу не передает эти значения оболочкам для входа пользователей.

  3. /etc/xprofile. Сценарий оболочки, выполняемый при запуске сеанса X Window System. Он выполняется для каждого пользователя, который входит в X Window System. Это хороший выбор для записей PATH, которые действительны для каждого пользователя, например: /usr/local/something/bin. Этот файл включается в другие сценарии, поэтому используйте синтаксис оболочки POSIX, а не синтаксис оболочки вашего пользователя.

  4. /etc/profile и /etc/profile.d/*. Shell-скрипт. Это хороший выбор для систем, использующих только оболочку. Эти файлы читаются только оболочками в режиме входа в систему.

  5. /etc/<shell>.<shell>rc. Скрипт оболочки. Это плохой выбор, поскольку он специфичен для одной оболочки. Используется в режиме без входа в систему.

 Пользовательская сессия

  1. ~/.pam_environment. Список уникальных значений, ссылки запрещены. Загружается PAM в начале каждого сеанса пользователя, независимо от того, является ли он сеансом X Window System или оболочки. Вы не можете ссылаться на другие переменные, включая HOME или PATH, поэтому его использование ограничено. Используется PAM.

  2. ~/.xprofile. Сценарий оболочки. Он выполняется, когда пользователь входит в систему X Window System. Определенные здесь переменные видны каждому X-приложению. Идеальный выбор для расширения PATH такими значениями, как ~/bin или ~/go/bin, или для определения пользовательского GOPATH или NPM_HOME. Файл включается другим скриптом, поэтому используйте синтаксис оболочки POSIX, а не синтаксис вашей пользовательской оболочки. Ваш графический текстовый редактор или IDE, запущенный с помощью ярлыка, определит эти значения.

  3. ~/.profile, ~/.<shell>_profile, ~/.<shell>_login. Shell скрипт. Он будет виден только для программ, запущенных из терминала или эмулятора терминала. Это хороший выбор для систем, использующих только оболочки. Используется оболочками в режиме входа в систему.

  4. ~/.<shell>rc. Скрипт оболочки. Это плохой выбор, поскольку он специфичен для одной оболочки. Используется оболочками в режиме без входа в систему.

Примечания

GNOME на Wayland запускает оболочку входа пользователя в систему для получения окружения. Он эффективно использует конфигурации оболочки входа ~/.profile, ~/.<shell>_profile, ~/.<shell>_login файлов.

Варианты использования с инструментами:

  1. environment

  2. environment.d https://linux.die.net/man/1/environment.d

  3. bash

  4. dash

Ответ 2

Мой ответ относится к настройке среды Go в Ubuntu Linux (amd64). Я столкнулся с той же проблемой установки пути переменных окружения (GOPATH и GOBIN) при потере их при выходе из терминала, каждый раз восстанавливая его, используя источник <имя_файла>.

Ошибка заключалась в том, что я поместил путь (GOPATH и GOBIN) в файл ~/.bash_profile. Потратив много времени, я обнаружил, что решение состоит в том, чтобы поместить GOPATH и GOBIN в файл ~/.bash_rc таким образом:

export GOPATH=$HOME/go

export GOBIN=$GOPATH/bin

export PATH=$PATH:$GOPATH:$GOBIN

И при этом установка Go работала нормально и никаких потерь пути не было.

Причина, с которой может быть связана эта проблема, заключается в том, что настройки для нелогиновых оболочек, таких как ваш терминал Ubuntu или терминал GNOME, где мы запускаем код Go, берутся из файла ~./bash_rc, а настройки для логиновых оболочек берутся из файла ~/.bash_profile. И из файла ~/.profile, если файл ~/.bash_profile недоступен.

 

Схожие статьи

Linux

Как сделать переадресацию портов с одного IP на другой в одной и той же сети?

Linux

Как зафиксировать/отменить снимок Linux LVM?

Linux

Слишком длинный список аргументов: ошибка для команд rm, cp, mv

Linux

Архитектура для высокодоступного MySQL с автоматическим обходом отказа в физически разных местах