Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用bash脚本更新JAVA_HOME_Bash_Shell - Fatal编程技术网

使用bash脚本更新JAVA_HOME

使用bash脚本更新JAVA_HOME,bash,shell,Bash,Shell,我不熟悉bash脚本,所以这个问题, 我有一个在系统中安装java并在bashrc中更新路径的函数 install_java(){ echo "Installing Java 8 & 11 and setting JAVA_HOME to 8" brew tap adoptopenjdk/openjdk brew cask install adoptopenjdk8 brew cask install adoptopenjdk11 echo "export JAVA_

我不熟悉bash脚本,所以这个问题, 我有一个在系统中安装java并在bashrc中更新路径的函数

install_java(){
  echo "Installing Java 8 & 11 and setting JAVA_HOME to 8"
  brew tap adoptopenjdk/openjdk
  brew cask install adoptopenjdk8
  brew cask install adoptopenjdk11
  echo "export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_131.jdk/Contents/Home"
}
我想用java-version的输出更新硬编码的版本字符串 这是我的java版本输出

java version "1.8.0_201"
Java(TM) SE Runtime Environment (build 1.8.0_201-b09)
Java HotSpot(TM) 64-Bit Server VM (build 25.201-b09, mixed mode)

有人能帮我从第一行提取版本号,用它代替JAVA_HOME变量中的版本号吗

这里使用
java-version | grep-oP'java version\s“\K[^”]+'
解析java版本,并存储在
java版本
变量中,然后在
java\u HOME
赋值中替换

install_java(){
  echo "Installing Java 8 & 11 and setting JAVA_HOME to 8"   
  brew tap adoptopenjdk/openjdk
  brew cask install adoptopenjdk8
  brew cask install adoptopenjdk11
  java_ver=$(java -version 2>&1|grep -oP 'version\s"\K[^"]+')
  echo "export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk${java_ver}.jdk/Contents/Home"
}
解释
java-version2>&1 | grep-oP'version\s“\K[^”]+”

grep-o
:这将只提取匹配内容,而不是匹配行,
-p
标志enable
PCRE
,现在正则表达式是java版本,后跟空格(
\s
),然后后跟
,直到看到下一个
。另外,忽略
\K
左侧的任何内容

如果您的grep上没有启用
-p
,则可以使用
awk
命令:


我在你的终端上运行了
echo$java\u ver
,它是一个空字符串。你能在你的终端上运行
java-version | grep-oP'java version\s”\K[^”]+
吗?用
java-version 2>&1
替换
java-version
@MelissaStewart,更新答案,请重试,原因,
java-version
打印到stderr,要将它传输到
grep
中,我们需要在命令之后使用
2>&1
转换为标准输出。请尝试
java-version 2>&1 | awk'/version/{gsub(/“/,”,“,$NF);打印$NF}“
由于您的grep上不支持
-P
标志,因此请使用awk命令以下答案是否以任何方式帮助您解决问题?如果有,请您接受答案,如果没有帮助,请提供更多信息以供参考。
install_java(){
  echo "Installing Java 8 & 11 and setting JAVA_HOME to 8"   
  brew tap adoptopenjdk/openjdk
  brew cask install adoptopenjdk8
  brew cask install adoptopenjdk11
  java_ver=$(java -version 2>&1|awk '/version/{gsub(/"/,"",$NF);print $NF}')
  echo "export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk${java_ver}.jdk/Contents/Home"
}