मुद्दों में से एक जोड़े को पैदा होती है जब फिर से लोड करने/स्रोत की कोशिश कर ~/प्रोफाइल प्रोफाइल। [यह उबंटू लिनक्स को संदर्भित करता है - कुछ मामलों में आदेशों का ब्यौरा अलग होगा]
- आप सीधे टर्मिनल में या एक स्क्रिप्ट में इस चला रहे हैं?
- आप इसे एक स्क्रिप्ट में कैसे चलाते हैं?
विज्ञापन। 1)
टर्मिनल में इसे सीधे चलाना मतलब है कि कोई भी सबशेल नहीं बनाया जाएगा। तो अगर आप उपयोग कर सकते हैं या तो दो आदेशों:
source ~/.bash_profile
या
. ~/.bash_profile
दोनों ही मामलों में इस .profile फ़ाइल की सामग्री के साथ पर्यावरण अद्यतन करेगा।
विज्ञापन 2) आप या तो
sh myscript.sh
या
. myscript.sh
बुला पहले मामले में यह एक subshell इस बात का वातावरण चर को प्रभावित नहीं करेगा बना दिया जाएगा, किसी भी पार्टी स्क्रिप्ट शुरू कर सकते हैं अपने सिस्टम और वे केवल सबहेल प्रक्रिया के लिए दृश्यमान होंगे। सबहेल कमांड को खत्म करने के बाद निर्यात में से कोई भी लागू नहीं किया जाएगा। यह एक आम मिसाल है और कई समय के लिए डेवलपर्स का बहुत कम कारण है।
आपके परिवर्तनों की अपनी स्क्रिप्ट में लागू वैश्विक वातावरण स्क्रिप्ट के साथ
.myscript.sh
आदेश चला हो गया है के लिए प्रभाव है के लिए है।
यह सुनिश्चित करने के लिए कि आप सबस्केल में स्क्रिप्ट नहीं चलाए गए हैं, आप इस फ़ंक्शन का उपयोग कर सकते हैं। (फिर से उदाहरण उबंटू खोल के लिए है)
#/bin/bash
preventSubshell(){
if [[ $_ != $0 ]]
then
echo "Script is being sourced"
else
echo "Script is a subshell - please run the script by invoking . script.sh command";
exit 1;
fi
}
मुझे उम्मीद है कि यह कुछ सामान्य गलतफहमी को साफ़ करता है! : डी शुभकामनाएं!
जैसा कि इग्नासिओ नीचे बताता है, आपकी स्क्रिप्ट एक सबहेल में चल रही है। सबहेल मुख्य खोल को संशोधित नहीं कर सकता है (बाल प्रक्रिया अपने माता-पिता को संशोधित नहीं कर सकती है)। इसलिए आपको "।" का उपयोग करके स्क्रिप्ट को "स्रोत" करने की आवश्यकता है। आदेश (जिसे "स्रोत" के रूप में भी लिखा जा सकता है)। इसलिए यदि आपकी स्क्रिप्ट पर्यावरण चर को संशोधित करना, कहना चाहती है, तो आपको "स्रोत myscript" या ".sscript" जैसी कुछ करने की आवश्यकता है (वे दोनों एक ही चीज़ का मतलब है)। यह आपके मुख्य खोल के पर्यावरण को संशोधित करेगा। (जो मुझे लगता है कि आप क्या करने की कोशिश कर रहे हैं, मुझे यह बताएं कि यह गलत है।) – bstpierre
मुझे आपके प्रश्न से मेरा जवाब मिला :) –