Як змінити свій PATH, щоб зміни були доступні в кожному сеансі терміналу


53

Я хочу додати каталог для пошуку мого шляху пошуку. Я знаю, що мені потрібно змінити PATHзмінну середовища. Однак я хочу, щоб зміна була постійною, щоб вона завжди була дієвою для кожного вікна терміналу (bash), який я відкриваю.

У https://help.ubuntu.com/community/EnvironmentVariables є перевантаження заплутаної та, можливо, суперечливої ​​інформації

Я використовую Ubuntu 10.04. Припустимо, я хочу додати /usr/local/fooдо свого PATH. Який файл ( .bashrc, .profile, .bash_loginі т.д. ...) я повинен змінити , і що має нова лінія (и) виглядати?

Відповіді:


70

Наступна команда додає шлях до вашого поточного шляху:

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

Якщо ви хочете, щоб ваша установка виконувала цю команду кожен раз, є кілька місць, де ви можете її поставити. Коли ви ввійдете в систему, такі сценарії виконуватимуться в такому порядку:

/etc/profile      (which starts by loading everything in /etc/profile.d)
~/.profile        (which starts by loading ~/.bashrc if you are running bash)

Примітки

  • ~/.profile завантажується тільки якщо ~/.bash_profileі ~/.bash_loginНЕ ІСНУЄ. Інакше, принаймні, bash, замість них буде завантажено. Доцільно використовувати, .profileа не конкретні сценарії. Отже, якщо в цих створених вами спробах .bash_login, видаліть їх зараз.

  • ~/.bashrcзавантажується лише у тому випадку, якщо ви виконуєте інтерактивний сеанс. (щось із підказкою, де ви можете фактично щось набрати).

  • ~/.bashrcзавантажується знову і знову, кожного разу, коли ви відкриваєте новий термінал . Отже, нова вкладка в gnome-терміналі, новий віртуальний термінал тощо. Тож навіть якщо ви знову не входите в систему, .bashrcзавантажується (і тим самим скидає середовище) щоразу, коли ви відкриваєте нову оболонку.

  • Такі речі, як Byobu, дійсно повинні входити .profile, (інакше це не спрацює ;-)

  • Такі речі, як шляхи, повинні входити, .profileякщо ви хочете, щоб вони працювали поза інтерактивними сеансами. (скажіть, коли ви натискаєте Alt+ F2у GNOME)


Я позначу це як відповідь, якщо оновити його, щоб включити запитувану лінію експорту, яку слід додати до .profile.
Джошуа Фланаган

Це було справедливим лише для входу в консоль (наприклад, ssh або віртуальних терміналів, доступних для Ctrl + Alt + Fx). Я не знав, що / etc / gdm / Xsession джерела ~ / .profile ці дні. Акуратно!
Маріус Гедмінас

Так, я не згадував / etc / gdm / Xsession спеціально або ~ / .Xprofile, оскільки є кращі способи змусити запуск графічних програм при запуску, що гарантує, що решта середовища вже завантажена.
Ральф

1
щоб зробити цю відповідь більш вичерпною, будь ласка, додайте коментар MattH щодо джерела ~ / .profile, щоб активувати зміни без виходу з циклу / на циклі.
matt wilkie

1
@schwiz: ~/.profileне виконується на кожному терміналі, він виконується раніше, коли розпочнеться сеанс на робочому столі. Виконаний на кожному терміналі~/.bashrc
MestreLion

13

Я змусив його працювати, змінюючи ~/.profile

Схоже, додавання ~ / bin до мого шляху було поганим прикладом, оскільки в ~ / .profile вже є код, щоб зробити це автоматично, якщо каталог існує.

Щоб додати каталог usr / local / foo до мого шляху для кожного наступного сеансу, я додаю / редагую наступний рядок в кінці мого .profile:

export PATH=$PATH:/usr/local/foo

Однак, щоб це вступило в силу, мені потрібно було вийти з системи та увійти назад (просто закрити вікно терміналу та відкрити нове НЕ працювало).


4
Зробіть це export PATH="$PATH:/usr/foo"на випадок, якщо у вас колись є пробіли чи інші спеціальні символи $PATH.
Жил "ТАК - перестань бути злим"

3
Ви можете перезавантажити поточне середовище, не виходячи з системи, ввівши ". ~ / .Profile"
Matt H

1
@MattH: ні, ти не можеш. якщо ви джерело ~/.profileв даному терміналі, вона буде ефективною для цього терміналу тільки
MestreLion

@MestreLion - ви праві. Я згадував це для зручності для поточного терміналу. Забув додати це.
Метт H

Що робити, якщо я вже щось маю в PATH? Чи можна додати до нього, як PATHS працює в Windows? Наприклад, я PATH="$HOME/bin:$HOME/.local/bin:$PATH"вже є .
Ярмарок Габріеля

4

Щоб перезавантажити .profile та прийняти ефекти змін без виходу / входу, запустіть:

source ~/.profile

це має бути коментарем до попередньої відповіді
Павло Жуков

3

Ви можете додати шлях до /etc/environment, але майте на увазі, що розширення оболонок не працюватимуть; змінна буде встановлена ​​буквально символами, які ви вводите.


З двох методів (додавання команди експорту в .profile та додавання повного імені шляху до PATH у тощо / середовищі), якому слід віддати перевагу?
Рохан Бхатія

1

Ви можете змінити .bashrcфайл у своєму $HOMEкаталозі.

В самому кінці цього файлу додайте рядок:

export PATH="$HOME/directory_to_include_in_path/:$PATH"

Ви також можете змінити .profileфайл також у своєму $HOMEкаталозі, включаючи наступний рядок:

PATH="$HOME/directory_to_include_in_path/:$PATH"

Це працювало для мене.


2
Я не бачу, що це додає до інших відповідей, які пояснюють більш ретельно.
Занна

0

Якщо у вас є ohmyzsh, перейдіть у свій домашній каталог через термінал і введіть

nano .zshrc

В кінці файлу введіть

export PATH = "$ HOME / directory_to_include_in_path /: $ PATH"

Нарешті перезапустіть свій термінал. Працювали для мене. Сподіваюся, що це було корисно.


-3
Going through the basics, I will suggest the following steps:
1. It's recommended to set environment variables in /etc/environment
2. Open the file as superuser in an editor as it's a read only file e.g.     gedit:
gksu gedit /etc/environment
3. System will need password to open it in editable mode. Enter your superuser password and get file opened in a new gedit window. 
4. Add new line at the end of file with 
export PATH=$PATH:/usr/local/foo
5. Save and close the window. It will get command back to terminal.
6. Refresh the environment by running the following command: 
. /etc/environment
7. You may check by executing the following command:
 echo $PATH

Це неправильно і не вийде. Розширення параметрів не виконується/etc/environment
Zanna
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.