Как добавить каталог в PATH?


731

Как добавить каталог $PATHв Ubuntu и сделать изменения постоянными?


2
help.ubuntu.com/community/EnvironmentVariables Есть все, что вам нужно знать. Я обнаружил, что большая часть введенных здесь данных была неправильной или, по крайней мере, метод не был предложен. Это отличная информация, которая позволит вам выяснить, где изменить переменную среды, исходя из причины, по которой вы это делаете, и как именно это сделать, не испортив все (как я сделал, следуя некоторым из вышеупомянутых плохих советов). Так долго и спасибо за все рыбы!
Автобус 42

Ответы:


455

Использование ~ / .profile для установки $ PATH

Заданный путь .bash_profileбудет установлен только в оболочке входа bash ( bash -l). Если вы введете свой путь, .profileон будет доступен для всего сеанса рабочего стола. Это означает, что даже metacity будет использовать его.

Например ~/.profile:

if [ -d "$HOME/bin" ] ; then
  PATH="$PATH:$HOME/bin"
fi

Кстати, вы можете проверить переменную PATH процесса, посмотрев на его среду /proc/[pid]/environ(замените [pid] числом из ps axf). Например использоватьgrep -z "^PATH" /proc/[pid]/environ

Примечание:

bashпоскольку оболочка входа в систему не разбирает, .profileесли либо существует, .bash_profileлибо .bash_loginОт man bash:

он ищет ~ / .bash_profile, ~ / .bash_login и ~ / .profile в указанном порядке, а также читает и выполняет команды из первой, которая существует и доступна для чтения.

Смотрите ответы ниже информация о .pam_environment, или .bashrcдля интерактивных нерегистрируемых оболочек, или установить значение глобально для всех пользователей, поместив скрипт в /etc/profile.d/или использовать , /etc/X11/Xsession.d/чтобы повлиять на сессию менеджеров.


5
Круто, это сработало. Я видел, где он будет автоматически добавлять bin bin, если я сделаю это, поэтому я просто использовал это вместо сценариев. TY.
justingrif

5
На Xbunutu .profile не запускается, поэтому я положил его в .bashrc, и он работает.
Текумара

13
Эта часть документации очень хорошо сделана: официальная документация по переменной среды . Подумайте о том, чтобы прочитать его (не сказать, что оно обновлено до последней версии правил для добавления значений в переменную окружения).
Мишель

3
Где в .profile мы добавляем путь?
Vineet Kaushik

3
Я до сих пор не знаю, куда добавить свою дополнительную часть пути. Мне нужно добавить Android SDK к моему пути ... PATH="$HOME/bin:$PATH"Так я его добавлю?
Джейми Хатбер

303

Отредактируйте .bashrcв вашем домашнем каталоге и добавьте следующую строку:

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

Чтобы .bashrcизменения вступили в силу, вам нужно будет указать свой исходящий код или выйти из системы / войти (или перезапустить терминал). Чтобы найти свой .bashrc, просто введите

$ source ~/.bashrc

3
Как вы "источник .bashrc"? Как вы «перезапустите терминал»?
изоморфизм

3
В bash это просто так. .bashrc '
Офидиан

1
Я предполагал, что вы были в вашем домашнем каталоге. так как именно там находится .bashrc, который вы хотите редактировать.
Офидиан

21
.bashrcне правильное место для установки переменных среды. Они должны войти .profileили .pam_environment. См. Mywiki.wooledge.org/DotFiles
гейра

4
@LaoTzu . .bashrcнет .bashrc:) или source .bashrcв этом отношении
Znarkus

120

Рекомендуемое место для определения постоянных общесистемных переменных среды, применяемых ко всем пользователям:

/etc/environment

(где определяется значение по умолчанию PATH)

Это будет работать в десктопе или консоли, gnome-терминале или TTY, в дождь или блеск;)

  • Для редактирования нажмите Alt+ F2и введите:

    gksudo gedit /etc/environment
    

    (или откройте файл, используя sudoваш любимый текстовый редактор)

Чтобы внести изменения, запустите . /etc/environment. Поскольку этот файл является простым сценарием, он будет запускаться и назначать новый путь PATHпеременной среды. Чтобы проверить запустить env и увидеть PATHзначение в листинге.

Связанный:


6
а затем вам нужно перезагрузиться, чтобы изменения вступили в силу ...
Ли

2
Это именно то, что мне было нужно. Предоставление одноразового образа vm через vagrant и необходимо добавить узел и npm к пути.
Остин Прай

7
Чтобы изменения вступили в силу, запустите. / etc / environement (да, точка, пробел и / etc / environment). Поскольку этот файл является простым сценарием, он будет запускаться и назначать новый путь переменной среды PATH. Чтобы проверить, запустите env и посмотрите значение PATH в листинге.
WindRider

1
Мне нужно было запустить, source /etc/environmentчтобы перезагрузить изменения
JohnnyAW

@JohnnyAW: источник эквивалентен начальной точке, см., Например, en.wikipedia.org/wiki/Source_(command) .
Роланд Сарразин

58

Я думаю, что канонический путь в Ubuntu:

  • создать новый файл под /etc/profile.d/

    sudo vi /etc/profile.d/SCRIPT_NAME.sh
    
  • добавьте туда:

    export PATH="YOUR_PATH_WITHOUT_TRAILING_SLASH:$PATH"
    
  • и дать ему разрешение на выполнение

    sudo chmod a+x /etc/profile.d/SCRIPT_NAME.sh
    

20
Обычно безопаснее добавлять собственный путь в конец PATH, а не в начало. Это позволяет избежать случайной замены системных команд вашими программами (или чужими вредоносными программами). Это также позволяет избежать путаницы, когда кто-то еще работает в вашей системе (или дает вам советы), и он получает неожиданные результаты от команд, которые вы «заменили».
Джо,

47

Для полных новичков (как я), которые более удобны с GUI:

  1. Откройте вашу $HOMEпапку.
  2. Перейдите в « Просмотр» → « Показать скрытые файлы» или нажмите Ctrl+ H.
  3. Щелкните правой кнопкой мыши .profileи выберите « Открыть с помощью текстового редактора» .
  4. Прокрутите вниз и добавьте PATH="$PATH:/my/path/foo".
  5. Сохранить.
  6. Выйдите из системы и войдите снова, чтобы применить изменения (пусть Ubuntu действительно загрузится .profile).

4
Редактировать файл .profile больше не рекомендуется. Вы по-прежнему можете использовать этот метод для редактирования файла .pam_environment см.: Help.ubuntu.com/community/EnvironmentVariables
PulsarBlow

Спасибо @PulsarBlow! Я не совсем уверен , что именно разница и преимущество , хотя ... Это прямой URL в соответствующем разделе: help.ubuntu.com/community/...
Дейн

1
Этот ответ заставил мою систему прекратить вход в систему из-за переопределения всех путей. Использование Ubuntu 16.04.
Фрисбетарский

1
@Frisbetarian вы должны убедиться , чтобы добавить $PATH:бит , который включает в себя существующее определение PATH
Дейн

@dain: твой комментарий спас мне жизнь!
Py-ser

46

Для постоянных переменных среды доступны только для определенных пользователей. Я настоятельно рекомендую официальную документацию по Ubuntu.

https://help.ubuntu.com/community/EnvironmentVariables

Ссылаясь на приведенную выше документацию, я настроил свои инструменты пути Android SDK следующим образом:

  1. Создание ~/.pam_environmentфайла в домашнем каталоге.
  2. содержание которого есть PATH DEFAULT=${PATH}:~/android-sdk-linux/tools.
  3. дополнительный пользовательский путь пользователя можно добавить, разделяя пути двоеточием (:) .
  4. это требует повторного входа в систему , что означает, что вам необходимо выйти и снова войти в среду рабочего стола.

1
Это лучший ответ.
Пауло Коги

26

Поместите эту строку в свой ~/.bashrcфайл.

Он получает каждый раз, когда вы открываете терминал

РЕДАКТИРОВАТЬ : Основываясь на комментариях ниже, для более общей настройки, которая будет применяться ко всем оболочкам (в том числе, когда вы нажмете Alt- F2в Unity), добавьте строку в ваш ~/.profileфайл. Однако, вероятно, не следует делать и то и другое, поскольку путь будет добавлен в вашу PATHсреду дважды, если вы откроете терминал.


1
На самом деле, я думал, что вы задали путь либо $HOME/.profileдля личных настроек, либо /etc/profileдля всех пользователей. Но если это нужно только для bash, я думаю, что любой из них будет работать.
Марти Фрид

1
Если вы установите его ~/.bashrc, он будет доступен только на открытых вами терминалах. Например, если вы нажмете Alt + F2 и попробуете выполнить команду из этого каталога, она не будет найдена. Если вы установите его в ~/.profileили ~/.pam_environment, сеанс gnome (или какой DE вы используете) унаследует его. Добавление PATH в ~/.bashrcтакже имеет недостаток, заключающийся в том, что если вы в интерактивном режиме открываете / исполняете bash из другой интерактивной оболочки bash, он будет добавляться несколько раз.
гейра

2
Некоторое время я не особо разбирался в этом, поэтому я провел поиск, и кажется, что есть как минимум 95 различных способов задать путь, большинство из которых обсуждаются здесь . Я так и не понял, какой из них лучший. Я думаю, что ~/.profileэто правильно для личных путей, хотя; вот где Ubuntu добавляет ~/binкаталог. И я признаюсь, что немного преувеличил количество способов - только немного.
Марти Фрид

1
@MartyFried, да, процитировать бота в #bash на freenode: «Подавляющее большинство скриптов, кода, учебных пособий и руководств по bash в Интернете - это чушь. Осетр был оптимистом. »Используя google для решения проблемы bash, вы часто найдете множество полуработающих решений, прежде чем найдете хорошее. Ох, и я бы пошел ~/.profileв этом случае тоже.
гейра

1
@geirha - Я согласен с тем, что большинство руководств в интернете, скорее всего, чушь, особенно что-нибудь из linux, поскольку разные дистрибутивы или даже разные версии одного и того же делают разные вещи. Обычно это сводится к тому, что работает, но большинство людей не понимают, что то, что работает, это просто то, что работает, не обязательно то, что правильно, или даже то, что всегда будет работать. Я пытаюсь выяснить, какой из многих способов на самом деле является правильным, потому что я ненавижу делать вещи более одного раза - но это не всегда легко. :)
Марти Фрид

15

Для настройки всей системы добавьте строку export PATH=/path/you're/adding:$PATHв конец /etc/profile.

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


14

Добавление его в .bashrc будет работать, но я думаю, что более традиционный способ установки переменных пути - это .bash_profile, добавив следующие строки.

PATH=$PATH:/my/path/foo
export PATH

Согласно этой теме, похоже, что поведение Ubuntu немного отличается от поведения RedHat и клонов.


1
У меня нет .bash_profile, я должен его создать?
justingrif

7
Если у вас есть .bashrc, вставьте .bashrcвместо этого. Терминалы GUI в Ubuntu не являются оболочками входа в систему, поэтому .bash_profileне будут работать.

1
Я не запускаю оболочку графического интерфейса. Но из приведенного выше потока похоже, что .bashrc будет работать нормально.
Justingrif

2
Оба будут работать, если ваша оболочка является оболочкой входа в систему. Но я только что попробовал подход .bash_profile на одном из моих компьютеров с Ubuntu, и даже после перезапуска сеанса gnome он не стал источником моего .bash_profile. Так что я бы сказал, что поместить это в .bashrc - это, вероятно, путь к Ubuntu.
3dinfluence

3
@justingrif Нет, тебе не нужно .bash_profile. Если bash не находит .bash_profile(когда вы входите в систему в интерактивном режиме), он будет искать .profileи использовать вместо этого. По умолчанию у вас будет .profileи .bashrcUbuntu. И .profileэто правильное место для установки переменных среды, если мы игнорируем pam_env.
Гейра



6

Всякий раз, когда я «устанавливаю» свою папку сценариев BASH, я следую шаблону проверки для $HOME/binпапки, которая находится в большинстве файлов .profile в последних версиях Ubuntu. Я установил тест, который выглядит как

if [ -d "/usr/scripts" ]; then
   PATH="/usr/scripts:$PATH"
fi

Это работает примерно в 100% случаев, и я могу свободно менять его в текстовом редакторе с графическим интерфейсом пользователя с помощью быстрого «Заменить все», если я решу переместиться /scriptsкуда-нибудь ближе к своей $HOMEпапке. Я не делал этого в 6 установках Ubuntu, но «всегда завтра». S

BZT


6

Рекомендуемый способ , чтобы изменить свою PATHот /etc/environmentфайла

Пример вывода /etc/environment:

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

Например, чтобы добавить новый путь /home/username/mydir

PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/home/username/mydir"

Затем перезагрузите компьютер.


Общесистемные переменные среды

Подходящим файлом для настроек переменных среды, которые влияют на систему в целом (а не только на конкретного пользователя), является / etc / environment. Альтернативой является создание файла для этой цели в каталоге /etc/profile.d.

/ И т.д. / окружающая среда

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

Примечание. Расширение переменной не работает в / etc / environment.

Более подробную информацию можно найти здесь: EnvironmentVariables


1
Самый низкий ответ пока самый правильный. Этот файл обычно заполняется в bin Ubuntu с указанием пути.
NotoriousPyro

4

Откройте свой терминал, введите gedit .profileи вставьте следующее:

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

 #the following line add Bin where you dont have a Bin folder on your $HOME
    PATH="$PATH:/home/mongo/Documents/mongodb-linux-i686-2.2.2/bin"

Закройте и откройте терминал, он должен работать.


2

Поместите его в вашу ~/.bashrcили любую другую оболочку, которую вы используете rc (или вышеупомянутую ~/.profile) И ~/.xsessionrcтак, чтобы она также работала в X (внешняя оболочка).


1

Даже если системные скрипты не используют это, в любом случае, когда нужно добавить путь (например, $HOME/bin) к переменной среды PATH, следует использовать

PATH="${PATH:+${PATH}:}$HOME/bin"

для добавления (вместо PATH="$PATH:$HOME/bin"), и

PATH="$HOME/bin${PATH:+:${PATH}}"

за предлог (вместо PATH="$HOME/bin:$PATH").

Это позволяет избежать ложного $PATHначального / конечного двоеточия, когда оно изначально пустое, что может иметь нежелательные последствия.

См. Например, https://unix.stackexchange.com/questions/162891/append-to-path-like-variable-without-creating-leading-colon-if-unset


-1

Для Ubuntu отредактируйте ~/.bashrcи добавьте следующую строку.

. ~/.bash_profile

Затем отредактируйте ваш .bash_profile, как вам нужно .....


1
Проголосовал, потому что вы не объяснили, как «редактировать, .bash_profileкак вам нужно». Что именно мне нужно сделать с .bash_profile?
изоморфизм

4
Это неправильный путь. .profileили .bash_profileдолжен источник .bashrc. А не наоборот.
Гейра
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.