我有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/bash
,JAVA_HOME
仍为空。
答案 0 :(得分:0)
根据您运行脚本的方式,您可能需要将导出放入〜/ .bashrc 以用于交互式shell,或者直接放入脚本或crontab中,以便它不依赖来自用户shell的导出。
简单地说,〜/ .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}}