echo $MY_FILE
版画"/path/to/some/file"
System.out.println(System.getenv("MY_FILE"));
版画null
JAVA_HOME
さらに、 (Eclipseから)印刷すると、私もnull
. 甲羅からこだまする/Library/Java/Home
これが関連しているかどうかはわかりませんが、私が実行しているシステムはmac
ヒントはありますか?
echo $MY_FILE
版画"/path/to/some/file"
System.out.println(System.getenv("MY_FILE"));
版画null
JAVA_HOME
さらに、 (Eclipseから)印刷すると、私もnull
. 甲羅からこだまする/Library/Java/Home
これが関連しているかどうかはわかりませんが、私が実行しているシステムはmac
ヒントはありますか?
環境変数にアクセスする方法は、まさにあなたが認識している方法です。このコードは問題なく動作し、受け取った結果から、質問している JVM の実行環境が正確にわかります。そう、
環境変数は「システム変数」ではありません。システムスコープがありません。新しい端末でそれらを変更しても、端末などを起動するプロセスでは変更されません。
それらは OS プロセスによって保持され、そのプロセスの子にコピーされます。そのため、子が親の環境変数を変更しても、子は親の環境変数を変更しません。
Eclipse を起動し、.profile などで環境変数を設定した後、Eclipse から起動した JVM にこれらの設定が反映されない場合、Eclipse は JVM を起動する前に .profile を読み取るシェルを起動しないことがわかります。.profile を読み取らないようにシェルを呼び出したり、別のシェルをまったく呼び出したり、シェルを使用せずに JVM を直接起動したりできます。
これらの変数を設定した後に Eclipse を起動し、同じ動作が見られる場合は、Eclipse を起動するプロセスと同じことを学習したことになります。
これらの変数を設定した後に再起動し、同じ動作が見られる場合は、ウィンドウ環境について同じことを学習したことになります。
Java で環境変数の値を尋ねても、実際には正しく行っているため、「間違っている」ことを知ることはできません。
で環境を探索できますSystem.getenv()
環境変数をエクスポートしていない可能性があります。ほとんどのシェルでは、シェルで宣言された変数は、次のように明示的に行わない限り、サブプロセスの環境にエクスポートされません。
export MY_HOME=/somewhere/over/the/rainbow
または、プログラムを呼び出すとき:
MY_HOME=/somewhere/over/the/rainbow java com.example.MyApplication
また、環境はグローバルではないため、環境に加えた変更はそのプロセスとそのサブプロセスにのみ影響することに注意してください。システム上のすべてのプロセスの環境に影響を与えたい場合は、これを特別に構成する必要があります。ほとんどの場合、シェルでのエクスポートが必要です。
最初に、あなたが作成したものではないシステム変数にアクセスしてみてください
System.out.println(System.getenv("JAVA_HOME"));
上記が機能する場合は、VM を再起動してみてください
環境変数はある種のキャッシュにあるようで、再起動はそれを更新する 1 つの方法です。