This question already has an answer here:

I have added this line at the end of ~/.bashrc

export JAVA_HOME=/usr/java/jdk1.5.0_07/bin/java

But when I execute echo $JAVA_HOME, I don't get anything as output, I expected "/usr/java/jdk1.5.0_07/bin/java".

Any idea?

OS: Ubuntu 11.10

marked as duplicate by Jeff Schaller, Rui F Ribeiro, xhienne, Eric Renouf, cas Aug 6 '17 at 13:37

This question has been asked before and already has an answer. If those answers do not fully address your question, please ask a new question.

  • If you type source ~/.bashrc, does it work? – Renan Mar 23 '12 at 17:00
  • 3
    Getting the obvious question out of the way: have you restarted bash / reloaded the rc file since making the change? – jw013 Mar 23 '12 at 17:00
  • 1
    As a peripheral comment: export JAVA_HOME=/usr/java/jdk1.5.0_07/bin/java is not a good practice. Generally, JAVA_HOME is exported as the parent directory where java artifacts are installed. In your case, it would be: export JAVA_HOME=/usr/java/jdk1.5.0_07. Then, you can add the bin dir of $JAVA_HOME to your PATH, eg. export PATH=$JAVA_HOME/bin:$PATH – mkc Dec 15 '13 at 5:25

Both /etc/bashrc and ~/.bashrc are whats referred to as non-login files. Meaning they do not get sourced during a login shell unless called by /etc/profile or another file.

If /etc/profile calls it (as is typical) then if you want to test it in your current shell you have to either source it.

/root: #> source .bashrc (source with the command source)

/root: # . .bashrc (source with a period)

Or you have to instantiate a login shell by using su or sudo.

/root: # su - (the dash starts a login shell which will re-source login files)

/root: # sudo su - (using sudo to perform the switch user command)

and of course you could just re-login.


Typically though Java paths are not set using .bashrc they are set as separate scripts in the /etc/profile.d directory. At least on the enterprise distributions I use.

system1:/etc/profile.d # ll
-rw-r--r-- 1 root root  1438 Aug 30  2005 alljava.csh
-rw-r--r-- 1 root root  1682 Jul 13  2005 alljava.sh

system1:/etc/profile.d # cat alljava.sh
if [ -x /usr/$__libdir/jvm/java/bin/java ] || [ -x /usr/$__libdir/jvm/java/bin/jre ] ; then
export JAVA_BINDIR=/usr/$__libdir/jvm/java/bin
export JAVA_ROOT=/usr/$__libdir/jvm/java
export JAVA_HOME=/usr/$__libdir/jvm/java
#....cut for brevity...

To enable the change which you have performed on ~/.bashrc file, you need to execute the command mentioned in the ~/.bashrc file . For this you have to close the terminal and open it again.

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