【问题标题】:macOS shell: JAVA_HOME is empty inside scriptmacOS shell:脚本中的 JAVA_HOME 为空
【发布时间】:2016-11-21 18:20:52
【问题描述】:

我有 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 仍然是空的。

【问题讨论】:

    标签: bash macos shell sh java-home


    【解决方案1】:

    TL;DR

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

    Bash 启动文件

    简单地说,~/.bash_profile 脚本来源于登录 shell(例如 /bin/bash -l),而 ~/.bashrc 文件来源于交互式 shell(例如/bin/bash -i)。它实际上比这要复杂一些,但以上内容应该可以让您找到正确的方向。

    另见

    【讨论】:

      【解决方案2】:

      我的配置是这样的:

      # 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`"'
      

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-04-03
        • 2013-06-28
        • 2011-07-23
        • 1970-01-01
        • 2020-11-10
        • 1970-01-01
        • 1970-01-01
        • 2011-04-18
        相关资源
        最近更新 更多