Arch linux set path

How to permanently set $PATH on Linux/Unix [closed]

Closed. This question does not meet Stack Overflow guidelines. It is not currently accepting answers.

This question does not appear to be about a specific programming problem, a software algorithm, or software tools primarily used by programmers. If you believe the question would be on-topic on another Stack Exchange site, you can leave a comment to explain where the question may be able to be answered.

Background

This works, however each time I exit the terminal and start a new terminal instance, this path is lost, and I need to run the export command again. How can I do it so this will be set permanently?

If you are on a mac, then bashrc works fine, no need to continuously source ~/.profile for the terminal to read from the environment variables

24 Answers 24

You need to add it to your ~/.profile or ~/.bashrc file.

Depending on what you’re doing, you also may want to symlink to binaries:

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

Note that this will not automatically update your path for the remainder of the session. To do this, you should run:

source ~/.profile or source ~/.bashrc 

A couple of questions. 1) Shouldn’t there be a colon between $PATH and /usr/bin . 2) Should /usr/bin even be there. 3) Shouldn’t you rather use /usr/local/bin ?

Please note: it’s often considered a security hole to leave a trailing colon at the end of your bash PATH because it makes it so that bash looks in the current directory if it can’t find the executable it’s looking for. Users who find this post looking for more information should be advised of this.

@AdamRobertson It is unsafe- consider the scenario when you unpack a tarball, then cd to the directory you unpacked it in, then run ls —and then realize that the tarball had a malicious program called ls in it.

I think I significantly improved the quality of this answer, and addressed a few issues which other users brought up. Every path export, or every command which adjusts the path, should always make sure to separate an existing path with a colon. Leading or trailing colons should never be used, and the current directory should never be in the path.

There are multiple ways to do it. The actual solution depends on the purpose.

The variable values are usually stored in either a list of assignments or a shell script that is run at the start of the system or user session. In case of the shell script you must use a specific shell syntax and export or set commands.

Читайте также:  Где хранится базы данных mysql linux

System wide

  1. /etc/environment List of unique assignments. Allows references. Perfect for adding system-wide directories like /usr/local/something/bin to PATH variable or defining JAVA_HOME . Used by PAM and systemd.
  2. /etc/environment.d/*.conf List of unique assignments. Allows references. Perfect for adding system-wide directories like /usr/local/something/bin to PATH variable or defining JAVA_HOME . The configuration can be split into multiple files, usually one per each tool (Java, Go, and Node.js). Used by systemd that by design do not pass those values to user login shells.
  3. /etc/xprofile Shell script executed while starting X Window System session. This is run for every user that logs into X Window System. It is a good choice for PATH entries that are valid for every user like /usr/local/something/bin . The file is included by other script so use POSIX shell syntax not the syntax of your user shell.
  4. /etc/profile and /etc/profile.d/* Shell script. This is a good choice for shell-only systems. Those files are read only by shells in login mode.
  5. /etc/.rc . Shell script. This is a poor choice because it is single shell specific. Used in non-login mode.

User session

  1. ~/.pam_environment . List of unique assignments, no references allowed. Loaded by PAM at the start of every user session irrelevant if it is an X Window System session or shell. You cannot reference other variables including HOME or PATH so it has limited use. Used by PAM.
  2. ~/.xprofile Shell script. This is executed when the user logs into X Window System system. The variables defined here are visible to every X application. Perfect choice for extending PATH with values such as ~/bin or ~/go/bin or defining user specific GOPATH or NPM_HOME . The file is included by other script so use POSIX shell syntax not the syntax of your user shell. Your graphical text editor or IDE started by shortcut will see those values.
  3. ~/.profile , ~/._profile , ~/._login Shell script. It will be visible only for programs started from terminal or terminal emulator. It is a good choice for shell-only systems. Used by shells in login mode.
  4. ~/.rc . Shell script. This is a poor choice because it is single shell specific. Used by shells in non-login mode.

Notes

GNOME on Wayland starts a user login shell to get the environment. It effectively uses the login shell configurations ~/.profile , ~/._profile , ~/._login files.

Man pages

Источник

Arch Linux

does anyone know how to add this to my PATH so that i can use tab completion?

#2 2009-11-12 19:38:24

Re: add directory to PATH

$PATH is a global variable. You can assign a global variable like

Without the ‘export’ it would be a local variable, visible only in the current shell instance. Because you want to pass this variable to programs or scripts you run, you make it global.

Читайте также:  Как разархивировать gzip linux

To make this permanent/default put the statement in your ~/.bashrc (or your shells config if you’re using something else than bash), so it will execute as soon as you start your shell. For example a line from my config:

[[ -d $HOME/.bin ]] && export PATH=$HOME/.bin:$PATH

As you can see with `echo $PATH`, the paths in $PATH are separated by a ‘:’. So I prepend the value of $HOME (your homefolder) and a ‘:’ to the current value of $PATH, and assign it to $PATH.

For lack of better words: chair, never, toothbrush, really. Ohw, and fish!

#3 2009-11-12 20:28:28

Re: add directory to PATH

i read this somewhere as the «right» way to do it. using this approach only adds the new directory/ies if they aren’t already present so you don’t eff up your PATH if you re-source .bashrc again later.

# what to add to path NPATH="$HOME/.bin" # add it only if required case ":$:" in *:$:*) ;; *) PATH=$:$NPATH ;; esac export PATH

you could easily add the check if the directory exists first. you could also reorder PATH and NPATH depending on which should take precedence.

#4 2009-11-13 06:12:56

Re: add directory to PATH

@brisbin33
Yup — that is a very wise suggestion .
Personally I have something I call ‘brush_path’ where I can prepend/append directories to the original $PATH (directories with a leading ‘-‘ are prepended and a ‘+’ appends them — it goes something like this:

#!/bin/sh # process arguments - only those starting with '-' or '+' are honoured . preps="" apps="" for a in $*; do case $a in -*) preps="$preps $" ;; +*) apps="$apps $" ;; esac done # get the complete path dirs="`echo $preps $PATH $apps | tr ':' ' '`" # clean it all up . newpath="" for d in $dirs; do ok=yes for p in $newpath; do test "$d" = "$p" && < ok=no; break; >done test "$ok" = yes && newpath="$newpath $d" done echo $newpath | tr ' ' ':'

Now — as one of the last things I do in .bashrc is:

test -f /usr/local/bin/brush_path && export PATH="`sh /usr/local/bin/brush_path -~/bin -/usr/local/bin"

Last edited by perbh (2009-11-13 06:18:29)

Источник

Как установить или изменить переменную среды $PATH в Linux

Команды LINUX «от A до Z» — настольная книга с примерами

Как установить или изменить переменную среды $PATH в Linux

В Linux (также UNIX) $PATH — это переменная среды, используемая для указания оболочке, где искать исполняемые файлы. $PATH обеспечивает большую гибкость и безопасность для систем Linux, и, безусловно, можно сказать, что это одна из самых важных переменных среды.

Программы/скрипты, расположенные в каталоге $PATH, могут быть выполнены непосредственно в вашей оболочке без указания полного пути к ним. В этой статье вы узнаете, как установить переменную $PATH глобально и локально.

Сначала давайте посмотрим ваше текущее значение $PATH. Откройте терминал и выполните следующую команду:

path

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

В разных оболочках это делается так:

  • оболочка Bash -> ~ / .bash_profile, ~ / .bashrc или .profile
  • оболочка Korn -> ~ / .kshrc или .profile
  • оболочка Z -> ~ / .zshrc или .zprofile
Читайте также:  Количество дискового пространства linux

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

  • /bin/bash — запуск оболочки
  • /etc/profile — глобальный системный файл инициализации, запускается при входе в оболочку
  • /etc/bash.bashrc — глобальный системный файл сценария конфигурации оболочки
  • ~/.bash_profile — персональный файл инициализации пользователя, запускается при входе в оболочку
  • ~/.bashrc — персональный файл сценария конфигурации оболочки
  • ~/.bash_logout — персональный файл сценария выхода для очистки оболочки, запускается когда пользователь выходит с оболочки
  • ~/.inputrc — персональный файл конфигурации клавиатуры для специфических ситуаций

[/bash]$ export PATH=$PATH:/path/to/new/bin/dir[/bash]

Курсы Python с нуля до DevOps на практике за 1,5 часа

Конечно, в приведенном выше примере вы должны заменить /path/to/new/bin/dir на путь с бинарниками, которые вы хотите добавить в $PATH. После того, как вы изменили свой файл .*rc или .*_profile, вам нужно будет его снова записать (прочитать заново), используя команду source.

Например, в bash вы можете сделать это:

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

Спасибо за уделенное время на прочтение статьи!

Если возникли вопросы, задавайте их в комментариях.

Подписывайтесь на обновления нашего блога и оставайтесь в курсе новостей мира инфокоммуникаций!

Чтобы знать больше и выделяться знаниями среди толпы IT-шников, записывайтесь на курсы Cisco от Академии Cisco, курсы Linux от Linux Professional Institute на платформе SEDICOMM University.

Курсы Git за час: руководство для начинающих DevOps / DevNet инженеров

Курсы Cisco, Linux, кибербезопасность, DevOps / DevNet, Python с трудоустройством!

Спешите подать заявку! Группы стартуют 25 января, 26 февраля, 22 марта, 26 апреля, 24 мая, 21 июня, 26 июля, 23 августа, 20 сентября, 25 октября, 22 ноября, 20 декабря.

  • Поможем стать экспертом по сетевой инженерии, кибербезопасности, программируемым сетям и системам и получить международные сертификаты Cisco, Linux LPI, Python Institute.
  • Предлагаем проверенную программу с лучшими учебниками от экспертов из Cisco Networking Academy, Linux Professional Institute и Python Institute, помощь сертифицированных инструкторов и личного куратора.
  • Поможем с трудоустройством и стартом карьеры в сфере IT — 100% наших выпускников трудоустраиваются.
  • Проведем вечерние онлайн-лекции на нашей платформе.
  • Согласуем с вами удобное время для практик.
  • Если хотите индивидуальный график — обсудим и реализуем.
  • Личный куратор будет на связи, чтобы ответить на вопросы, проконсультировать и мотивировать придерживаться сроков сдачи экзаменов.
  • Всем, кто боится потерять мотивацию и не закончить обучение, предложим общение с профессиональным коучем.
  • отредактировать или создать с нуля резюме;
  • подготовиться к техническим интервью;
  • подготовиться к конкурсу на понравившуюся вакансию;
  • устроиться на работу в Cisco по специальной программе. Наши студенты, которые уже работают там: жмите на #НашиВCisco Вконтакте, #НашиВCisco Facebook.

Чтобы учиться на курсах Cisco, Linux LPI, кибербезопасность, DevOps / DevNet, Python, подайте заявку или получите бесплатную консультацию.

Источник

Оцените статью
Adblock
detector