Как навсегда установить $ PATH в Linux / Unix?

656

Я пытаюсь добавить каталог на свой путь, поэтому он всегда будет на моем пути Linux. Я пробовал:

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

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

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

Теги:
zsh
path

24 ответа

895
Лучший ответ

Вам нужно добавить его в файл ~/.profile или ~/.bashrc.

export PATH="$PATH:/path/to/dir"

В зависимости от того, что вы делаете, вы также можете использовать символические ссылки на двоичные файлы:

cd /usr/bin
sudo ln -s /path/to/binary binary-name

Обратите внимание, что это не будет автоматически обновлять ваш путь до конца сеанса. Для этого вам необходимо запустить:

source ~/.profile 
or
source ~/.bashrc
  • 10
    Пара вопросов. 1) Не должно быть двоеточия между $PATH и /usr/bin . 2) Должен ли /usr/bin быть там. 3) Разве вы не должны использовать /usr/local/bin ?
  • 174
    Пожалуйста, обратите внимание : часто считается дырой в безопасности, чтобы оставлять в конце пути bash конечную двоеточие, потому что это делает так, чтобы bash просматривал текущий каталог, если не может найти исполняемый файл, который ищет. Пользователи, которые находят этот пост в поисках дополнительной информации, должны быть проинформированы об этом.
Показать ещё 23 комментария
207

В Ubuntu отредактируйте /etc/environment. Его единственная цель - хранить переменные среды. Первоначально здесь определяется переменная $ PATH. Это вставка из файла /etc/environment:

PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games"

Таким образом, вы можете просто открыть этот файл с правами root и добавить все, что захотите.

Для немедленных результатов запустите (попробуйте как обычный пользователь и root):

source /etc/environment && export PATH

ОБНОВИТЬ:

Если вы используете zsh (aka Z Shell), добавьте эту строку сразу после комментариев в /etc/zsh/zshenv:

source /etc/environment

Я столкнулся с этой маленькой причудой на Ubuntu 15.10, но если ваш zsh не получит правильную PATH, это может быть почему

  • 11
    Не все системы имеют / etc / environment
  • 0
    @ user3439968 Хотя вы, возможно, и правы, я никогда не сталкивался с этим без него: D Опять же, я только возился с ОС, которые мне удобно использовать.
Показать ещё 13 комментариев
131

Существует несколько способов сделать это. Фактическое решение зависит от цели.

Значения переменных обычно хранятся либо в списке назначений, либо в оболочке script, которая запускается в начале сеанса системы или пользователя. В случае оболочки script вы должны использовать специальный синтаксис оболочки.

Системная ширина

  • /etc/environment Список уникальных заданий. Идеально подходит для добавления общесистемных каталогов, таких как переменная /usr/local/something/bin to PATH или определение JAVA_HOME.
  • /etc/xprofile Shell script выполняется при запуске сеанса системы X Window. Это выполняется для каждого пользователя, который входит в систему X Window. Это хороший выбор для записей PATH, которые действительны для каждого пользователя, такого как /usr/local/something/bin. Файл включен другим script, поэтому используйте синтаксис оболочки POSIX, а не синтаксис вашей пользовательской оболочки.
  • /etc/profile и /etc/profile.d/* Shell script. Это хороший выбор для систем с оболочкой. Эти файлы читаются только оболочками.
  • /etc/<shell>.<shell>rc. Shell script. Это плохой выбор, потому что он является уникальным для каждой оболочки.

Сеанс пользователя

  • ~/.pam_environment. Список уникальных заданий. Loaded by PAM в начале каждого сеанса пользователя не имеет значения, если это сеанс или оболочка системы X Window. Вы не можете ссылаться на другую переменную, включая HOME или PATH, поэтому она имеет ограниченное использование.
  • ~/.xprofile Shell script. Это выполняется, когда пользователь входит в систему X Window System. Переменные, определенные здесь, видны для каждого приложения X. Идеальный выбор для расширения PATH со значениями, такими как ~/bin или ~/go/bin, или определение пользовательских GOPATH или NPM_HOME. Файл включен другим script, поэтому используйте синтаксис оболочки POSIX, а не синтаксис вашей пользовательской оболочки. Ваши графические текстовые редакторы или IDE, запущенные ярлыком, будут видеть эти значения.
  • ~/.profile Shell script. Он будет виден только для программ, запущенных с терминала или эмулятора терминала. Это хороший выбор для систем с оболочкой.
  • ~/.<shell>rc. Shell script. Это плохой выбор, потому что он является уникальным для каждой оболочки.

Спецификация для распространения

  • 2
    Спасибо за подробный ответ, это должно быть выше. Может быть, .bash_profile следует добавить в список?
  • 1
    @JamesKo это был номер 4
Показать ещё 3 комментария
68

Поместите объявление export в ~/.bashrc. Мой .bashrc содержит следующее:

export PATH=/var/lib/gems/1.8/bin:/home/fraxtil/.bin:$PATH
  • 7
    перезагрузка нужна?
  • 2
    Работал, когда я положил это в .profile ', не нашел .bashrc
Показать ещё 6 комментариев
29

Вы можете установить $PATH навсегда двумя способами.

  • Чтобы установить путь для конкретного пользователя: Возможно, вам понадобится сделать запись в .bash_profile в домашнем каталоге пользователя.

    например, в моем случае я установлю путь Java в профиле пользователя tomcat

    [tomcat]$ echo "export PATH=$PATH:/path/to/dir" >> /home/tomcat/.bash_profile
    
  • Чтобы установить общий путь для всех пользователей системы, вам может потребоваться задать путь следующим образом:

    [root~]# echo "export PATH=$PATH:/path/to/dir" >> /etc/profile
    
  • 3
    В вашем дистрибутиве есть файл с именем /etc/profiles и символом s ? У меня нет s . Я думаю, что у вас есть опечатка.
  • 3
    Вы, вероятно, хотите экранировать $, который вы пишете в файл профиля. например, echo "export PATH = \ $ PATH: / path / to / dir" >> / etc / profile, таким образом вы фактически добавляете переменную при запуске этого скрипта, а не устанавливаете ее в буквальное значение на основе его значения в время выполнения этой начальной команды.
10

Вы можете использовать для Centos или RHEL для локального пользователя:

echo $"export PATH=\$PATH:$(pwd)" >> ~/.bash_profile

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

Если вы не хотите повторного входа в систему, можете использовать:

source ~/.bash_profile

Чтобы перезагрузить # User specific environment and startup programs, этот комментарий присутствует в .bash_profile

6

Я думаю, что самый элегантный способ:

1.add this в файле ~/.bashrc Запустите эту команду

gedit ~/.bashrc

добавьте свой путь внутрь

export PATH = $ PATH: /opt/node/bin

2.source ~/.bashrc

(Ubuntu)

6

Вы также можете установить постоянное редактирование одного из этих файлов:

/etc/profile (для всех пользователей)

~/.bash_profile (для текущего пользователя)

~/.bash_login (для текущего пользователя)

~/.profile (для текущего пользователя)

Вы также можете использовать /etc/environment для установки постоянной переменной среды PATH, но она не поддерживает расширение переменной.

Извлечено из: http://www.sysadmit.com/2016/06/linux-anadir-ruta-al-path.html

6

Вы можете добавить эту строку в конфигурационный файл консоли (например,.bashrc) или в .profile

  • 2
    У меня нет ни одного из этих файлов в /home/(username)
  • 2
    @ClickUpvote: Какую оболочку вы используете? (И файлы, начинающиеся с точки, скрыты, вам нужно что-то вроде ls -a чтобы увидеть их.)
Показать ещё 2 комментария
5

Я наткнулся на этот вопрос вчера, когда искал способ добавить папку, содержащую мои собственные скрипты, в PATH - и был удивлен, узнав, что мой собственный ~/.profile файл (на Linux Mint 18.1) уже содержал это:

# set PATH so it includes user private bin if it exists
if [ -d "$HOME/bin" ] ; then
    PATH="$HOME/bin:$PATH"
fi

Таким образом, все, что мне нужно было сделать, это создать папку ~/bin и поместить туда мои скрипты.

3

Мой ответ относится к настройке go-lang на Ubuntu linux/amd64. Я столкнулся с такой же проблемой при настройке пути переменных окружения (GOPATH и GOBIN), потеряв его при выходе из терминала и перестраивая его с помощью source <file_name> каждый раз. Ошибка заключалась в том, чтобы поместить путь (GOPATH и GOBIN) в папку ~/.bash_profile. Потеряв несколько хороших часов, я обнаружил, что решение заключалось в том, чтобы положить GOPATH и GOBIN в файл ~/.bash_rc следующим образом:

export GOPATH=$HOME/go
export GOBIN=$GOPATH/bin
export PATH=$PATH:$GOPATH:$GOBIN

и при этом установка go работала нормально, и потерь пути не было.

ИЗМЕНИТЬ 1: Причина, по которой эта проблема может быть связана, заключается в том, что настройки для не-регистрационных оболочек, таких как ваш терминал ubuntu или gnome-terminal, где мы запускаем код go, берутся из файла ~./bash_rc, а настройки для систем входа в систему взяты из ~/.bash_profile файла и из файла ~/.profile, если файл ~/.bash_profile недоступен.

3

Zues77 имеет правильную идею. ОП не сказал "как я могу взломать свой путь через это". OP хотел знать, как постоянно добавлять $PATH:

sudo nano /etc/profile

Здесь он установлен для всего и является лучшим местом для его изменения для всех вещей, требующих $PATH

3

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

если вы находитесь в режиме входа в систему, файлы, которые вы ищете, - это /etc/ bash или/etc/bash.bashrc

если вы находитесь в режиме без входа в систему, вы ищете файл /.profile или файлы в каталоге /.profiles.d

файлы, упомянутые выше, если существуют системные переменные.

2

Добавьте в /etc/profile.d папку script [name_of_script].sh с линией: export PATH=$PATH:/dir. Каждый script в папке /etc/profile.d автоматически запускается /etc/profile при входе в систему.

  • 0
    Это рекомендуемый способ настройки среды
  • 1
    Это только если вы хотите, чтобы настройки были общесистемными, что, вероятно, не самый распространенный вариант использования. Большинство людей хотят (или должны хотеть), чтобы путь был установлен локально, потому что большинство пользователей / ролей выполняют контекстно разные операции, и чем меньше предположений вы сделаете, тем лучше.
Показать ещё 1 комментарий
2

Постоянно добавлять переменную PATH

Global:

echo "export PATH=$PATH:/new/path/variable" >> /etc/profile

Локальный (только для пользователя):

echo "export PATH=$PATH:/new/path/variable" >> ~/.profile

Для перезапуска глобальной. Для локального relogin.

Пример

До:

$ cat /etc/profile 

#!/bin/sh

export PATH=/usr/bin:/usr/sbin:/bin:/sbin

После того, как:

$ cat /etc/profile 

#!/bin/sh

export PATH=/usr/bin:/usr/sbin:/bin:/sbin
export PATH=/usr/bin:/usr/sbin:/bin:/sbin:/new/path/variable

Альтернативно вы можете просто редактировать профиль:

$ cat /etc/profile 

#!/bin/sh

export PATH=/usr/bin:/usr/sbin:/bin:/sbin:/new/path/variable

Другой способ (спасибо gniourf_gniourf):

echo 'PATH=$PATH:/new/path/variable' >> /etc/profile

Вы не должны использовать двойные кавычки здесь! эхо-экспорт PATH = $PATH:/new/path/variable '... И, кстати, ключевое слово export очень бесполезен, поскольку переменная PATH, скорее всего, уже помечены как экспортированные. - gniourf_gniourf

  • 1
    Нету. Вы не должны использовать двойные кавычки здесь! echo 'export PATH=$PATH:/new/path/variable' ... И, кстати, ключевое слово export скорее всего, бесполезно, поскольку переменная PATH скорее всего, уже помечена как экспортированная.
  • 0
    Нет, вы должны использовать двойные кавычки, потому что $ PATH в одинарных кавычках не интерполируется. И кстати экспорт тоже полезен.
Показать ещё 2 комментария
1

Быстрая установка с помощью Homebrew

проверить это видео

или же

шаги ниже

Step 1:

Откройте https://brew.sh/

Изображение 3883

Скопируйте URL, который показан на скриншоте выше.

/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

Вставьте скопированный URL в терминал и нажмите клавишу возврата/ввода

После завершения установки Homebrew выполните шаг 2:

Step 2: Загрузите terraform с веб- сайта https://www.terraform.io/downloads.html.

извлечь скачанный zip файл terraform

Теперь у вас будет одно имя файла terraform в загруженной папке

Например

/Users/username/downloads/terraform

Step 3:

Откройте terminal

cd: изменить каталог на /Users/username/downloads/terraform

Step 4:

запустить brew install terraform в терминале

1

Я думаю, самый элегантный способ:

1.add это в файле ~./bashrc

if [ -d "new-path" ]; then
  PATH=$PATH:new-path
fi

2.source ~/.bashrc

(Ubuntu)

  • 0
    И для отображения пути после выше: printf "% s \ n" $ PATH
1

наилучшим простым способом является следующая строка:
PATH="<directory you want to include>:$PATH"
в вашем .bashrc файле в домашнем каталоге.
Он не получит reset, даже если вы закроете терминал или перезагрузите компьютер. Его постоянный

  • 8
    Это ничего не говорит нам о том, как сделать его постоянным.
  • 1
    @quant, если вы делаете то, что сказано, он будет устанавливать ваши настройки навсегда. это будет работать, даже если вы закроете терминал.
0

1. измените файл "/etc/profile".

#vi /etc/profile

Нажмите клавишу "i", чтобы войти в статус редактирования и переместить курсор в конец файла, Дополнительные записи:

export PATH=$PATH:/path/to/dir;

Нажмите клавишу "Esc", чтобы выйти из режима редактирования, ": wq" сохранить файл.

2. сделать конфигурацию эффективной

source /etc/profile

Объясните: файл профиля работает для всех пользователей, если вы хотите быть действительным только для активного пользователя, установите файл ".bashrc"

0

Для распределения debian вам необходимо:

    - edit ~/.bashrc  e.g: vim ~/.bashrc 
    - add export PATH=$PATH:/path/to/dir
    - then restart your computer. Be aware that if you edit ~/.bashrc  as root, your environment variable you added will work only for root
0

Я только что столкнулся с той же проблемой и вставлю причину, по которой PATH всегда будет reset при переходе. После многих поисковых работ я, наконец, понимаю это пользовательская системная проблема, когда я вижу этот код в файле /etc/passwd:

root:x:0:0:root:/root:/usr/sbin/nologin

Это означает, что эта настраиваемая система отключает оболочку корня bash.
Если вы пробовали каждое решение, но ничего полезного не получали. И вы используете пользовательскую систему, вы можете взглянуть на мою возможную причину.

0

Один из способов добавить постоянный путь, который работал у меня, - это:   cd/etc/profile.d   touch custom.sh   vi custom.sh   export PATH = $PATH:/путь согласно вашей настройке/ перезагрузите компьютер, и здесь мы идем, путь будет постоянно веселит.

-2

На Mac вы можете просто скопировать необходимый файл (исполняемый файл) в /usr/local/bin/

-2

Его можно добавить напрямую, используя следующую команду:

echo 'export PATH = $PATH:/new/directory' → ~/.zshrc источник ~/.zshrc

  • 2
    Вопрос помечен как bash , так что это не очень полезно.
  • 1
    Это правильный ответ -> в заголовке упоминается только Linux, так что bash и ALSO zsh подойдут ... если тегирование только "bash", нам нужно добавить "zsh" к тегам тоже

Ещё вопросы

Сообщество Overcoder
Наверх
Меню