Як назавжди встановити $ PATH на Linux / Unix?


879

Я намагаюся додати каталог до мого шляху, щоб він завжди був у моєму шляху Linux. Я спробував:

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

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

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

Відповіді:


229

Існує кілька способів зробити це. Фактичне рішення залежить від мети.

Значення змінної зазвичай зберігаються або в списку призначень, або в сценарії оболонки, який запускається на початку системного або користувальницького сеансу. У випадку сценарію оболонки ви повинні використовувати певний синтаксис оболонки та 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, NodeJS). Використовується SystemD, що за задумом не передає ці значення оболонкам входу користувача.
  3. /etc/xprofileСценарій оболонки, виконаний під час запуску сесії X Window System. Це запускається для кожного користувача, який увійшов до системи X Window. Це хороший вибір для 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>_loginShell скрипт. Він буде видно лише для програм, запущених з терміналу або емулятора терміналу. Це хороший вибір для оболонок тільки для систем. Використовується оболонками в режимі входу.
  4. ~/.<shell>rc. Оболонка сценарію. Це невдалий вибір, оскільки це специфічна одиночна оболонка. Використовується оболонками в режимі без входу.

Примітки

Gnome на Wayland запускає оболонку для входу користувачів, щоб отримати оточення. Він ефективно використовує реєстраційні конфігурації оболонки ~/.profile, ~/.<shell>_profile, ~/.<shell>_loginфайли.

Посібники

  • навколишнє середовище
  • оточення.d
  • баш
  • тире

Конкретна документація щодо розповсюдження

Пов'язані

Різниця між оболонкою для входу та оболонкою без входу?


4
Дякую за детальну відповідь, це повинно бути вище. Може бути, .bash_profileслід додати і до списку?
Джеймс Ко

2
@JamesKo це було число 4
trve.fa7ad

1
Я думаю, найкраща відповідь пропонується /etc/environment. Але чи можу я оновити його, не виходячи з системи та не входячи? Іноді я не використовую bash або sh, тому source /etc/environmentне працює.
banan3'14

2
Чудова і на мій погляд найповніша відповідь. Повинен бути набагато вище.
Пітер Глор

2
Моєю причиною пошуку цієї теми був насправді Go. Радий бачити, що я не єдиний, хто зрозумів, що .bashrc - не правильне місце. ;)
Пітер Глор

1039

Вам потрібно додати його у свій файл ~/.profileчи ~/.bashrcфайл. 

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

Залежно від того, що ви робите, ви також можете передати посилання на бінарні файли:

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

Зауважте, що це не автоматично оновить ваш шлях до залишку сеансу. Для цього слід запустити:

source ~/.profile 
or
source ~/.bashrc

11
Пару питань. 1) Чи не повинно бути двокрапки між $PATHі /usr/bin. 2) Повинно /usr/binбути навіть там. 3) Чи не варто скористатися /usr/local/bin?
Batandwa

197
Будь ласка, зауважте : часто вважається, що у захисній дірці залишається зворотна двокрапка в кінці вашого bash PATH, оскільки це робить так, що bash виглядає в поточному каталозі, якщо він не може знайти виконаний файл, який шукає. Користувачі, які знайдуть цю публікацію, шукаючи додаткову інформацію, повинні бути проінформовані про це.
erewok

51
@AdamRobertson Небезпечно - розгляньте сценарій, коли ви розпакуєте тарбол, потім cdдо каталогу, в який ви його розпакували, а потім запустіть ls--- і тоді зрозумієте, що в тарболі була викликана шкідлива програма ls.
Лілі Чунг,

21
Для мене це був .bash_profile, а не .profile. Здається, це для кожного різне.
donquixote

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

243

В 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):

source /etc/environment && export PATH

ОНОВЛЕННЯ:

Якщо ви використовуєте zsh(також Z Shell), додайте цей рядок відразу після коментарів у /etc/zsh/zshenv:

source /etc/environment

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


13
Не всі системи мають / etc / environment
user3439968

9
FWIW $PATHтакож визначений /etc/profileв Arch Linux.
Sparhawk

3
@ e-sushi Я насправді шокований цим. Я сам на ubuntu 14.04.1. і я можу пообіцяти вам, що файл вбудований.
trve.fa7ad

2
Спробувавши кожну пропозицію під сонцем, але / тощо / навколишнього середовища, і змусивши їх усіх НЕ працювати, я нарешті натрапив на це. Я також на Ubuntu 14.04, і це єдиний, хто фактично змінив змінну PATH після перезавантаження.
Chockomonkey

4
Користувач повинен перезавантажити ПК після оновлення файлу середовища.
Harish_N

70

Покладіть exportдекларацію ~/.bashrc. Мій .bashrc містить це:

export PATH=/var/lib/gems/1.8/bin:/home/fraxtil/.bin:$PATH

7
потрібен перезапуск?
Клацніть Upvote

2
Працював, коли я поставив це в .profile", не знайшов.bashrc
Клацніть Upvote

Це може залежати від точної системи; Я не впевнений, які саме умови визначають, який файл виконується. Радий, що проблема була вирішена.
Fraxtil

12
@Click Upvote Вам потрібно зробити, source ~/.bashrcщоб перезавантажити .bashrcконфігурацію. Тоді це спрацює
BigSack

4
exportКлючове слово необхідно , тільки якщо PATHще не позначений як змінне оточення - що вона майже беззастережно буде. Просто PATH=/var/lib/gems/1.8/bin:/home/fraxtil/.bin:$PATHматиме такий же ефект.
Чарльз Даффі

30

Ви можете встановити $PATHпостійно двома способами.

  1. Щоб встановити шлях для конкретного користувача: Вам може знадобитися зробити запис .bash_profileу домашньому каталозі користувача.

    наприклад, у моєму випадку я встановлю шлях java в профіль користувача tomcat

    [tomcat]$ echo "export PATH=$PATH:/path/to/dir" >> /home/tomcat/.bash_profile
  2. Щоб встановити загальний шлях для ВСІХ користувачів системи, можливо, знадобиться встановити такий шлях:

    [root~]# echo "export PATH=$PATH:/path/to/dir" >> /etc/profile

3
Називається файл /etc/profilesз sзбірками? Моїх немає s. Я думаю, що ти маєш помилку.
Кріс Джонсон

3
Ймовірно, ви хочете уникнути $, який ви пишете у файл профілю. наприклад, echo "експортувати PATH = \ $ PATH: / path / to / dir" >> / etc / profile, таким чином ви фактично додаєте до змінної, коли цей скрипт працює, а не встановлюєте його на буквальне значення на основі його значення в час виконання цієї початкової команди.
BuvinJ

15

Ви можете використовувати на Centos або RHEL для місцевого користувача:

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

Це додає поточний каталог (або ви можете використовувати інший каталог) до PATH, це зробить його постійним, але набуває чинності при наступному вході користувача.

Якщо ви не хочете робити повторний вхід, тоді можете використовувати:

source ~/.bash_profile

Це оновлення # User specific environment and startup programsцього коментаря присутнє в.bash_profile


12

Ви також можете постійно встановити, редагуючи один із цих файлів:

/etc/profile (для всіх користувачів)

~/.bash_profile (для поточного користувача)

~/.bash_login (для поточного користувача)

~/.profile (для поточного користувача)

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

Витягнуто з: http://www.sysadmit.com/2016/06/linux-anadir-ruta-al-path.html


7

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

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

Таким чином, все, що я повинен був зробити, це створити папку ~/binі помістити туди свої сценарії.


7

Я думаю, що найелегантніший спосіб:

1.додайте це у файл ~ / .bashrc Виконайте цю команду

gedit ~ / .bashrc

додайте свій шлях всередину нього

експортувати PATH = $ PATH: / opt / node / bin

2. джерело ~ / .bashrc

(Ubuntu)


6

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


2
У мене немає жодного з цих файлів/home/(username)
натисніть Upvote

3
@ClickUpvote: Яку оболонку ви використовуєте? (І файли, які починаються з крапки, приховані, вам потрібно щось на зразок, ls -aщоб їх побачити.)
David Schwartz

Якщо ви не маєте жодного з цих файлів (bashrc або профіль), ви можете їх створити вручну, і вони будуть автоматично використані
trve.fa7ad

4

Постійно додайте змінну PATH

Глобальний:

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

Місцеві (лише для користувачів):

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

Для глобального перезавантаження. Для місцевого переробки.

Приклад

Перед:

$ 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

Тут не слід використовувати подвійні лапки! echo 'export PATH = $ PATH: / new / path / змінний' ... І до речі, ключове слово експорту дуже ймовірно марно, оскільки змінна PATH дуже ймовірно вже позначена як експортована. - gniourf_gniourf


1
Ні. Тут не слід використовувати подвійні лапки! echo 'export PATH=$PATH:/new/path/variable'... І, до речі, exportключове слово дуже імовірно марно, оскільки PATHзмінна, ймовірно, вже позначена як експортована.
gniourf_gniourf

Ні, ви повинні використовувати подвійні лапки, тому що $ PATH в одиничних лапках не інтерполюється. І корисний експорт до речі.
користувач3439968

Зрозумів. Ви можете використовувати подвійні лапки або використовувати одинарні лапки, тому що $ PATH інтерполюється, коли ехо виконується або інтерполюється, коли / etc / profile виконується.
користувач3439968

1
@ user3439968 насправді подвійні котирування викличуть багато проблем, якщо ви додасте до $ PATH з декількох файлів. Поміркуйте: коли ви використовуєте подвійні лапки, $ PATH переводиться в статичний рядок з усіма визначеними раніше каталогами PATH. скажіть, ви додаєте /usr/localдо нього за допомогою ~/.bashrc. тепер, якщо ви маєте намір додавати /opt/binту саму змінну за допомогою /etc/bash.bashrc; $ PATH переведеться в ту саму статичну рядок, в результаті $ PATH буде замінено замість того, щоб додати ... Це буде питанням переваги системи одному файлу над іншим
trve.fa7ad

4

1. змініть файл "/ etc / profile".

#vi /etc/profile

Натисніть клавішу "i" для введення статусу редагування та переміщення курсору до кінця файлу. Додаткові записи:

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

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

2.Зробити конфігурацію ефективною

source /etc/profile

Поясніть: файл профілю працює для всіх користувачів, якщо ви хочете бути дійсними лише для активного користувача, встановіть файл ".bashrc"


4

Після стількох досліджень я знайшов просте рішення для цього (я використовую елементарну ОС ), натхнене наступним посиланням .

Виконайте наступну команду, щоб відкрити .bashrc файл у режимі редагування . [Ви також можете використовувати vi чи будь-який інший редактор].

~$ sudo nano ~/.bashrc

Додайте наступний рядок у кінці файлу та збережіть.

export PATH="[FLUTTER_SDK_PATH]/flutter/bin:$PATH"

Наприклад :

export PATH="/home/rageshl/dev/flutter/bin:$PATH"

введіть тут опис зображення

Я вважаю, що це перманентне рішення для встановлення шляху в трепет в дистрибутиві Ubuntu

Сподіваюсь, це допоможе.


3

Файли, до яких ви додаєте команду експорту, залежать від того, чи перебуваєте ви в режимі входу або в режимі без входу.

якщо ви перебуваєте в режимі входу, потрібні файли / etc / bash або /etc/bash.bashrc

якщо ви перебуваєте в режимі без входу, ви шукаєте файл /.profile або файли в каталозі /.profiles.d

файли, згадані вище, якщо там є системні змінні.


3

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


Рекомендований спосіб налаштування свого середовища
Юрій

1
Це лише в тому випадку, якщо ви хочете, щоб налаштування були загальносистемними, що, мабуть, не є найпоширенішим випадком використання. Більшість людей хочуть (або повинні хотіти), щоб шлях був заданий локально, оскільки більшість користувачів / ролей роблять контекстно різні операції, і чим менше припущень ви робите, тим краще.
mpowered

@mpowered, так, це лише для системи. Якщо ви хочете змінити локальний PATH, слід додати той самий експорт у ~ / .profile або ~ / .bashrc. Тут слід врахувати, що оболонки входу читають ~ / .profile та інтерактивні оболонки читають ~ / .bashrc. Це дуже важливо, оскільки, наприклад, ssh не робить логін, тому ~ / .profile не буде прочитаний. Кілька дистибуції, як джерело suse ~ / .bashrc в / etc / profile. Але це не для всіх linux '
Юрій

3

Zues77 має правильну ідею. ОП не сказала "як я можу зламати собі шлях через це". ОП хотіло знати, як остаточно додати до $ PATH:

sudo nano /etc/profile

Тут він встановлений для всього, і це найкраще місце, щоб змінити його для всіх речей, які потребують $ PATH


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 працювала чудово, і втрат на шляху не було.

EDIT 1: Причина, з якою може бути пов’язана ця проблема, полягає в тому, що параметри для оболонок, які не входять в систему, як-от термінал ubuntu або gnome-термінал, де ми запускаємо код go, беруться з ~./bash_rcфайлу, а параметри оболонок входу беруться з ~/.bash_profileфайлу, і з ~/.profileфайлу, якщо ~/.bash_profileфайл недоступний.


3

Скажімо, у вас працює MacOS і у вас є бінарний файл, якому ви довіряєте, і хочете зробити доступним у вашій системі, але не обов’язково бажати, щоб каталог, у якому бінарний файл буде доданий до вашої PATH, ви можете скопіювати копіювання / переміщення двійкові до /usr/local/bin, які вже повинні бути у вашій ПАРТІ. Це зробить бінарний файл виконуваним, як і будь-який інший бінарний файл, до якого ви вже можете мати доступ у своєму терміналі.


3

Його можна безпосередньо додати за допомогою наступної команди:

echo 'export PATH=$PATH:/new/directory' >> ~/.zshrc
source ~/.zshrc

2
Питання позначене міткою bash, так що це не дуже корисно.
Laurenz Albe

2
Це правильна відповідь -> в заголовку згадується лише Linux, тому bash та ТАКОЖ zsh зробить ... якщо тег лише "bash", нам потрібно також додати "zsh" до тегів
Carlos Saltos

2

найкращим простим способом є наступний рядок:
PATH="<directory you want to include>:$PATH"
у вашому .bashrc-файлі в домашньому каталозі.
Він не скинеться, навіть якщо закрити термінал або перезавантажити комп'ютер. Його постійне


1
@quant, якщо ви зробите те, що сказано, воно встановить ваші налаштування назавжди. він буде працювати, навіть якщо ви закриєте термінал.
Едвард Торвальдс

1

Я думаю, що найелегантніший спосіб:

1.додайте це у файл ~. / Bashrc

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

2. джерело ~ / .bashrc

(Ubuntu)


І щоб відобразити шлях після вище: printf "% s \ n" $ PATH
Robot70

1

Один із способів додати постійний шлях, який працював для мене, це:

    cd /etc/profile.d
    touch custom.sh
    vi custom.sh 
    export PATH=$PATH:/path according to your setting/

перезавантажте комп’ютер, і ось ми підемо, шлях буде постійно ура.


Вам фактично не потрібно перезавантажувати комп’ютер. Виходу з системи та повторного входу достатньо. Це досить елегантне рішення, оскільки дуже легко створювати резервні копії будь-яких змін, не потребуючи редагування файлів. Також легко вказати оператор if, так що якщо каталог не існує в системі, він не додається до змінної PATH.
Warwick

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

Це однолінійний . Це додає рядок до .bashrc. Рядок Tha перевірятиме, чи каталог вже додано до шляху, і додає, якщо ні. Це дозволить уникнути дублювання вашого каталогу у шляху кожного разу, коли ви створюєте джерело .bashrc.

echo "[[ \":\$PATH:\" != *\":$(pwd)/path/to/add:\"* ]] && export PATH=\"\${PATH:+\${PATH}}:$(pwd)/path/to/add\"" >> ~/.bashrc

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