Java/Grails/Mavenのバージョンを変更する必要があるプロジェクトがいくつかあります。変更を加えるスクリプトでこれを処理しようとしています。例えば:
#!/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
これが実行されると、スクリプトのコンテキスト内でPATHが正常に変更されますが、スクリプトは終了し、変更は行われていません。
現在作業しているシェルのPATHを変更する方法でスクリプトを実行するにはどうすればよいですか?
私はCygwinを使用しています。
source
またはeval
を使用するか、新しいシェルを生成する必要があります。
シェルスクリプトを実行すると、新しいchildシェルが生成されます。このchildシェルはスクリプトコマンドを実行します。 fatherシェル環境は、childシェルで何が起こっても影響を受けません。
この状況を管理するには、さまざまな手法が数多くあります。
ファイルを準備するsourcefile現在のシェルでsource
へのコマンドのリストを含む:
export Java_HOME=/cygdrive/c/dev/Java/jdk1.5.0_22
export PATH=$Java_HOME/bin:$PATH
そしてそれを調達する
source sourcefile
sourcefileの最初にシャバンが必要ないことに注意してください。ただし、これで動作します。
環境を設定するコマンドを出力するスクリプトevalfile.shを準備します。
#!/bin/sh
echo "export Java_HOME=/cygdrive/c/dev/Java/jdk1.5.0_22"
echo "export PATH=$Java_HOME/bin:$PATH"
それからeval
uate:
eval `evalfile.sh`
新しいシェルを構成して実行します。
#!/bin/sh
export Java_HOME=/cygdrive/c/dev/Java/jdk1.5.0_22
export PATH=$Java_HOME/bin:$PATH
exec /bin/bash
このシェルでexit
を入力すると、fatherに戻ることに注意してください。
エイリアスを~/.bashrc
に入れます:
alias prepare_environ='export Java_HOME=/cygdrive/c/dev/Java/jdk1.5.0_22; export PATH=$Java_HOME/bin:$PATH;'
必要なときに呼び出します:
prepare_environ
sourceビルトインを使用してそれを行うことができます:
. script_name
一部のシェルはsourceという名前のエイリアスを提供します:
source script_name