2008-11-20 9 views
7

में सिस्टम स्कोप पर्यावरण परिवर्तक को कैसे निर्यात करूं, मुझे एक मौजूदा स्कोप के बाहर उपलब्ध एक बैश स्क्रिप्ट से सिस्टम वातावरण चर सेट करने की आवश्यकता है। तो आप सामान्य रूप से इस तरह वातावरण चर निर्यात होगा:मैं बैश

निर्यात MY_VAR =/opt/my_var

लेकिन मैं वातावरण चर की जरूरत है, हालांकि एक प्रणाली के स्तर पर उपलब्ध होने की। क्या यह संभव है?

उत्तर

5

यही एक रास्ता है मैं जानता हूँ कि तुम क्या चाहते करने के लिए है:

foo.sh में, तुम हो:

#!/bin/bash 
echo MYVAR=abc123 

और जब आप चर का मान प्राप्त करना चाहते हैं, आपके पास निम्नलिखित करने के लिए:

$ eval "$(foo.sh)" # assuming foo.sh is in your $PATH 
$ echo $MYVAR #==> abc123 
कि आप क्या करना चाहते हैं, और आप इसे कैसे करना चाहते हैं, स्रोत का उपयोग के बारे में डगलस Leeder के सुझाव के आधार पर इस्तेमाल किया जा सकता

, लेकिन यह स्रोत होगा पूरी फ़ाइल, कार्यों और सब। Eval का उपयोग, केवल सामान जो गूंज जाता है मूल्यांकन किया जाएगा।

+0

मैं सिर्फ इतना है कि अपने आप को ऐसा करने के लिए कोशिश कर रहा था। मैंने eval और $ (foo) को छोड़कर छोड़ दिया था, सिवाय इसके कि मैंने निकालने के लिए तर्क के चारों ओर उद्धरण छोड़ दिया था। काम नहीं किया वाक्यविन्यास फिक्स के लिए धन्यवाद। – jmanning2k

13

वास्तव में नहीं - एक बार जब आप एक उपप्रजाति में भाग ले रहे हैं तो आप अपने माता-पिता को प्रभावित नहीं कर सकते हैं।

वहाँ दो संभावनाएं:

1) स्रोत स्क्रिप्ट के बजाय इसे चलाने (source . देखें):

 
    source {script} 

2) है स्क्रिप्ट उत्पादन निर्यात आदेश, और eval कि:

 
    eval `bash {script}` 
OR: 
    eval "$(bash script.sh)" 

संपादित करें: स्रोत के बजाए eval होने के लिए दूसरा विकल्प सही किया गया। उफ़।

1

चर/etc/प्रोफ़ाइल में चर सेट करें (यदि आवश्यक हो तो फ़ाइल बनाएं)। यह अनिवार्य रूप से प्रत्येक बैश प्रक्रिया के लिए चर उपलब्ध कराएगा।

0

चर/etc/प्रोफ़ाइल में चर सेट करें (यदि आवश्यक हो तो फ़ाइल बनाएं)। यह अनिवार्य रूप से प्रत्येक बैश प्रक्रिया के लिए चर उपलब्ध कराएगा।

... हर नई बैश प्रक्रिया के लिए ...