4

Linuxで環境変数を設定しようとしています。私はここの指示に従いました: Ubuntu で $JAVA_HOME を簡単に変更できるようにする

source /etc/environmentLinuxが変数を検出することを確認するために使用および使用しているにもかかわらずecho MY_VAR、私のJavaアプリはそれを検出しません。変数は戻り続けますnull

public static void main(String[] args) throws IOException {
    System.out.print(System.getenv("MY_VAR"));

Javaアプリケーションを実行していますsudo java -jar /path/to/my.jar

更新:私の間違いです。正しいコマンドが含まれていませんでした。私は実際にsudoingしています。

4

3 に答える 3

3

変数をエクスポートする必要があります

export MY_VAR=stackoverflow
java -jar /path/to/my.jar

次に、値を印刷できます

System.out.print(System.getenv("MY_VAR"));

edit : 短いサンプル スクリプト (必要に応じてパスを修正)

#!/bin/sh

MY_VAR="foobaz not exported"
echo "MY_VAR: ${MY_VAR}"
java -jar my.jar

export MY_VAR="foobaz exported"
echo "MY_VAR: ${MY_VAR}"
java -jar my.jar
于 2013-10-09T12:14:37.550 に答える
1

リンクされた回答から..

変数を更新するすべてのシェルで「source /etc/environment」を実行します。

電話java -jar /path/to/my.jarすると、新しいシェルが開始されると思います。つまり、./etc/environment の内容は、Java コードが実行されているシェルでは利用できません。

試す

export MY_ENVIRONMENT="HELLO"
java -jar /path/to/my.jar

それはもっと良く見えますか?

そして、あなたがあなたのコマンドを sudo しているなら...

sudo -c export MY_ENVIRONMENT="HELLO";java -jar /path/to/my.jar

またはそれらの線に沿った何か

于 2013-10-09T12:12:21.850 に答える
1

問題は、sudo が独自の環境変数セットで実行されることです。変数をルート環境に追加するか (場合によっては気難しい)、現在の環境の変数を明示的に維持するように sudo に指示することができます。

後者を行う方法は次のとおりです。

  1. bash プロファイルを開く vim ~/.bash_profile
  2. 環境変数をファイルに追加しますexport MY_VAR=80
  3. sudoers 設定ファイルを開きますsudo visudo
  4. 次の行をファイルに正確に追加しますDefaults env_keep +="MY_VAR"

実行するsudo java -jar /path/to/my.jarと、MY_VAR が 80 に設定された状態で、期待どおりに動作するはずです。

于 2015-01-05T16:10:31.307 に答える