Ask Ubuntu is a question and answer site for Ubuntu users and developers. Join them; it only takes a minute:

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

How do I add a directory to my $PATH in Ubuntu and make the changes permanent?

share|improve this question

migrated from Sep 6 '11 at 7:35

This question came from our site for system and network administrators.

Thanks for question. – Sherali Turdiyev Oct 17 '15 at 10:45

16 Answers 16

up vote 284 down vote accepted

Using ~/.profile to set $PATH

A path set in .bash_profile will only be set in a bash login shell (bash -l). If you put your path in .profile it will be available to your complete desktop session. That means even metacity will use it.

For example ~/.profile:

if [ -d "$HOME/bin" ] ; then

Btw, you can check the PATH variable of a process by looking at its environment in /proc/[pid]/environ. (replace [pid] with the number from ps axf)


bash as a login shell doesn't parse .profile if either .bash_profile or .bash_login exists. From man bash :

it looks for ~/.bash_profile, ~/.bash_login, and ~/.profile, in that order, and reads and executes commands from the first one that exists and is readable.

See the answers below for information about .pam_environment, or .bashrc for interactive non-login shells, or set the value globally for all users by putting a script into /etc/profile.d/ or use /etc/X11/Xsession.d/ to affect the display managers session.

share|improve this answer
Cool, that worked. I saw where it will auto add the bin dir if I make it so I just used that instead of scripts. TY. – justingrif Jul 22 '09 at 22:13
On Xbunutu .profile isn't be executed so I put it in .bashrc and it works. – oliman Aug 25 '12 at 22:21
This piece of documentation is very well done: Official documentation about environment variable. Consider reading it (not to say that is updated to the last version of the rules to add values to environment variable). – Michele May 23 '13 at 13:38
If you were thinking of using spaces in the PATH statement like: PATH = "... you're in for a treat: Bash will fail to parse it and just respond that PATH isn't a command. – Chris Moschini May 2 '14 at 17:20
@LiveWireBT: Could you drop into the AU general chat and discuss where you got the info from your edit March 7??? – Fabby Aug 21 '15 at 22:15

Edit .bashrc in your home directory and add the following line:

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

You will need to source your .bashrc or logout/login (or restart the terminal) for the changes to take effect.

To source your .bashrc, simply type

$ source .bashrc

when in the home directory.

share|improve this answer
How do you "source your .bashrc"? How do you "restart the terminal"? – isomorphismes Sep 10 '11 at 1:16
In bash it is simply '. .bashrc' – Ophidian Sep 12 '11 at 2:54
I was making the assumption that you were in your home directory. since that's where the .bashrc you want to edit is. – Ophidian Feb 16 '12 at 14:23
.bashrc is not the right place for setting environment variables. They should go in .profile or .pam_environment. See – geirha Mar 2 '12 at 12:21
@LaoTzu . .bashrc not .bashrc :) or source .bashrc for that matter – Znarkus Aug 21 '12 at 8:26

The recommended place to define permanent, system-wide environment variables applying to all users is in:


(which is where the default PATH is defined)

This will work in desktop or console, gnome-terminal or TTY, rain or shine ;)

  • To edit, press Alt+F2 and type:

    gksudo gedit /etc/environment

    (or open the file using sudo in your favorite text editor)

To effect changes, run . /etc/environment. Since this file is just a simple script it will run and assign the new path to the PATH environment variable. To check run env and see the PATH value in the listing.


share|improve this answer
and then you need to reboot for changes to take effect... – Lee Nov 17 '13 at 9:27
This is exactly what I needed. Provisioning a throw-away vm image via vagrant and needed to add node and npm to the path. – Austin Pray Jun 30 '14 at 3:07
To take changes in effect run . /etc/environement (yes, dot, a space and /etc/environment). Since this file is just a simple script it will run and assign the new path to the PATH environment variable. To check run env and see the PATH value in the listing. – WindRider May 20 '15 at 13:27
Goddamn perfect. This is the simplest method and solves all problems in a jiffy. Thanks guys! – linuxode Mar 10 at 12:03

I think the better way in idealogy of Ubuntu is:

  • create new file under /etc/profile.d/

    sudo vi /etc/profile.d/
  • add there:

  • and give right on executable

    sudo chmod a+x /etc/profile.d/
share|improve this answer
It is usually safer to add your custom path to the end of PATH instead of the beginning. This avoids accidentally replacing system commands with your programs (or someone else's malicious programs). This also avoids a lot of confusion when someone else works on your system (or gives you advice) and they get unexpected results from commands you have "replaced". – Joe Feb 7 '13 at 16:37

For complete newbies (like I am) who are more comfortable with GUI:

  1. Open your $HOME folder.
  2. Go to ViewShow Hidden Files or press Ctrl + H.
  3. Right click on .profile and click on Open With Text Editor.
  4. Scroll to the bottom and add PATH="$PATH:/my/path/foo".
  5. Save.
  6. Log out and log back in to apply changes (let Ubuntu actually load .profile).
share|improve this answer
Editing the .profile file is not recommended anymore.You can still use this method to edit the file .pam_environment see: – PulsarBlow May 19 '13 at 4:20
Thank @PulsarBlow! I'm not really sure what's exactly the difference and the benefit though... This is the direct URL to the relevant section:… – dain May 20 '13 at 12:22

For persistent environment variables available to particular users only. I highly recommend Ubuntu official documentation.

Referring to documentation above, I have setup my Android SDK path-tools by:

  1. creating ~/.pam_environment file in home directory.
  2. the content of which is PATH DEFAULT=${PATH}:~/android-sdk-linux/tools.
  3. additional custom user path can be added by separating paths with colon (:).
  4. this requires re-login, which means you need to log-out and log-in back to desktop environment.
share|improve this answer
This is the best answer. – Paulo Coghi Aug 22 '15 at 13:02
Thanks brother, I have done only your way. It is easy. Thanks a lot. ^__^ – Sherali Turdiyev Oct 17 '15 at 10:44

Put that line in your ~/.bashrc file.

It gets sourced whenever you open a terminal

EDIT: Based on the comments below, for a more general setting that will apply to all shells (including when you hit Alt-F2 in Unity), add the line to your ~/.profile file. Probably shouldn't do both however, as the path will be added twice to your PATH environment if you open a terminal.

share|improve this answer
Actually, I thought you set the path in either $HOME/.profile for personal settings, or /etc/profile for all users. But if it's only needed for bash, I suppose either will work. – Marty Fried Jul 31 '12 at 1:37
If you set it in ~/.bashrc, it'll only be available in the terminals you open. E.g. if you hit Alt+F2 and try to run a command from that dir, it won't find it. If you set it in ~/.profile or ~/.pam_environment, the gnome session (or whichever DE you use) will inherit it. Appending PATH in ~/.bashrc also has the drawback that if you open/exec bash interactively from another interactive bash shell, it'll be appended multiple times. – geirha Jul 31 '12 at 4:58
I haven't really looked into this for a while, so I did a search, and it seems that there are at least 95 different ways to set the path, most of which are discussed here. I never figured out which one is best. I think ~/.profile is correct for personal paths, though; that's where Ubuntu adds the ~/bin directory. And I confess that I exaggerated a slight bit on the number of ways - just a little. – Marty Fried Jul 31 '12 at 5:02
@MartyFried, yes, to quote the bot in #bash on freenode: «The overwhelming majority of bash scripts, code, tutorials, and guides on the Internet are crap. Sturgeon was an optimist.» Using google for bash problem, you'll often find a lot of half-working solutions before you find a good one. Oh and I'd go with ~/.profile in this case too. – geirha Jul 31 '12 at 5:14
@geirha - I agree that most guides on the internet in general are probably crap, especially anything linux since different distros, or even different versions of the same one, do things differently. It usually boils down to what works, but most people don't realize that what works is simply what works, not necessarily what's right or even what will always work. I try to figure out which of the many ways is actually correct, because I hate doing things more than once - but it's not always easy. :) – Marty Fried Jul 31 '12 at 18:50

To set it system wide, append the line export PATH=/path/you're/adding:$PATH to the end of /etc/profile.

To add the directory for only the logged-in user, append the same line to ~/.bash_profile.

share|improve this answer

Adding it to .bashrc will work but I think the more traditional way of setting up your path variables is in .bash_profile by adding the following lines.

export PATH

According to this thread it appears as though Ubuntu's behavior is slightly different than RedHat and clones.

share|improve this answer
I don't have a .bash_profile, Should I create it? – justingrif Jul 22 '09 at 21:39
If you have .bashrc, stick it in .bashrc instead. GUI terminals in Ubuntu are not login shells, so .bash_profile will not be run. – koenigdmj Jul 22 '09 at 21:58
I am not running a gui shell. But from the thread above it looks like the .bashrc will work just fine. – justingrif Jul 22 '09 at 22:05
Both will work if your shell is a login shell. But I just tried the .bash_profile approach on one of my Ubuntu machines and even after restarting my gnome session it didn't source my .bash_profile. So I would say that putting this in .bashrc is probably the way to go with Ubuntu. – 3dinfluence Jul 23 '09 at 2:30
@justingrif No, you don't need .bash_profile. If bash doesn't find a .bash_profile (when you log in interactively), it will look for .profile and use that instead. By default, you'll have a .profile and .bashrc in Ubuntu. And .profile is the correct place to set environment variables if we disregard pam_env. – geirha Mar 2 '12 at 12:19
sudo vi /etc/profile.d/

add there

share|improve this answer
sudo nano /etc/profile.d/ is easier for beginners. – isomorphismes Sep 10 '11 at 1:22
For beginners, gksu gedit /etc/profile.d/ is even easier. – InkBlend Mar 26 '13 at 0:04

In terminal, cd to the_directory_you_want_to_add_in_the_path

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

This wasn't my idea. I found this way to export path at this blog here.

share|improve this answer

Whenever I "install" my folder of BASH scripts, I follow the pattern of the test for a $HOME/bin folder that's in most .profile files in recent versions of Ubuntu. I set a test that looks like

if [ -d "/usr/scripts" ]; then

It works just about 100% of the time, and leaves me free to change it in a GUI text editor with a quick "Replace all" should I ever decide to move /scripts somewhere closer to my $HOME folder. I haven't done so in 6 Ubuntu installs, but there's "always tomorrow." S


share|improve this answer

Open your terminal, type gedit .profile and insert the following:

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

 #the following line add Bin where you dont have a Bin folder on your $HOME

Close and open terminal, it should be working.

share|improve this answer

For Ubuntu edit the ~/.bashrc and add the following line.

. ~/.bash_profile

Then edit your .bash_profile as you need.....

share|improve this answer
Downvoted because you didn't explain how to "edit your .bash_profile as you need". What exactly do I need to do to the .bash_profile? – isomorphismes Sep 10 '11 at 1:17
This is the wrong way. .profile or .bash_profile should source .bashrc. Not the other way around. – geirha Mar 2 '12 at 12:15

Put it to your ~/.bashrc or whatevershell you use rc (or to beforementioned ~/.profile) AND ~/.xsessionrc so it will also work in X (outside shell).

share|improve this answer

There is all you need to know. I found out that a lot of the input here was incorrect or at least the method was not suggested. This is a great piece of information that will let you figure out where to modify your environment variable based on the reason you are doing it and exactly how to do it without screwing everything up (like I did following some of the aforementioned bad advice).

So long, and thanks for all the fish!

share|improve this answer
Whilst this may theoretically answer the question, it would be preferable to include the essential parts of the answer here, and provide the link for reference. – Videonauth Jun 12 at 20:36
What is it that we need to know? – Pierre.Vriens Jun 12 at 20:52
Well, the question on this thread is "How do I add a directory to my $PATH in Ubuntu and make the changes permanent?", so that's a pretty good clue. Also, the help page I provided the link to has a lot more relevant and useful information pertaining to adding directories to env path and details the differences in the different ways you can do this, such as adding a directory to the path for a single user or for all users and adding to the env path by direct editing of a file or by exporting a value. If you want to know more, just click that link and read. – Bus42 Jun 22 at 18:50

protected by heemayl Aug 21 '15 at 22:00

Thank you for your interest in this question. Because it has attracted low-quality or spam answers that had to be removed, posting an answer now requires 10 reputation on this site (the association bonus does not count).

Would you like to answer one of these unanswered questions instead?

Not the answer you're looking for? Browse other questions tagged or ask your own question.