2015-04-21 11 views
23

Sto provando a System.getenv() per ottenere il valore di una variabile di ambiente che ho impostato tramite il mio terminale (Mac), ho anche impostato la variabile nel mio file .bash_profile e ricaricato. Dopo averlo fatto, ho fatto eco al valore e il valore corretto è stato stampato sul terminale. Quando si cerca di recuperare il valore della variabile (ho fatto in modo che stavo usando il nome corretto sia nel mio file .bash_profile e quando si usa System.getenv().System.getenv() restituisce null quando esiste la variabile di ambiente

Nel codice qui sotto, ho sostituito il nome della variabile con nome_var:

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

Nel mio .bash_profile:.

export VAR_NAME="foo" 

"null" viene stampato quando si stampa il valore di varValue

012.

Quale potrebbe essere la causa di questo?

Modifica: Ho seguito la risposta principale here, riavviato Eclipse e ha funzionato!

+1

Come si esegue l'applicazione? 'Printenv | grep VAR_NAME' nella tua shell mostra il valore? –

+0

Lo fa e lo sto eseguendo tramite Eclipse @EtanReisner – SamTebbs33

+1

Stai eseguendo il comando shell in Eclipse? – RealSkeptic

risposta

44

La risposta a questa domanda è più generale di solo System.getenv() in Java.

Le variabili di ambiente si spostano solo nella struttura del processo e solo all'avvio di un processo. Eclipse è un processo secondario della shell, quindi ha ereditato tutte le variabili di ambiente definite nella shell all'avvio di Eclipse.

Probabilmente hai definito la variabile di ambiente sulla tua shell dopo che avevi lanciato Eclipse, quindi, Eclipse e i processi figlio Java creati non erano mai stati informati sulla tua nuova variabile di ambiente.

A causa di questo comportamento, in realtà la soluzione qui è uscire da Eclipse e avviarlo nuovamente dalla shell, in cui la variabile di ambiente è già definita. Un'altra opzione è quella di andare alla configurazione di esecuzione del progetto e definire lì la variabile di ambiente.

+1

La variabile di ambiente è stata effettivamente definita prima dell'avvio di Eclipse, ho persino riavviato il computer dopo aver definito la variabile indietro quando non funzionava come previsto. La risposta fornita nel link che ho fornito nel mio PO ha risolto il problema. – SamTebbs33

+0

Ovviamente non ha funzionato dopo il riavvio del computer, poiché queste variabili sono definite per processo. Non rimangono definiti per sempre ... – SomethingSomething

+0

È possibile immaginare il meccanismo delle variabili di ambiente come tabella hash esistente lungo un processo. Puoi sempre aggiornarlo aggiungendo/rimuovendo/modificando le variabili. Quando si chiude il processo (ad esempio uscendo dalla shell o riavviando il computer), questa tabella hash muore con il processo. Un'altra cosa importante che ho già scritto nella risposta è che ogni processo eredita (in realtà copia) questa tabella hash dal processo che l'ha creata, al momento della creazione. Dopo la creazione, hanno tabelle hash diverse, nessuna delle due conosce l'altra – SomethingSomething

Problemi correlati