J'ai plusieurs projets qui me demandent de changer de version de Java/Grails/Maven. J'essaie de gérer cela avec des scripts qui apporteraient les modifications. Par exemple:
#!/bin/sh
export Java_HOME=/cygdrive/c/dev/Java/jdk1.5.0_22
export PATH=$Java_HOME/bin:$PATH
export GRAILS_HOME=/cygdrive/c/dev/grails-1.0.3
export PATH=$GRAILS_HOME/bin:$PATH
export MAVEN_HOME=/cygdrive/c/dev/Apache-maven-2.0.11
export PATH=$MAVEN_HOME/bin:$PATH
which Java
which grails
which mvn
Lorsque cela s'exécute, il modifie avec succès le CHEMIN dans le contexte du script, mais le script se termine et aucune modification n'a été effectuée.
Comment puis-je exécuter un script de manière à modifier le CHEMIN dans le shell dans lequel je travaille actuellement?
J'utilise Cygwin.
Vous devez utiliser source
ou eval
ou pour générer un nouveau Shell.
Lorsque vous exécutez un script Shell, un nouveau enfant Shell est généré. Ce enfant Shell exécutera les commandes de script. L'environnement du père Shell restera inchangé par tout ce qui se passe dans le enfant Shell .
Il existe de nombreuses techniques différentes pour gérer cette situation:
Préparez un fichier sourcefile contenant une liste de commandes à source
dans le shell actuel:
export Java_HOME=/cygdrive/c/dev/Java/jdk1.5.0_22
export PATH=$Java_HOME/bin:$PATH
puis la source
source sourcefile
notez qu'il n'y a pas besoin d'un sha-bang au début du sourcefile, mais cela fonctionnera avec.
Préparez un script evalfile.sh qui imprime la commande pour définir l'environnement:
#!/bin/sh
echo "export Java_HOME=/cygdrive/c/dev/Java/jdk1.5.0_22"
echo "export PATH=$Java_HOME/bin:$PATH"
puis eval
uer:
eval `evalfile.sh`
Configurez et exécutez un nouveau Shell:
#!/bin/sh
export Java_HOME=/cygdrive/c/dev/Java/jdk1.5.0_22
export PATH=$Java_HOME/bin:$PATH
exec /bin/bash
notez que lorsque vous tapez exit
dans ce Shell, vous reviendrez au père .
Mettez un alias dans votre ~/.bashrc
:
alias prepare_environ='export Java_HOME=/cygdrive/c/dev/Java/jdk1.5.0_22; export PATH=$Java_HOME/bin:$PATH;'
et appelez-le si nécessaire:
prepare_environ
Vous pouvez le faire en utilisant la fonction intégrée source:
. script_name
Certains shells fournissent un alias nommé source:
source script_name