2015-04-21 8 views
23

मैं अपने टर्मिनल (मैक) के माध्यम से सेट किए गए पर्यावरण चर के मान को प्राप्त करने के लिए System.getenv() पर प्रयास कर रहा हूं, तो मैंने अपनी .bash_profile फ़ाइल में चर सेट भी किया है और पुनः लोड। ऐसा करने के बाद, मैंने मूल्य को प्रतिबिंबित किया और सही मान टर्मिनल पर मुद्रित किया गया था। जब चर का मान प्राप्त करने का प्रयास (मुझे यकीन है कि मैं दोनों मेरे .bash_profile फ़ाइल में सही नाम का उपयोग किया गया था और जब System.getenv() का उपयोग किया।System.getenv() पर्यावरण परिवर्तनीय मौजूद है जब

नीचे कोड में, मैं VAR_NAME साथ वैरिएबल का नाम बदल दिया है:

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

मेरी .bash_profile में:।

export VAR_NAME="foo" 

"अशक्त" छपा है जब मैं varValue का मूल्य प्रिंट आउट

012,

इसका कारण क्या हो सकता है?

संपादित करें: मैंने शीर्ष उत्तर here का पालन किया, ग्रहण को फिर से शुरू किया और यह काम किया!

+1

आप एप्लिकेशन कैसे चला रहे हैं? क्या 'printenv | आपके खोल में grep VAR_NAME' मूल्य दिखाता है? –

+0

यह करता है, और मैं इसे ग्रहण @EtanReisner – SamTebbs33

+1

के माध्यम से चला रहा हूं आप ग्रहण में अपना खोल कमांड चला रहे हैं? – RealSkeptic

उत्तर

44

इस प्रश्न का उत्तर जावा में केवल System.getenv() से अधिक सामान्य है।

पर्यावरण चर केवल प्रक्रिया पेड़ के नीचे जाते हैं और केवल एक प्रक्रिया शुरू होने पर ही। ग्रहण आपके खोल की एक बाल प्रक्रिया है - इसलिए, जब आपने ग्रहण लॉन्च किया था तो आपके शेल पर परिभाषित सभी पर्यावरण चर को विरासत में मिला था।

के बाद आपने संभवतः अपने खोल पर पर्यावरण चर को परिभाषित किया है, आपने एक्लिप्स, इसलिए, ग्रहण और बाल जावा प्रक्रियाएं लॉन्च की हैं जो इसे आपके नए पर्यावरण चर के बारे में कभी नहीं पता था।

इस व्यवहार के कारण, वास्तव में समाधान यहां ग्रहण से बाहर निकलना है और इसे अपने खोल से फिर से लॉन्च करना है, जिसमें पर्यावरण परिवर्तनीय पहले से ही परिभाषित किया गया है। एक और विकल्प परियोजना की रन कॉन्फ़िगरेशन पर जाना है और पर्यावरण चर को परिभाषित करना है।

+1

ग्रहण को लॉन्च करने से पहले पर्यावरण परिवर्तक को वास्तव में परिभाषित किया गया था, जब भी मैं इरादे के अनुसार काम नहीं कर रहा था, तब भी वैरिएबल बैक को परिभाषित करने के बाद भी मैंने अपने कंप्यूटर को पुनरारंभ किया। मेरे ओपी में दिए गए लिंक में दिए गए उत्तर ने इस मुद्दे को हल किया। – SamTebbs33

+0

यह निश्चित रूप से कंप्यूटर को पुनरारंभ करने के बाद काम नहीं करता है, क्योंकि इन चरों को प्रति प्रक्रिया परिभाषित किया जाता है। वे हमेशा के लिए परिभाषित नहीं रहते हैं ... – SomethingSomething

+0

आप एक पर्यावरण के साथ मौजूद हैश-टेबल के रूप में पर्यावरण चर तंत्र की कल्पना कर सकते हैं। आप इसे चर जोड़ने/हटाने/बदलने के द्वारा हमेशा अद्यतन कर सकते हैं। जब आप प्रक्रिया को बंद करते हैं (उदा। खोल को छोड़कर या अपने कंप्यूटर को पुनरारंभ करके), इस हैश तालिका प्रक्रिया के साथ मर जाती है। एक और महत्वपूर्ण बात जो मैंने पहले से ही उत्तर में लिखी है वह यह है कि निर्माण प्रक्रिया में, जिस प्रक्रिया को बनाया गया है, इस प्रक्रिया में इस हैश तालिका को वास्तव में प्रतिलिपि बनाई गई है (वास्तव में प्रतिलिपि)। सृजन के बाद, उनके पास अलग हैश टेबल हैं, उनमें से कोई भी अन्य – SomethingSomething

संबंधित मुद्दे