macOS shell:脚本中的JAVA_HOME为空

时间:2016-11-21 18:20:52

标签: bash macos shell sh java-home

我有macOS 10.11.6。 JAVA_HOME.bash_profile中设置为

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

从命令行,我可以看到它

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

但是,当我运行以下脚本时,JAVA_HOME为空

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

echo $JAVA_HOME

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

即使我在脚本中使用#!/bin/bashJAVA_HOME仍为空。

2 个答案:

答案 0 :(得分:0)

TL; DR

根据您运行脚本的方式,您可能需要将导出放入〜/ .bashrc 以用于交互式shell,或者直接放入脚本或crontab中,以便它不依赖来自用户shell的导出。

Bash启动文件

简单地说,〜/ .bash_profile 脚本来自登录shell(例如/bin/bash -l),而〜/ .bashrc 文件来源于交互式shell(例如/bin/bash -i)。它实际上比这复杂一点,但上面应该让你指向正确的方向。

另见

答案 1 :(得分:0)

我这样配置我的:

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 --------------------
}

我在.bash_profile中使用了一些相关的shell方法:

{{1}}