首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >JAVA_HOME未设置,无法继续。(在Linux上安装Apache )

JAVA_HOME未设置,无法继续。(在Linux上安装Apache )
EN

Stack Overflow用户
提问于 2022-11-26 04:09:30
回答 1查看 41关注 0票数 0

我是怎么在这里的。

  1. 运行命令:opt/develop/spark-3.3.1$ sudo ./dev/make-distribution.sh -pHADOOP-3 Dhadoop.version=3.2.4 -Pyarn --name custom-spark --pip --r --tgz -Psparkr -Phive -Phive-thriftserver -Pmesos -Pyarn -Pkubernetes脚本(make-distribution.sh)显然没有读取变量的值,即$JAVA_HOME。
  • 运行命令:/opt/develop/spark-3.3.1$ echo $JAVA_HOME显示预期结果: /usr/lib/jvm/jdk-19.0.1
  • 尝试:好吧,添加到文件/opt/develop/smack-3.3.1/sbin/smack-config.sh export JAVA_HOME="/usr/lib/jvm/jdk-19.0.1" export PATH=$PATH:$JAVA_HOME/bin似乎没有改变运行命令的结果。注销和重新登录也无济于事。
  • 注-1:我的JAVA_HOME也在/etc/profile.d/ My -envvars文件中设置为:export JAVA_HOME="/usr/lib/jvm/jdk-19.0.1" export PATH=$PATH:$JAVA_HOME/bin
  • 注意-2:命令java --versionjavac --version似乎运行良好。

文件: /opt/develop/dev/make-distribution.sh如下:

代码语言:javascript
运行
复制
set -o pipefail
set -e
set -x

# Figure out where the Spark framework is installed
SPARK_HOME="$(cd "`dirname "$0"`/.."; pwd)"
DISTDIR="$SPARK_HOME/dist"

MAKE_TGZ=false
MAKE_PIP=false
MAKE_R=false
NAME=none
MVN="$SPARK_HOME/build/mvn"

function exit_with_usage {
  set +x
  echo "make-distribution.sh - tool for making binary distributions of Spark"
  echo ""
  echo "usage:"
  cl_options="[--name] [--tgz] [--pip] [--r] [--mvn <mvn-command>]"
  echo "make-distribution.sh $cl_options <maven build options>"
  echo "See Spark's \"Building Spark\" doc for correct Maven options."
  echo ""
  exit 1
}

# Parse arguments
while (( "$#" )); do
  case $1 in
    --tgz)
      MAKE_TGZ=true
      ;;
    --pip)
      MAKE_PIP=true
      ;;
    --r)
      MAKE_R=true
      ;;
    --mvn)
      MVN="$2"
      shift
      ;;
    --name)
      NAME="$2"
      shift
      ;;
    --help)
      exit_with_usage
      ;;
    --*)
      echo "Error: $1 is not supported"
      exit_with_usage
      ;;
    -*)
      break
      ;;
    *)
      echo "Error: $1 is not supported"
      exit_with_usage
      ;;
  esac
  shift
done

if [ -z "$JAVA_HOME" ]; then      # THIS SHOULD EVALUATE FALSE.
  # Fall back on JAVA_HOME from rpm, if found
  if [ $(command -v  rpm) ]; then
    RPM_JAVA_HOME="$(rpm -E %java_home 2>/dev/null)"
    if [ "$RPM_JAVA_HOME" != "%java_home" ]; then
      JAVA_HOME="$RPM_JAVA_HOME"
      echo "No JAVA_HOME set, proceeding with '$JAVA_HOME' learned from rpm"
    fi
  fi

  if [ -z "$JAVA_HOME" ]; then
    if [ `command -v java` ]; then
      # If java is in /usr/bin/java, we want /usr
      JAVA_HOME="$(dirname $(dirname $(which java)))"
    fi
  fi
fi


if [ -z "$JAVA_HOME" ]; then    # This SHOULD EVALUATE FALSE. APPARENTLY, IT DOES NOT
  echo "Error: JAVA_HOME is not set, cannot proceed."
  # I Should not be here, but I am!
  exit -1
fi

`

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-11-27 06:21:16

您的问题在于您正在使用sudo执行脚本,这在默认情况下不会保留环境变量。

作为一个小的示范,请考虑以下几点:

代码语言:javascript
运行
复制
someone@somewhere:~/my-path$ export SOMEVAR="testmyvar"
someone@somewhere:~/my-path$ echo $SOMEVAR
testmyvar
someone@somewhere:~/my-path$ sudo bash -c 'echo $SOMEVAR'

如您所见,在使用sudo执行命令时,并不会保留所有的环境变量。

幸运的是,有一个非常简单的解决方法:使用sudo -E (确实保留环境变量,您可以在sudo的手册页中找到该选项)。

所以,在我们的小例子中,稍微高一点:

代码语言:javascript
运行
复制
someone@somewhere:~/my-path$ sudo -E bash -c 'echo $SOMEVAR'
testmyvar

您可以看到-E选项执行您希望它做的事情!

希望这能解决你的问题:)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74579660

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档