2015-04-21 7 views
23

Ich versuche System.getenv(), um den Wert einer Umgebungsvariablen zu erhalten, die ich über mein Terminal (Mac) eingestellt habe, setze ich auch die Variable in meiner .bash_profile Datei und neu geladen. Nachdem ich dies getan hatte, echote ich den Wert und der korrekte Wert wurde auf das Terminal gedruckt. Beim Versuch, den Wert der Variablen abzurufen (ich sicher habe ich in meinen beiden .bash_profile-Datei den richtigen Namen verwenden und bei der Verwendung von System.getenv().System.getenv() gibt null zurück, wenn die Umgebungsvariable existiert

Im folgenden Code habe ich den Namen der Variablen mit VAR_NAME ersetzt:

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

In meinem Bash_profile.

export VAR_NAME="foo" 

"null" gedruckt wird, wenn ich den Wert von varValue auszudrucken

Was könnte die Ursache dafür sein?

Bearbeiten: Ich folgte der Top-Antwort here, neu gestartet Eclipse und es hat funktioniert!

+1

Wie läuft die Anwendung? Ist 'printenv | grep VAR_NAME' in deiner Shell zeige den Wert? –

+0

Es tut, und ich führe es durch Eclipse @EtanReisner – SamTebbs33

+1

Sie führen Ihren Shell-Befehl in Eclipse? – RealSkeptic

Antwort

44

Die Antwort auf diese Frage ist allgemeiner als nur System.getenv() in Java.

Die Umgebungsvariablen werden nur in der Prozessstruktur und nur beim Starten eines Prozesses verwendet. Eclipse ist ein Kindprozess Ihrer Shell - daher hat es alle Umgebungsvariablen geerbt, die in Ihrer Shell beim Start von Eclipse definiert wurden.

Wahrscheinlich haben Sie die Umgebungsvariable auf Ihrer Shell definiert, nachdem Sie Eclipse gestartet hatten, daher haben Eclipse und die untergeordneten Java-Prozesse, die es erstellt hat, nie über Ihre neue Umgebungsvariable Bescheid gewusst.

Aufgrund dieses Verhaltens besteht die Lösung darin, Eclipse zu beenden und von der Shell aus erneut zu starten, in der die Umgebungsvariable bereits definiert ist. Eine andere Möglichkeit ist, zur Run-Konfiguration des Projekts zu gehen und dort die Umgebungsvariable zu definieren.

+1

Die Umgebungsvariable wurde tatsächlich vor dem Start von Eclipse definiert. Ich habe meinen Computer sogar neu gestartet, nachdem ich die Variable zurückdefiniert hatte, als sie nicht wie beabsichtigt funktionierte. Die Antwort in dem Link, den ich in meinem OP gab, behob das Problem. – SamTebbs33

+0

Es hat natürlich nicht funktioniert, nachdem Sie den Computer neu gestartet, da diese Variablen pro Prozess definiert sind. Sie bleiben nicht für immer definiert ... – SomethingSomething

+0

Sie können sich den Umgebungsvariablen-Mechanismus als eine Hash-Tabelle vorstellen, die in einem Prozess existiert. Sie können es jederzeit aktualisieren, indem Sie Variablen hinzufügen/entfernen/ändern. Wenn Sie den Prozess schließen (z. B. indem Sie die Shell verlassen oder Ihren Computer neu starten), stirbt diese Hashtabelle mit dem Prozess. Eine weitere wichtige Sache, die ich bereits in der Antwort geschrieben habe, ist, dass jeder Prozess diese Hash-Tabelle zu dem Erstellungszeitpunkt von dem Prozess, der sie erstellt hat, erbt (tatsächlich kopiert). Nach der Erstellung haben sie verschiedene Hash-Tabellen, keiner von ihnen kennt die anderen – SomethingSomething

Verwandte Themen