किसी ने मुझे बताया कि:
BASH एक पर्यावरण चर नहीं है, यह एक शेल चर है
क्या फर्क पड़ता है?
किसी ने मुझे बताया कि:
BASH एक पर्यावरण चर नहीं है, यह एक शेल चर है
क्या फर्क पड़ता है?
जवाबों:
$BASH
एक स्थानीय चर है जो केवल वर्तमान (बैश) शेल में मान्य है।
पर्यावरण चर जैसे $SHELL
वैध प्रणालीबद्ध। एक मौजूदा बैश खोल में, $BASH
के निष्पादन के पथ की ओर इशारा करता बैश , जबकि $SHELL
खोल करने के लिए अंक डिफ़ॉल्ट (जो एक ही मूल्य का हो सकता है) के रूप में परिभाषित।
वातावरण चर का एक विवरण के लिए देखें पर्यावरण चर उबंटू सहायता में।
एक पर्यावरण चर एक कार्यक्रम में और यह बच्चे के कार्यक्रमों में विश्व स्तर पर उपलब्ध है। एक शेल वैरिएबल केवल वर्तमान शेल में उपलब्ध है। शेल चर को पर्यावरण चर के रूप में उपलब्ध कराने के लिए, export VARNAME
(डॉलर के बिना $
) का उपयोग करें ।
स्पष्टीकरण के उदाहरण:
$ SOME=VAR # define shell variable $SOME
$ echo $SOME
VAR
$ env | grep SOME # note: no output
$ export SOME # turn $SOME into an environment variable
$ env | grep SOME
SOME=VAR
पर्यावरण चर को परिभाषित करने का दूसरा तरीका:
$ export ANOTHER=VALUE
$ echo $ANOTHER
VALUE
$ env | grep ANOTHER
ANOTHER=VALUE
export
जरूरी नहीं कि एक पर्यावरण चर निर्धारित किया जाए। stackoverflow.com/questions/7411455/…
export
बच्चे प्रक्रियाओं के लिए एक पर्यावरण चर सेट करता है। आपके द्वारा जोड़ा गया पद इस उत्तर का खंडन नहीं करता है, क्या आप स्पष्ट कर सकते हैं कि आपको क्यों लगता है कि यह गलत है?
export
बिल्कुल एक पर्यावरण चर सेट
इसमे अंतर है। शेल वैरिएबल्स और एनवायरनमेंट वेरिएबल्स इसे बेहतर तरीके से समझाएंगे जो मैं कर सकता हूं, लेकिन यहां इसका एक अंश है:
यदि कोई परिवर्तन शेल चर के लिए किया जाता है, तो परिवर्तन को देखने के लिए किसी भी कांटेदार उपप्रकारों के लिए संबंधित परिवेश चर के लिए स्पष्ट रूप से "निर्यात" किया जाना चाहिए। याद रखें कि शेल चर उस शेल के लिए स्थानीय हैं जिसमें उन्हें परिभाषित किया गया था।
इस प्रश्न का उत्तर देने के लिए पहले एक चर के दायरे को समझने का प्रयास करें।
जब आप एक नया वैरिएबल बनाते हैं, जैसे कि SOME_ENV_VARIABLE="testing.txt"
यह अंदर रहता है SHELL scope
, तो इसका मतलब यह है कि इसे शेल के उस उदाहरण से एक्सेस किया जा सकता है जहां उपयोगकर्ता लॉग इन है। उदाहरण के लिए जब आप एक नया टर्मिनल खोलते हैं या आप शेल को बदलते हैं (उदाहरण के लिए) पर स्विच करें csh
) आप उस चर तक नहीं पहुँच सकते।
जब आप की तरह है कि चर निर्यात export SOME_ENV_VARIABLE
कि चर अब में मतलब यह है कि पर्यावरण दायरे में उपलब्ध है, कि उदाहरण के लिए यदि आप खोल आप कर सकते हैं बदलने के लिए अभी भी है कि चर का उपयोग। निम्नलिखित उदाहरण के साथ समझने की कोशिश करते हैं:
[vishrant@localhost]$ SOME_ENV_VARIABLE="testing.txt" #creating variable in bash shell
[vishrant@localhost]$ echo $SOME_ENV_VARIABLE
testing.txt
[vishrant@localhost]$ export SOME_ENV_VARIABLE #variable now available with environment
[vishrant@localhost]$ env | grep SOME_ENV_VARIABLE
SOME_ENV_VARIABLE=testing.txt
[vishrant@localhost]$ csh #changing shell
[vishrant@localhost ~/shell_scripting]$ echo $SOME_ENV_VARIABLE
testing.txt
[vishrant@localhost ~/shell_scripting]$ exit
exit #returned to parent shell
[vishrant@localhost]$ SOME_SHELL_VARIABLE="hello.txt"
[vishrant@localhost]$ csh
[vishrant@localhost ~/shell_scripting]$ echo $SOME_SHELL_VARIABLE
SOME_SHELL_VARIABLE: Undefined variable.
सादृश्य: मान लें कि आपके पास एक दो बेडरूम का अपार्टमेंट है और आप इसे दूसरे रूममेट के साथ साझा कर रहे हैं। आम क्षेत्र को किसी के द्वारा भी एक्सेस किया जा सकता है लेकिन आपके बेडरूम में नहीं, पर्यावरण चर क्षेत्र की तरह सामान्य है और शेल वैरिएबल बेडरूम की तरह है, यदि आप सामान्य क्षेत्र में कुछ करेंगे तो इसे किसी के द्वारा भी एक्सेस किया जा सकता है लेकिन यदि आप इसे अपने बेडरूम में रख सकते हैं तो यह केवल आपके द्वारा पहुँचा जा सकता है।
याद रखें कि नया टर्मिनल खोलने पर आप या तो चर का उपयोग नहीं कर पाएंगे क्योंकि आप उस उदाहरण को बदल रहे हैं । उसके लिए आपको .profile
या तो अपने चरों को जोड़ना चाहिए या .bashrc
(यदि आप बैश का उपयोग कर रहे हैं)।