Скрипт оболочки Bash: как установить переменную среды JAVA_HOME - PullRequest
3 голосов
/ 25 марта 2011

Используя openSUSE, я скачал rpms Oracle для jdk1.6.0_24 и хочу установить для переменной среды домашнего java значение /usr/java/jdk1.6.0_24, но система / etc / alternatives не может автоматически определить этоJDK.Альтернативы обновления, или что-то еще, что просто не находит jdk.

Итак, я хочу обнаружить дом JAVA вручную в сценарии BASH.

Если я запускаю эту команду: sudo find / usr -name 'jdk1.6 *', я получаю такой результат:

/usr/java/jdk1.6.0_24

Как конвейер приводит к переменной среды?Я хочу сделать что-то вроде

#!/bin/bash
read in JAVA_HOME var from a file
if file doesnt exist
  sudo find /usr -name 'jdk1.6*' 
  prompt user for which jdk is correct
  set that choice to a variable 
  add the JDK to alternatives if it is missing
  save variable to a file and dont prompt next time
  set the alternatives java choice
fi
echo $JAVA_HOME

Ответы [ 4 ]

4 голосов
/ 25 марта 2011

что-то вроде

#!/bin/bash
function validate_java_home {
    if [ -z ${JAVA_HOME} ]
    then
        # do something if the file doesn't provide ${JAVA_HOME}
    else 
        if [ ! -e ${JAVA_HOME} ]
        then
            # do something if the file provides a non existent ${JAVA_HOME}
        fi
    fi
}

if [ ! -e ${YOUR_FILE_NAME_CONTAINING_JAVA_HOME} ]
then
     JAVA_HOME_CANDIDATES=$(find /usr -name 'jdk1.6*')
     echo "Found the following candidates for JAVA_HOME, reply with the one you want then press return"
     echo ""
     echo $JAVA_HOME_CANDIDATES
     read USER_SUBMITTED_JAVA_HOME
     echo "You chose $USER_SUBMITTED_JAVA_HOME"
     JAVA_HOME=${USER_SUBMITTED_JAVA_HOME}
else
    . ${YOUR_FILE_NAME_CONTAINING_JAVA_HOME}
fi 
validate_java_home
export ${JAVA_HOME}

Я не проверял это, но, надеюсь, вы понимаете суть (и я бы сказал, что использование select согласно ответу Гленна Джекмана более лаконично / дружелюбно, я не знал, что это было, поэтому я рад, что прочитал этот вопрос! )

4 голосов
/ 25 марта 2011
oldIFS="$IFS"
IFS=$'\n'
choices=( $(find /usr/java -type d -maxdepth 1 -print) )
select choice in "${choices[@]}"; do
  [[ "$choice" ]] && break
done
IFS="$oldIFS"
export JAVA_HOME="$choice"
2 голосов
/ 25 марта 2011

Не сидеть за терминалом Linux, но это должно помочь вам:

...
jdkpath=`sudo find /usr -name 'jdk1.6*'`
export JAVA_HOME=$jdkpath
...

Отрегулируйте по необходимости.

0 голосов
/ 26 марта 2011

Исходя из ответа Мэтта, вот сценарий, который я использую:

#!/bin/bash
# JAVA_HOME script for RPM based java installations
# http://www.oracle.com/technetwork/java/javase/install-linux-64-rpm-138254.html
# examine and understand /etc/alternatives before you run this

cd $SITE_HOME

function set_java_home {
  if [ -z $JAVA_HOME ]; then
      echo "Using default value for JAVA_HOME: /usr/java/default"
      JAVA_HOME=/usr/java/default
  fi
  export -p JAVA_HOME
  echo $JAVA_HOME > java.home.config
  echo "JAVA_HOME variable set to $JAVA_HOME ."
}

if [ -f java.home.config ]; then
  JAVA_HOME=$(<java.home.config)
else
  JAVA_HOME_CANDIDATES=$(find /usr -type d -name 'jdk1.6*')
  echo "Found the following candidates for JAVA_HOME. Pick one: "
  echo "---"
  echo $JAVA_HOME_CANDIDATES
  echo "---"
  read USER_SUBMITTED_JAVA_HOME
  echo "You chose $USER_SUBMITTED_JAVA_HOME ."
  JAVA_HOME=${USER_SUBMITTED_JAVA_HOME}
fi
# Set the variable
set_java_home
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...