Sostituzione variabile dinamica in PERCORSO


2

Voglio eseguire diverse versioni di Java sulla stessa macchina (Linux Mint 17) con l'impostazione predefinita su Java 7. Quindi inserisco questo /etc/environment:

JAVA_HOME="/tools/java/java7"
JAVA7_HOME="/tools/java/java7"
JAVA8_HOME="/tools/java/java8"

E in /etc/profile:

export PATH="${JAVA_HOME}/bin:...:${PATH}"

Mi aspetto java -version essere 8 se JAVA_HOME uguale a /tools/java/java8 e 7 se è impostato per puntare a Java 7.

Quindi, corro:

┌[madhead@madhead-mint:~/Projects/thymeleaf]
└─$ export JAVA_HOME=/tools/java/java8 && java -version
java version "1.7.0_60"
Java(TM) SE Runtime Environment (build 1.7.0_60-b19)
Java HotSpot(TM) Server VM (build 24.60-b09, mixed mode)

E

┌[madhead@madhead-mint:~/Projects/thymeleaf]
└─! $ export JAVA_HOME=/tools/java/java7 && java -version
Java(TM) SE Runtime Environment (build 1.7.0_60-b19)
Java HotSpot(TM) Server VM (build 24.60-b09, mixed mode)

Non importa cosa sia JAVA_HOME $PATH Somiglia a questo:

┌[madhead@madhead-mint:~/Projects/thymeleaf]
└─$ echo $PATH
/home/madhead/bin:/usr/local/bin:/tools/java/java7/bin:...:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games

E export JAVA_HOME=/tools/java/java8 && which java uscite /tools/java/java7/bin/java pure.

Quindi, sembra che la vera sostituzione venga visualizzata quando effettuo l'accesso. È possibile modificare questo comportamento? Sarebbe bello se riuscissi a risolverlo con variabili env e non con symlink.

Risposte:


4

Hai ragione sul fatto che la sostituzione avviene quando il PERCORSO è definito. È semplice aggirarlo. Definisci a bash / zsh funzione:

javaswitch() { [[ "$1" =~ ^[0-9]$ ]] && export  PATH=${PATH/java[0-9]/java$1}; }

Ora, ogni volta che vuoi cambiare le versioni di Java, esegui:

javaswitch 7

O:

javaswitch 8

Per rendere la definizione di javaswitch permanente, mettilo nel tuo ~/.bashrc file.

Come funziona

  • [[ "$1" =~ ^[0-9]$ ]]

    Per proteggersi dagli errori di battitura, questo test fa in modo che l'argomento sia un numero. In caso contrario, non viene apportata alcuna modifica.

    Se sei sicuro che userai solo le versioni 7 o 8, allora usa invece:

    [[ "$1" =~ ^[7-8]$ ]]
    
  • export PATH=${PATH/java[0-9]/java$1}

    Questo utilizza la sostituzione del modello per aggiornare PATH al nuovo numero di versione.


Bella, bella soluzione! Grazie!
madhead
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.