बाश-निर्मित 'सेट' और 'निर्यात' क्या करते हैं?


46

मैं बश में setऔर के उद्देश्य के रूप में नुकसान का थोड़ा सा exportहूं (और मुझे लगता है कि शायद अन्य गोले भी हैं)।

मुझे लगता है कि यह पर्यावरण चर स्थापित करने के लिए है, लेकिन यह सिर्फ VARIABLE=VALUEसही किया जा सकता है ?

इसके अलावा टाइपिंग setऔर exportअपने स्वयं के शो विभिन्न मूल्यों पर।

तो उनका उद्देश्य क्या है?


इसे भी देखें: unix.stackexchange.com/questions/3507/…
lesmana

मैं हमेशा निम्नलिखित दो के साथ बैश स्क्रिप्ट से शुरू करता हूं। #! / usr / bin / env bash set -euxo pipefail यह लिंक खूबसूरती से समझाता है। coderwall.com/p/fkfaqq/…
147.3k

जवाबों:


50

exportवर्तमान प्रक्रिया के बच्चों को निर्यात, डिफ़ॉल्ट रूप से वे निर्यात नहीं किए जाते हैं। उदाहरण के लिए:

$ foo=bar
$ echo "$foo"
bar
$ bash -c 'echo "$foo"'

$ export foo
$ bash -c 'echo "$foo"'
bar

setदूसरी ओर, शेल विशेषताओं को सेट करता है, उदाहरण के लिए, स्थितीय पैरामीटर।

$ set foo=baz
$ echo "$1"
foo=baz

ध्यान दें कि bazयह असाइन नहीं किया गया है foo, यह बस एक शाब्दिक स्थिति पैरामीटर बन जाता है। कई अन्य चीजें setकर सकते हैं (ज्यादातर शेल विकल्प), देखें help set

मुद्रण के लिए, exportबिना किसी तर्क के, शेल के वातावरण में सभी चर प्रिंट करता है। setउन चर को भी प्रिंट करता है जो निर्यात नहीं किए जाते हैं। यह कुछ अन्य वस्तुओं को भी निर्यात कर सकता है (हालांकि आपको ध्यान देना चाहिए कि यह पोर्टेबल नहीं है), देखें help export


धन्यवाद जो बहुत उपयोगी उत्तर है। हालाँकि, जब मैं बस http_proxy = abc.com के साथ http_proxy सेट करता हूं , तो यह चाइल्ड प्रोसेस को दिखाई देता है, जैसे मेरे बिना इसे निर्यात किए wget चलाना। यह कैसे हो सकता है?
mydoghasworms

2
@mydoghasworms दो संभावित कारण। एक, आप कमांड को चला रहे हैं foo=bar command। यह एकल आदेश के लिए एक अंतर्निहित निर्यात है। दूसरी संभावना यह है कि http_proxyइसे संशोधित करने से पहले ही आपके वातावरण में निर्यात किया जाता है।
क्रिस डाउन

आह हाँ, आप सही हैं। शानदार, धन्यवाद!
mydoghasworms

6

देखें help set: सेट का उपयोग शेल विशेषताओं और स्थितीय विशेषताओं को सेट करने के लिए किया जाता है।

निर्यात की जाने वाली चर को बाल प्रक्रियाओं द्वारा विरासत में नहीं मिला है। exportनिर्यात के लिए एक चर चिह्नित करने के लिए प्रयोग किया जाता है।

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