web-dev-qa-db-ja.com

環境変数が存在する場合、System.getenv()はnullを返します

System.getenv()を使用して、端末(Mac)で設定した環境変数の値を取得しようとしています。また、.bash_profileファイルに変数を設定して再ロードしました。そうしたら、値をエコーし​​、正しい値が端末に出力されました。変数の値を取得しようとするとき(.bash_profileファイルとSystem.getenv()を使用するときに正しい名前を使用していることを確認しました。

以下のコードでは、変数の名前をVAR_NAMEに置き換えています。

String varValue = System.getenv("VAR_NAME");
System.out.println("Value: " + varValue);

私の.bash_profileで:

export VAR_NAME="foo"

varValueの値を出力すると、「null」が出力されます。

この原因は何でしょうか?

編集:一番上の答えに従ってください ここ 、Eclipseを再起動し、動作しました!

43
SamTebbs33

この質問に対する答えは、JavaのSystem.getenv()より一般的です。

環境変数は、プロセスが起動されたときにのみ、プロセスツリーを下に移動します。 Eclipseはシェルの子プロセスです。したがって、シェルで定義されたすべての環境変数を継承しましたEclipseを起動したとき

シェルで環境変数を定義した可能性がありますafter Eclipseを起動しました。したがって、Eclipseと子Javaが作成したプロセスは、新しい環境変数を「認識」しません。

この動作のため、実際にはここでの解決策はEclipseを終了し、シェルから再度起動することです。シェルでは、環境変数既に定義済みです。別のオプションは、プロジェクトの実行構成に移動し、そこで環境変数を定義することです。

追伸.

  1. 明らかに、コンピューターを再起動すると、変数を定義したシェルプロセスがなくなるため、シェルで定義した環境変数は保存されません。

  2. bashを使用する場合、環境変数設定コマンドをファイルに追加する~/.bashrcは、bashプロセスが開始されるたびに実行され、永続的な環境変数の動作をシミュレートできます。

  3. 永続的な環境変数を定義する追加の方法があります。詳しくは here をご覧ください。

72