Sunday, April 28, 2024
 Popular · Latest · Hot · Upcoming
294
rated 0 times [  294] [ 0]  / answers: 1 / hits: 413181  / 2 Years ago, tue, october 25, 2022, 2:39:41

Problem



I have an Ubuntu 11.04 Virtual Machine and I wanted to set up my Java development environment. I did as follows




  1. sudo apt-get install openjdk-6-jdk

  2. Added the following entries to ~/.bash_profile



    export JAVA_HOME=/usr/lib/jvm/java-6-openjdk

    export PATH=$PATH:$JAVA_HOME/bin

  3. Save the changes and exit


  4. Open up a terminal again and typed the following



    echo $JAVA_HOME   (blank)
    echo $PATH (displayed, but not the JAVA_HOME value)

  5. 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




  1. 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.

  2. Was in this case my terminal a non-login shell?

  3. 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?


More From » bash

 Answers
5

~/.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 use sudo -i or su - 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 change PATH)


[#39364] Wednesday, October 26, 2022, 2 Years  [reply] [flag answer]
Only authorized users can answer the question. Please sign in first, or register a free account.
allowiel

Total Points: 189
Total Questions: 103
Total Answers: 105

Location: Slovenia
Member since Thu, Mar 18, 2021
3 Years ago
;