Обновление JAVA_HOME с использованием скрипта bash - PullRequest
0 голосов
/ 28 мая 2019

Я новичок в 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?

1 Ответ

1 голос
/ 28 мая 2019

Здесь java-версия анализируется с использованием java -version|grep -oP 'java version\s"\K[^"]+' и сохраняется в переменной java_ver, а затем подставляется в присваивании JAVA_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 -version 2>&1|grep -oP 'version\s"\K[^"]+':

grep -o: при этом будет извлечено только соответствующее содержимое, а не соответствующая строка, -P флаг разрешить PCRE, теперь регулярное выражение является версией java, после которой ставится пробел (\s), затем следует " до следующего " видно. Кроме того, игнорируйте что-либо слева от \K.

Если у вас не включен -P на вашем grep, вы можете использовать команду 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"
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...