2011-12-22 12 views
28

पर दिखाई नहीं देता है, मैं एक शेल स्क्रिप्ट का उपयोग करना चाहता हूं जिसे मैं कुछ पर्यावरण चर सेट करने के लिए कॉल कर सकता हूं। हालांकि, स्क्रिप्ट के निष्पादन के बाद, मुझे बैश में "printenv" का उपयोग करके पर्यावरण चर दिखाई नहीं देता है।शैल स्क्रिप्ट में पर्यावरण चर सेट करना इसे

#!/bin/bash 

echo "Hello!" 
export MYVAR=boubou 
echo "After setting MYVAR!" 

जब मैं "./test.sh" करते हैं, मैं देख रहा हूँ:

Hello! 
After setting MYVAR! 

जब मैं "printenv myVar" करते हैं, मैं कुछ भी नहीं देख

यहाँ मेरी स्क्रिप्ट है।

क्या आप मुझे बता सकते हैं कि मैं क्या गलत कर रहा हूं?

उत्तर

49

इस प्रकार पर्यावरण चर काम करता है। प्रत्येक प्रक्रिया में पर्यावरण की एक प्रति है। कोई भी बदलाव जो प्रक्रिया अपनी प्रतिलिपि बनाता है प्रक्रिया के बच्चों को प्रचारित करता है। हालांकि, वे प्रक्रिया के माता-पिता को प्रचार नहीं करते हैं।

एक तरीका यह चारों ओर पाने के लिए source आदेश का उपयोग कर रहा है:

source ./test.sh 

या

. ./test.sh 

(दो रूपों पर्याय बन गया है)।

जब आप ऐसा करते हैं, तो उप-शैल में स्क्रिप्ट चलाने की बजाय, bash स्क्रिप्ट में प्रत्येक कमांड निष्पादित करेगा जैसे कि यह प्रॉम्प्ट पर टाइप किया गया था।

+0

यह काम करता है, लेकिन क्यों "बैश test.sh" वातावरण चर निर्धारित नहीं करता है? यदि बैश स्क्रिप्ट में प्रत्येक कमांड निष्पादित करता है जैसे कि यह प्रॉम्प्ट में टाइप किया गया है, तो पर्यावरण चर वर्तमान प्रक्रिया में सेट किया जाएगा? – GDICommander

+2

@GDICommander: नहीं। जब आप 'bash test.sh' चलाते हैं, तो यह एक नई' बाश 'प्रक्रिया बनाता है जो स्क्रिप्ट ** निष्पादित करता है और ** बाहर निकलता है। – NPE

+1

ठीक है, जानकारी के लिए धन्यवाद। अब, मैं पर्यावरण चर को थोड़ा बेहतर समझता हूं। – GDICommander

3

एक अन्य विकल्प स्क्रिप्ट प्रिंट चर आप echo export VAR=value के साथ सेट, और अपने मुख्य खोल में eval "$(./test.sh)" क्या करना चाहते करने के लिए किया जाएगा। यह विभिन्न कार्यक्रमों द्वारा उपयोग किया जाने वाला दृष्टिकोण है [उदा। आकार बदलें, dircolors] जो सेट करने के लिए पर्यावरण चर प्रदान करते हैं।

यह तभी काम करता है स्क्रिप्ट कोई अन्य आउटपुट है (या यदि किसी अन्य उत्पादन, >&2 साथ stderr पर दिखाई देता है)

+0

काम करता है क्यों डाउनवोट? यह एक आम पैटर्न है और इसमें कई फायदे हैं। – Random832

+0

यह मेरे लिए काम नहीं किया। माफ़ कीजिये। – FractalSpace

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