जहां तक मैं कह सकता हूं, वैरिएबल असाइनमेंट वही है चाहे वह "निर्यात" से पहले हो या नहीं। वह किसके लिए है?शैल प्रोग्रामिंग में "निर्यात" क्या करता है?
उत्तर
निर्यात किए गए चर (जैसे $HOME
और $PATH
) अन्य कार्यक्रमों के लिए उपलब्ध हैं। नियमित (गैर-निर्यातित) चर अन्य कार्यक्रमों के लिए उपलब्ध नहीं हैं।
$ env | grep '^variable='
$ # No environment variable called variable
$ variable=Hello # Create local (non-exported) variable with value
$ env | grep '^variable='
$ # Still no environment variable called variable
$ export variable # Mark variable for export to child processes
$ env | grep '^variable='
variable=Hello
$
$ export other_variable=Goodbye # create and initialize exported variable
$ env | grep '^other_variable='
other_variable=Goodbye
$
अधिक जानकारी के लिए जीएनयू बैश के मैनुअल में export
builtin के लिए प्रविष्टि देखें।
ध्यान दें कि गैर निर्यात चर (...)
और इसी तरह के अंकन के माध्यम से चलाने के subshells लिए उपलब्ध हो जाएगा:
$ othervar=present
$ (echo $othervar; echo $variable; variable=elephant; echo $variable)
present
Hello
elephant
$ echo $variable
Hello
$
subshell ज़ाहिर है, माता पिता के खोल में चर को प्रभावित नहीं कर सकते हैं।
सबहेल्स के बारे में कुछ जानकारी बैश मैनुअल में command grouping और command execution environment के तहत पाई जा सकती है।
यह असाइनमेंट को सबप्रोसेसेस के लिए दृश्यमान बनाता है।
[email protected]:~/rentacoder/bin2txt$ foo=bar
[email protected]:~/rentacoder/bin2txt$ bash -c 'echo $foo'
[email protected]:~/rentacoder/bin2txt$ export foo
[email protected]:~/rentacoder/bin2txt$ bash -c 'echo $foo'
bar
अच्छा, यह आम तौर पर खोल पर निर्भर करता है। bash
के लिए, यह चर को "निर्यात करने योग्य" के रूप में चिह्नित करता है जिसका अर्थ यह है कि यह आपके द्वारा चलाए जाने वाले किसी भी बाल प्रक्रिया के लिए पर्यावरण में दिखाई देगा।
गैर-निर्यातित चर केवल वर्तमान प्रक्रिया (खोल) से दिखाई दे रहे हैं।
bash
आदमी पृष्ठ से
:
export [-fn] [name[=word]] ...
export -p
आपूर्ति के नाम बाद में मार डाला आदेशों की पर्यावरण के लिए स्वत: निर्यात के लिए चिह्नित किया गया है।
यदि
-f
विकल्प दिया गया है, तो नाम फ़ंक्शंस को संदर्भित करते हैं। यदि कोई नाम नहीं दिया गया है, या यदि-p
विकल्प प्रदान किया गया है, तो इस खोल में निर्यात किए गए सभी नामों की एक सूची मुद्रित की जाती है।
-n
विकल्प निर्यात संपत्ति को प्रत्येक नाम से हटा दिया जाता है।यदि एक चर नाम
=word
द्वारा पीछा किया जाता है, तो चर का मानword
पर सेट किया गया है।
export
अमान्य विकल्प का सामना नहीं होने तक 0 से बाहर निकलने की स्थिति लौटाता है, नामों में से एक वैध शैल चर नाम नहीं है, या-f
किसी ऐसे नाम से आपूर्ति की जाती है जो फ़ंक्शन नहीं है।
तुम भी typeset
कमांड के साथ निर्यात के रूप में चर सेट कर सकते हैं और स्वचालित रूप से set -a
साथ, इस तरह के रूप में सभी भविष्य चर कृतियों या संशोधन निशान।
निर्यातित चर प्रक्रिया प्रक्रिया पदानुक्रम के भीतर सभी प्रक्रियाओं के लिए उपलब्ध है। उदाहरण के लिए, बाल प्रक्रिया द्वारा निर्यात किया गया डेटा मूल प्रक्रिया के लिए उपलब्ध है और इसके विपरीत।
निर्यात का मुख्य उपयोग केस 2 प्रक्रियाओं के बीच डेटा साझा करना है।
चाइल्ड प्रक्रिया अपने माता-पिता के लिए मूल्य नहीं बदल सकता है। –
मैंने कुछ नई लाइनें और लाइनें केवल '$ 'दिखा रही हैं ताकि यह स्पष्ट रूप से दिखाया जा सके कि' grep' कमांड से कोई आउटपुट नहीं है। बेशक, रोलबैक के लिए स्वतंत्र महसूस करें अगर आपको लगता है कि यह पठनीयता – fedorqui