2

を使用して Linux シェルで環境変数を定義していますTestEnviron=varproperty。ここで、環境変数を読み取り、それをコンソール出力に書き込み、その変数をプロパティ ファイルに書き込む小さなプログラムを作成したいと考えています。ただし、このコードで試してみると、次のようにgetenv()返されnullます。

package javaenvironmentvariable;

import java.io.File;
import java.io.FileOutputStream;
import java.util.Properties;

public class JavaEnvironmentVariable {
    public static void main(String[] args) {
        try {
            String variable = System.getenv("TestEnviron");
            System.out.println("TestEnviron: " + variable);
            variable = "TestEnviron=" + variable;

            Properties properties = new Properties();

            File file = new File("Variables.properties");
            FileOutputStream fileout = new FileOutputStream(file);
            properties.store(fileout, variable);
            fileout.close();
        } catch (Exception e) {
        }
    }
}

シェルでこれを使用して、jar を呼び出します。sudo java -jar JavaEnvironmentVariable.jar

4

3 に答える 3

4

sudo -EANDを使用exportして環境変数を保持する必要があります。

$ export TestEnviron=varproperty
$ sudo -E java -jar JavaEnvironmentVariable.jar

ただし、より安全にするために、この投稿で説明されているように、変数を保持するように sudo を構成する必要があります。SUDO を使用するときに環境変数を保持する方法:

sudo visudo

次の行を追加します。

Defaults env_keep += "TestEnviron"
于 2015-09-13T10:07:17.990 に答える
2

シェルは、変数を自動的に環境に入れません。export ENVVAR=VALUEシェルを使用して、またはset -x ENVVAR VALUEシェルに応じて変数を明示的にエクスポートする必要があります。

于 2015-09-13T09:55:30.367 に答える
0

あるシェルで環境変数を設定し、別のシェルでプログラムを実行していると思います。両方を同じシェルで実行してみてください。プログラムチェックを実行する前に、シェルで環境変数を出力します。

于 2015-09-13T09:55:31.307 に答える