How do I modify my PATH so that the changes are available in every Terminal session

The following command adds a path to your current path:

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

If you want your setup to execute this command every time, there are a number of places where you can put it. When you login, the following scripts will be executed in this order:

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

Notes

  • ~/.profile is only loaded if ~/.bash_profile and ~/.bash_login DO NOT EXIST. Otherwise, at least bash, will load them instead. It is advisable to use .profile and not the bash specific scripts. So, if in these attempts you created .bash_login, please delete it now.

  • ~/.bashrc is only loaded if you are running an interactive session. (something with a prompt where you can actually type something).

  • ~/.bashrc is loaded again and again, every time you open up a new terminal. So a new tab in gnome-terminal, a new virtual terminal, etc. So even if you don't login again, .bashrc is loaded (and thereby resets its environment) every time you open a new shell.

  • Things like byobu should really go into .profile, (otherwise it won't work ;-)

  • Things like paths should go into .profile if you want them to work outside of the interactive sessions. (say when you press Alt+F2 in GNOME)


I got it to work by modifying ~/.profile

It looks like adding ~/bin to my path was a bad example, as there is already code in ~/.profile to do that automatically, if the directory exists.

To add the usr/local/foo directory to my path for every session going forward, I add/edit the following line at the end of my .profile:

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

However, to make this take effect, I needed to log out and log back in (simply closing the Terminal window and opening a new one did NOT work).


To reload .profile and take changes effects without logout/login, run:

source ~/.profile