बैश स्क्रिप्ट में पर्यावरण चर सुलभ नहीं हैं


22

मैं एक अजीब समस्या में भाग गया। मैंने कुछ env वैरिएबल में डाला .bashrcऔर यह काम करना चाहिए:

echo $HADOOP_HOME
/home/me/dist/hadoop

लेकिन bash स्क्रिप्ट्स को निष्पादित करते समय env वेरिएबल सुलभ नहीं है। मान लीजिए कि मैं /tmp/sample.shनीचे दी गई सामग्री के साथ बनाता हूं :

#! /bin/bash
echo $HADOOP_HOME

जब मैं स्क्रिप्ट के ऊपर चलता हूं, तो एक खाली लाइन को गूँजता है:

/tmp/sample.sh
   

1
क्या आप अपने संबंधित हिस्से को दिखा सकते हैं .bashrc? मेरा अनुमान है कि आप exportआईएनजी नहीं हैं: export HADOOP_HOME=/home/me/dist/hadoopजब आप /tmpsample.sh` चलाते हैं (जो bashएक नए वातावरण के साथ एक नया पैदा करता है) HADOOP_HOME नए वातावरण में नहीं है।
जॉन एन

जवाबों:


29

ऐसा इसलिए है क्योंकि HADOOP_HOMEचर निर्यात नहीं किया गया है:

$ cat foo.sh
#!/bin/bash
echo "HADOOP_HOME: $HADOOP_HOME"


$ HADOOP_HOME=/home/me/dist/hadoop
$ echo $HADOOP_HOME
/home/me/dist/hadoop

$ foo.sh
HADOOP_HOME: 

$ export HADOOP_HOME
$ foo.sh
HADOOP_HOME: /home/me/dist/hadoop

जब आप एक शेल स्क्रिप्ट चलाते हैं, तो वह स्क्रिप्ट अपने स्वयं के बैश इंस्टेंस में चलेगी (यही वह #!/bin/bashहै) जो वर्तमान के एक बच्चे का खोल है। चर को डिफ़ॉल्ट रूप से बच्चे के गोले में पारित नहीं किया जाता है, केवल अगर वे निर्यात किए जाते हैं। प्रत्येक बैश सत्र को स्वतंत्र मानें (वे बड़े पैमाने पर हैं)। आप आम तौर पर एक के वातावरण को प्रदूषित करने के लिए एक में परिभाषित चर नहीं चाहते हैं। उन मामलों के लिए जहां यह आवश्यक है, उपयोग करें export

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.