Java_HOME
ファイルに~/.bashrc
を設定しています。
ここで、Java 5を必要とするアプリを起動できるように、現在の端末だけでJava_HOME
を変更するスクリプトを作成する必要があります。
このタスクを実行するためにこのスクリプトを作成しましたが、終了後、Java_HOMEが更新されていないことがわかります
export Java_HOME=/usr/lib/jvm/Java-5-Oracle/
export PATH=$PATH:$Java_HOME
結果はこちら
$ ./javaHome5.sh
$ echo $Java_HOME
/usr/lib/jvm/Java-6-Oracle/
これが適用されない理由は、スクリプトがそれ自身のターミナルで実行されているためだと思います。そのため、スクリプトが終了しても、現在のターミナルは影響を受けません。
現在、私がこれについて見つけた唯一の方法は:
~/.bashrc
を編集し、Java_HOME varを変更しますsource ~/.bashrc
を実行して、現在の端末に変更を適用します。 source
コマンドは現在のウィンドウで実行する必要があるため、これもスクリプトに適用できません。言うまでもなく、この変更はすべての新しいターミナルウィンドウに適用されるため、実際には2回行う必要があります。1つはアプリを起動する前、もう1つは環境変数をデフォルトに戻すためだけです。それは本当に便利ではありません。
スクリプトを使用してこの変数を変更する方法はありますか?
それは不可能。正しく確認したように、スクリプトは独自のシェルで実行されています。このシェルは、フォークされたときに親シェルの環境のコピーを取得します。親シェルの環境にアクセスする方法はありません。そうしないと、スクリプトがあらゆる種類の予期しない副作用を引き起こす可能性があるためです。 ;)
現在のシェルの変数を変更するには、スクリプトファイルを(独立したプロセスとして実行するのではなく)いつでもソースできるため、分岐したスクリプトではなく、現在のシェルによってスクリプトが実行されます。スクリプトの名前がmyscript.sh
の場合、source myscript.sh
ではなく./myscript.sh
として呼び出します。