いくつかの環境変数の割り当て (例: ) を含む bash ファイル (bash_file と呼びましょう) と、TOOLS_DIR="/opt/tools"
別のファイル (例: source /opt/other_file
) をソースし、other_file からソースされた環境変数から環境変数を構築する bash コード (例: NEW_ENV_VAR=$FILEPATH/$FILENAME
FILEPATH FILENAME は other_file に割り当てられます)。
これらの環境変数の可視性を必要とする Java アプリケーションがありSystem.getenv()
ますが、Java のシェルで bash ファイルがまだソース化されていないため、標準を使用してもこれらの環境変数が取得されません。Java の を使用すると、bash のコマンドが使用されRuntime.exec("source bash_file")
ていても、環境変数は Java の子シェルにのみ存在します。export
純粋な bash を使用している場合は、単に mysource bash_file
を実行するだけで、bash_file で割り当てられたすべての環境変数にアクセスできますが、Java ではそれほど単純ではありません。
私はすでにいくつかのオプションを考えましたが、どれも特にエレガントに見えません:
source bash_file
コマンドと同じプロセスで、現在env
のプロファイルを .bashprofile に追加して、System.getenv() などの将来のすべてのランタイム exec 呼び出しで使用できるようにします。問題:実行時に getenv が bashprofile に追加された環境変数を取得するかどうかは 100% 確信が持てません。また、これらの変数をすべてグローバルにエクスポートするのはまったく適切ではありません。
再び と同じプロセスで
source_bash_file
、currentenv
をテキスト ファイルに保存し、Java で手動で解析します。問題:これで作業は完了しますが、 によって返される Map ほど素晴らしくエレガントではありません
System.getenv()
。パーサーを Java で作成するのもかなり難しいようです。Java の bash 環境がインスタンス化されている場所 (おそらく java.System.lang) を把握し、Java の環境を初期化する
source bash_file
前に実行するために変更して、変数が Java アプリによって継承されるようにします。問題:これは私のすべてのオプションの中で最も厄介なように思えます。Java のシェル環境の初期化をどこから探し始めればよいかわかりません。
Java からbash のようなsource
操作を実行する方法はありますか、またはその機能を取得するための最も簡単な実装は何ですか? 私はまた、可能な行動方針の評価において多くの不確実性を表明しており、誰かがそれらの不確実性について私に記入していただければ幸いです.
ありがとう!