2012-02-17 3 views
58

मैं शेल स्क्रिप्ट है कि इस तरह के रूप में एक पंक्ति में शामिल देखा है:यूनिक्स/लिनक्स संदर्भ में फ़ाइल 'स्रोत`-d' होने पर क्या होता है?

source someOtherFile 

मुझे पता है कि निष्पादित करने के लिए someOtherFile की सामग्री का कारण बनता है, लेकिन source का महत्व क्या है?


फ़ॉलो-अप प्रश्न: किसी भी स्क्रिप्ट sourced किया जा सकता है, या स्क्रिप्ट के केवल कुछ प्रकार? जब स्क्रिप्ट को सोर्स किया जाता है तो पर्यावरण चर के अलावा कोई साइड इफेक्ट होता है (सामान्य रूप से इसे निष्पादित करने के विपरीत)?

+2

क्रॉस साइट डुप्लिकेट: http://superuser.com/questions/176783/what-is-the-difference-between-executing-a-bash-script-and-sourcing-a-bash-scrip/176788#176788 – lesmana

उत्तर

67

एक स्क्रिप्ट पर source कमांड को चालू करने से वर्तमान प्रक्रिया के संदर्भ में स्क्रिप्ट निष्पादित होती है। इसका मतलब है कि स्क्रिप्ट द्वारा निर्धारित पर्यावरण चर चलने के बाद उपलब्ध रहेगा। यह सामान्य रूप से एक स्क्रिप्ट चलाने के विपरीत है, जिस स्थिति में स्क्रिप्ट निकलने के बाद नव-निर्मित प्रक्रिया के भीतर सेट किए गए पर्यावरण चर खो जाएंगे।

आप किसी भी रननेबल शेल स्क्रिप्ट को स्रोत कर सकते हैं। अंत प्रभाव वही होगा जैसे आपने स्क्रिप्ट में कमांड को अपने टर्मिनल में टाइप किया था। उदाहरण के लिए, यदि स्क्रिप्ट निर्देशिका बदलती है, जब यह चलती है, तो आपकी वर्तमान कार्यशील निर्देशिका बदल जाएगी।

+2

क्या कोई भी स्क्रिप्ट सोर्स हो सकती है, या केवल कुछ प्रकार की स्क्रिप्ट्स? जब स्क्रिप्ट को सोर्स किया जाता है तो पर्यावरण चर के अलावा कोई भी दुष्प्रभाव (सामान्य रूप से इसे निष्पादित करने के विपरीत)? इसके अलावा, आपका उत्तर संक्षिप्त और समझा जा सकता है। धन्यवाद! –

+4

आप किसी भी शेल स्क्रिप्ट स्रोत कर सकते हैं। साइड इफेक्ट इस तथ्य से बनाए जाते हैं कि स्क्रिप्ट सचमुच आपकी प्रक्रिया में चल रही है। तो यदि यह निर्देशिका बदलता है, तो आप अपने pwd परिवर्तन देखेंगे। जबकि सिर्फ एक शेल स्क्रिप्ट निष्पादित करना सामान्य रूप से आपके pwd को नहीं बदलेगा। – Interrobang

+0

क्या मेरे पास स्रोत के अंदर फ़ाइल के अंदर एक लंबी चल रही स्क्रिप्ट है? क्या यह खत्म हो रहा है? या इसके बारे में एक डिफ़ॉल्ट टाइमआउट है। –

16

यदि आप खोल बताते हैं, उदा। फ़ाइल को पढ़ने और फ़ाइल में कमांड निष्पादित करने के लिए बैश, इसे सोर्सिंग कहा जाता है। मुख्य बिंदु यह है कि वर्तमान प्रक्रिया (खोल) यह एक नई बाल प्रक्रिया नहीं है।

बाश में आप source कमांड या बस . फ़ाइल का स्रोत बनाने के लिए उपयोग कर सकते हैं।

2

source एक यूनिक्स कमांड है जो कमांड के बाद फ़ाइल का मूल्यांकन करता है, कमांड की सूची के रूप में, वर्तमान संदर्भ में निष्पादित। आप फ़ाइल को सोर्सिंग के लिए . का भी उपयोग कर सकते हैं।

source my-script.sh; 
. my-script.sh; 

दोनों आदेशों का एक ही प्रभाव होगा।

इसके विपरीत, स्क्रिप्ट फ़ाइल नाम को वांछित खोल में पास करने से स्क्रिप्ट को एक सबहेल में चलाया जाएगा, वर्तमान संदर्भ नहीं।

संबंधित मुद्दे