Problem
I have an Ubuntu 11.04 Virtual Machine and I wanted to set up my Java development environment. I did as follows
sudo apt-get install openjdk-6-jdk
-
Added the following entries to ~/.bash_profile
export JAVA_HOME=/usr/lib/jvm/java-6-openjdk export PATH=$PATH:$JAVA_HOME/bin
-
Save the changes and exit
-
Open up a terminal again and typed the following
echo $JAVA_HOME (blank) echo $PATH (displayed, but not the JAVA_HOME value)
-
Nothing happened, like if the export of JAVA_HOME and it's addition to the PATH were never done.
Solution
I had to go to ~/.bashrc and add the following entry towards the end of file
#Source bash_profile to set JAVA_HOME and add it to the PATH because for some reason is not being picked up
. ~/.bash_profile
Questions
- Why did I have to do that? I thought bash_profile, bash_login or profile in absence of those two get executed first before bashrc.
- Was in this case my terminal a non-login shell?
- If so, why when doing su after the terminal and putting the password it did not execute profile where I had also set the exports mentioned above?
Best Answer
~/.bash_profile
is only sourced by bash when started in login mode. That is typically when you log in at the console (Ctrl+Alt+F1..F6), connect via ssh, or usesudo -i
orsu -
to run commands as another user.When you log in graphically,
~/.profile
will be specifically sourced by the script that launches gnome-session (or whichever desktop environment you're using). So~/.bash_profile
is not sourced at all when you log in graphically.When you open a terminal, the terminal starts bash in (non-login) interactive mode, which means it will source
~/.bashrc
.The right place for you to put these environment variables is in
~/.profile
, and the effect should be apparent next time you log in.Sourcing
~/.bash_profile
from~/.bashrc
is the wrong solution. It's supposed to be the other way around;~/.bash_profile
should source~/.bashrc
.See DotFiles for a more thorough explanation, including some history of why it is like it is.
(On a side note, when installing openjdk via apt, symlinks should be set up by the package, so that you don't really need to set
JAVA_HOME
or changePATH
)