2013-10-27 8 views
9

मैं अपनी बैश स्क्रिप्ट से एक पर्यावरण चर के साथ एक फ़ाइल स्रोत करने की कोशिश कर रहा हूं, लेकिन यह काम नहीं करता है।बैश स्क्रिप्ट से स्रोत फ़ाइल कैसे करें

यह मेरी स्क्रिप्ट (test.sh) की सामग्री है, जो ~/scripts/test.sh में स्थित है।

#!/bin/bash 
FILE_NAME=/tmp/source_file 
touch $FILE_NAME 
echo "export TEST=\"test\"" > $FILE_NAME 
source $FILE_NAME 

तब मैं my ~/.bashrc में alias का उपयोग करें।

alias testScript=~/scripts/test.sh 

लेकिन जब मैंने स्क्रिप्ट testScript उपयोग करें, यह वातावरण चर निर्धारित नहीं की।

+0

आप "यह वातावरण चर सेट नहीं किया" क्या मतलब है हो सकता है ? आपका अपेक्षित परिणाम क्या है? –

+0

जब मैं $ टेस्ट गूंजने का प्रयास करता हूं तो मुझे कोई मान नहीं दिखता है – franki3xe

+0

क्या फ़ाइल '/ tmp/source_file' में आप क्या उम्मीद करते हैं? –

उत्तर

9

पर्यावरण चर केवल प्रक्रिया पेड़ में डाउनस्ट्रीम प्रवाह करते हैं।

आप एक पार्टी की प्रक्रिया के लिए testScript टाइप करते हैं, यह एक बच्चे की प्रक्रिया और अधिकारियों /bin/bash या जो कुछ भी द्वारा #!

सेट किया गया है किसी भी वातावरण चर सेट वहाँ केवल बच्चे की प्रक्रिया के साथ रहने के पैदा करता है। निर्यात अतिरिक्त पोते (उस बच्चे के बच्चे) को चर के रूप में प्रतिलिपि बनाने का कारण बनता है जो कि उस बच्चे से पैदा हो सकता है।

कुछ भी माता-पिता को कॉपी नहीं कर सकता है। फ़ाइल चलाने के बजाय आपको स्रोत का उपयोग करने की आवश्यकता है। जोनाथन का जवाब देखें।

आप संपादन फ़ाइलों ~/.bashrc या ~/.login वातावरण चर आप बार-बार की जरूरत है स्थापित करने के लिए कोशिश कर सकते।

bash में export के और अधिक विवरण के लिए यह भी देखें https://superuser.com/q/153371 और https://superuser.com/questions/18988/difference-between-a-b-and-export-a-b-in-bash

alias testScript=". ~/scripts/test.sh" 

स्रोत के लिए फ़ाइल:

9

आप प्रयोग करना होगा। या आप . के स्थान पर source का उपयोग कर सकते हैं, लेकिन मुझे सी शैल पसंद नहीं हैं इसलिए मैं source जैसे सी शैल नोटेशन का उपयोग नहीं करता हूं। अन्य तरीकों में से

+0

यह वही था जो मुझे चाहिए - धन्यवाद। upvoted –

3

कोई भी मेरे लिए काम किया [source /path/to/file बनाम . ./path/to/file, उर्फ, आदि ...],, जब तक this tutorial करने के लिए धन्यवाद मैंने पाया कि का उपयोग करते हुए: की

बजाय

#!/usr/bin/env bash कुटिया सरल #!/usr/bin/env कोई दुभाषिया को तर्क देता है, जो मुझे लगता है कि यहां कुंजी है - अधिक जानकारी के लिए this document देखें।

किसी भी घटना में, अगर किसी भी रूप में स्रोत आदेशों आप के लिए काम नहीं कर रहे हैं, अपनी कुटिया जाँच करने का प्रयास, यह समस्या :)

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