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を再起動し、動作しました!
この質問に対する答えは、JavaのSystem.getenv()
より一般的です。
環境変数は、プロセスが起動されたときにのみ、プロセスツリーを下に移動します。 Eclipseはシェルの子プロセスです。したがって、シェルで定義されたすべての環境変数を継承しましたEclipseを起動したとき。
シェルで環境変数を定義した可能性がありますafter Eclipseを起動しました。したがって、Eclipseと子Javaが作成したプロセスは、新しい環境変数を「認識」しません。
この動作のため、実際にはここでの解決策はEclipseを終了し、シェルから再度起動することです。シェルでは、環境変数既に定義済みです。別のオプションは、プロジェクトの実行構成に移動し、そこで環境変数を定義することです。
追伸.
明らかに、コンピューターを再起動すると、変数を定義したシェルプロセスがなくなるため、シェルで定義した環境変数は保存されません。
bashを使用する場合、環境変数設定コマンドをファイルに追加する~/.bashrc
は、bashプロセスが開始されるたびに実行され、永続的な環境変数の動作をシミュレートできます。
永続的な環境変数を定義する追加の方法があります。詳しくは here をご覧ください。