-1

I have macOS 10.11.6. The JAVA_HOME is set in the .bash_profile as

export JAVA_HOME=$(/usr/libexec/java_home -v 1.8)
export PATH=$JAVA_HOME/bin:$PATH

From command line, I can see it

>echo $JAVA_HOME
/Library/Java/JavaVirtualMachines/jdk1.8.0_73.jdk/Contents/Home

But, the JAVA_HOME is empty, when I run the following script

#!/bin/sh
SHELL=/bin/sh
export SHELL

echo $JAVA_HOME

if [ -n "$JAVA_HOME" ]; then
    #do something
else
    echo JAVA_HOME is empty
fi

Even if I use #!/bin/bash in my script, the JAVA_HOME is still empty.

Bing Lu
  • 3,232
  • 7
  • 30
  • 38

2 Answers2

0

TL;DR

Depending on how you run your scripts, you may need to put your exports into ~/.bashrc for interative shells, or directly into your script or crontab so that it doesn't rely on exports from your user's shell.

Bash Startup Files

Simplistically, the ~/.bash_profile script is sourced for login shells (e.g. /bin/bash -l), while the ~/.bashrc file is sourced for interactive shell (e.g. /bin/bash -i). It's actually a bit more complicated than that, but the above should get you pointed in the right direction.

See Also

Todd A. Jacobs
  • 81,402
  • 15
  • 141
  • 199
0

I configure mine like this:

# configure Java  http://www.jenv.be/
# install Java: brew cask install java, brew cask install java7
# set global default: setJavaGlobal 1.7, jenv global 1.7
# set local folder default: jenv local 1.8
#
JENV_HOME=$HOME/.jenv
export PATH=.:$PATH:$JENV_HOME/bin
eval "$(jenv init -)"
export JAVA_HOME="$HOME/.jenv/versions/`jenv version-name`"
alias jenv_set_java_home='export JAVA_HOME="$HOME/.jenv/versions/`jenv version-name`"'

And some related shell methods I use in my .bash_profile :

setJavaGlobal() {
  jenv global $1;
  jenv_set_java_home
  echoJavaSetup
}
setJavaLocal() {
  jenv local $1;
  jenv_set_java_home
  echoJavaSetup
}
echoJavaSetup() {
  echo --------------------
  echo NEW JAVA SETUP:
  echo "  PATH: $PATH"
  export JAVA_VERSION=`java -version 2>&1 >/dev/null | grep 'java version' | awk '{print $3}'`
  echo "  JAVA: $JAVA_VERSION, $JAVA_HOME"
  jenv versions
  echo --------------------
}
removeJavaLocal() {
  rm -rf ./.java-version
}
showJava() {
  echo --------------------
  echo EXISTING JAVA SETUP:
  echo "  PATH: $PATH"
  export JAVA_VERSION=`java -version 2>&1 >/dev/null | grep 'java version' | awk '{print $3}'`
  echo "  JAVA: $JAVA_VERSION, $JAVA_HOME"
  jenv versions
  if [ -f ./.java-version ]; then
    echo "Using Java LOCAL DEFAULT.  Not using global default!  Run command 'removeJavaLocal' to change to global default."
  fi
  echo --------------------
}
djangofan
  • 28,471
  • 61
  • 196
  • 289