Як додати каталог до PATH?


729

Як додати каталог $PATHв Ubuntu і зробити зміни постійними?


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

Відповіді:


456

Використовуючи ~ / .profile для встановлення $ PATH

Вказаний шлях .bash_profileбуде встановлений тільки в оболонці входу в bash ( bash -l). Якщо ви помістите свій шлях, .profileвін буде доступний для вашого повного сеансу на робочому столі. Це означає, що навіть метацити будуть використовувати це.

Наприклад ~/.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
Класно, що спрацювало. Я бачив, куди він автоматично додасть бін dir, якщо я зроблю його, тому я просто використав це замість сценаріїв. TY.
justingrif

5
На Xbunutu .profile не виконується, тому я помістив його в .bashrc і він працює.
tekumara

13
Цей документ є дуже добре виконаним: Офіційна документація про змінну середовище . Подумайте про його читання (не кажучи про те, що оновлено до останньої версії правил, щоб додати значення до змінної середовища).
Мішель

3
Де в .profile ми додаємо шлях ??
Vineet Kaushik

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

301

Відредагуйте .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
geirha

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-зображення, що викидає, через бродягу та потрібно для додавання вузла та npm до шляху.
Остін Моліться

7
Щоб змінити силу, запустіть. / etc / environement (так, крапка, пробіл та / etc / середовище). Оскільки цей файл є просто простим сценарієм, він запуститься та призначить новий шлях до змінної середовища 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

Для повних новачків (таких як я), яким зручніше користуватися графічним інтерфейсом:

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

4
Редагування .profile-файлу більше не рекомендується. Ви все ще можете скористатися цим методом для редагування файлу .pam_en Environment. Див.: Help.ubuntu.com/community/EnvironmentVariables
PulsarBlow

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

1
Ця відповідь призвела до того, що моя система припинила вхід із-за перекриття всіх шляхів. Використання Ubuntu 16.04.
Фрісбетаріан

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

@dain: ваш коментар врятував мені життя!
Пі-сер

46

Для стійких змінних середовищ, доступних лише певним користувачам. Я настійно рекомендую офіційну документацію Ubuntu.

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

Посилаючись на вищевказану документацію, я налаштував свої Android SDK-інструменти шляхом:

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

1
Це найкраща відповідь.
Paulo Coghi

26

Покладіть цей рядок у свій ~/.bashrcфайл.

Його отримують щоразу, коли ви відкриваєте термінал

EDIT : На підставі коментарів нижче, для більш загальної настройки, яка стосуватиметься всіх оболонок (у тому числі при натисканні Alt- F2в Unity), додайте рядок у свій ~/.profileфайл. Але, ймовірно, не слід робити обох, оскільки шлях буде доданий у ваше PATHсередовище двічі, якщо ви відкриєте термінал.


1
Власне, я думав, що ви встановите шлях або $HOME/.profileдля особистих налаштувань, або /etc/profileдля всіх користувачів. Але якщо це буде потрібно лише для баш, я гадаю, що буде працювати.
Марті Фрід

1
Якщо встановити його ~/.bashrc, він буде доступний лише у розімкнених терміналах. Наприклад, якщо ви натиснете Alt + F2 і спробуєте запустити команду з цього dir, вона не знайде. Якщо ви встановите його в, ~/.profileабо ~/.pam_environmentсеанс gnome (або той, який ви використовуєте) буде успадковувати його. Додавання PATH в ~/.bashrcтакож має недолік, що якщо відкрити / виконати bash інтерактивно з іншої інтерактивної оболонки bash, вона буде додана кілька разів.
geirha

2
Я дійсно не дивився на це на деякий час, так що я зробив пошук, і здається , що є, по крайней мере , 95 різних способів установки шляху, більшість з яких обговорюються тут . Я ніколи не зрозумів, який із них найкращий. Я думаю, що ~/.profileце правильно для особистих шляхів; саме тут Ubuntu додає ~/binкаталог. І зізнаюсь, я трохи перебільшував кількість способів - лише небагато.
Марті Фрід

1
@MartyFried, так, щоб процитувати бота в #bash on freenode: «Переважна більшість скриптів, код, підручники та посібники в Інтернеті - це лайно. Стурдж був оптимістом. »Використовуючи Google для вирішення проблеми bash, ви часто знайдете безліч напівпрацюючих рішень, перш ніж знайти хороше. О, і я б пішов з ~/.profileцим в цьому випадку.
geirha

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
Я не запускаю оболонку gui. Але з нитки вгорі виглядає, що .bashrc буде працювати чудово.
justingrif

2
Обидва будуть працювати, якщо ваша оболонка - оболонка для входу. Але я просто спробував підхід .bash_profile на одній із моїх машин Ubuntu, і навіть після перезавантаження моєї сесії gnome він не створив мій .bash_profile. Тому я б сказав, що введення цього в .bashrc - це, мабуть, шлях до Ubuntu.
3вплив

3
@justingrif Ні, вам це не потрібно .bash_profile. Якщо bash не знайде .bash_profile(при інтерактивному вході), він буде шукати .profileі використовувати це замість цього. За замовчуванням ви матимете .profileі .bashrcUbuntu. І .profileце правильне місце для встановлення змінних середовища, якщо ми нехтуємо пам’яткою pam_env.
geirha

10

У терміналі, cdдоthe_directory_you_want_to_add_in_the_path

echo "export PATH=$(pwd):\${PATH}" >> ~/.bashrc

Це була не моя ідея. У цьому блозі я знайшов такий спосіб експорту шляху .


8
sudo vi /etc/profile.d/SCRIPT_NAME.sh

додати туди

export PATH=YOUR_PATH_WITHOUT_TRAILING_SLASH:$PATH

2
sudo nano /etc/profile.d/SCRIPT_NAME.shлегше для початківців.
ізоморфізм

1
Для початківців gksu gedit /etc/profile.d/SCRIPT_NAME.shще простіше.
fouric

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 / середовищі.

Докладнішу інформацію можна знайти тут: EnvironmentVariables


1
Найнижча відповідь, але найбільш правильна. Цей файл, як правило, автоматично заповнений бін 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або whatevershell, яку ви використовуєте 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. Не навпаки.
geirha
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.