2011-08-19 11 views
62

लिनक्स (Ubuntu 11.04) पार्टी में, यह संभव है अस्थायी रूप से एक वातावरण चर है कि केवल स्क्रिप्ट की अवधि के लिए सामान्य चर से अलग होगा स्थापित करने के लिए? उदाहरण के लिए, एक शेल स्क्रिप्ट में, एक ऐप बनाना जो होम पोर्टेबल को अस्थायी रूप से वर्तमान कार्य निर्देशिका में किसी फ़ोल्डर में HOME सेट करके और फिर ऐप लॉन्च करके सहेजता है।केवल स्क्रिप्ट की अवधि के लिए पर्यावरण चर सेट कैसे करें?

+4

यदि आप सेटिंग स्क्रिप्ट – Nemo

उत्तर

15

बस स्क्रिप्ट जहाँ आप परिवर्तन चाहते हो में बिंदु पर

export HOME=/blah/whatever 

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

+3

कि भ्रामक है की अवधि _beyond_ पिछले करना चाहता था यह कठिन होगा। 'export' वैरिएबल को सबहेल में पास कर देगा, लेकिन यह पैरेंट शैल को नियंत्रित नहीं करता है। यदि आप एक स्क्रिप्ट लिख रहे हैं जो "#!/Bin/sh" से शुरू होता है या जैसे, स्क्रिप्ट बाहर निकलने पर आपके द्वारा सेट किया गया कोई भी वैरिएबल गायब हो जाएगा। – brightlancer

+0

@brightlancer, यह सच है लेकिन मैंने लिखा कुछ भी विरोधाभास नहीं दिखता है। (इस संभावना के अपवाद के साथ कि स्क्रिप्ट पृष्ठभूमि प्रक्रिया शुरू कर सकती है, लेकिन मुझे लगता है कि ओपी के परिष्कार के स्तर से परे है और केवल भ्रमित होगा)। –

+3

निर्यात अनावश्यक है। साथ ही, आपका उत्तर केवल तभी काम करता है जब उसकी स्क्रिप्ट एक दुभाषिया (#!/Bin/sh या जैसा) को आमंत्रित करती है। अगर उसकी "लिपि" नहीं है, तो जो आपने उसे अभी बताया वह उसकी लिपि के अंत से आगे बनी रहेगी। कारण है कि मैं ने कहा कि अपने जवाब भ्रामक था यही कारण है - यह सही हो सकता है, यह नहीं हो सकता है, लेकिन यह निश्चित रूप से एक बात यह है कि अनावश्यक और भ्रामक है क्योंकि यह किसी व्यक्ति में सोचने के लिए "निर्यात" आवश्यक तत्व वह के लिए देख रहा था है कारण हो सकता है मिला है। – brightlancer

50
env VAR=value myScript args ... 
+13

या 'var = मूल्य myScript args ...' – Rockallite

+4

1. 'आ पथ = $ पथ: XYZ गूंज $ पथ | grep XYZ' के पास कोई आउटपुट नहीं है? 2. 'env' का उपयोग करने और उपयोग करने के बीच क्या अंतर है? – qubodup

+9

क्योंकि शैल echo कमांड निष्पादित करने से पहले ** PATH चर ** का विस्तार करता है। आपको उस विस्तार में देरी की जरूरत है। एक तरीका: 'पथ = $ पथ: XYZ sh -c' echo $ पाथ '| ग्रेप XYZ' - एकल उद्धरण कुंजी यहाँ –

53
VAR1=value1 VAR2=value2 myScript args ... 
+1

मैंने इसे 'vblank_mode = 0 glxgears' चलाने के लिए कई बार किया है। यह काम करता है, लेकिन यह भी कहता है कि 'vblank_mode = 0: चलने के बाद कमांड नहीं मिला', जबकि 'एनवी' प्रीपेडिंग इसका कारण नहीं है। [परीक्षण ...] स्पष्ट रूप से zsh इसे पसंद नहीं करता है (फिर भी अभी भी इसे सही तरीके से उपयोग करता है), लेकिन बैश इसके साथ ठीक है। मुझे लगता है कि मैं अब से 'env' विधि के साथ जाऊंगा। –

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