स्रोत बनाम। अलग व्यवहार क्यों?


17

मैंने हाल ही में सीखा है, कि

. ./.a.aऔर ./.a.aऐसा ही है।

हालांकि कोशिश कर रहे हैं source source .a.a एक त्रुटि देता है। IMO, .बैश उर्फ ​​होने के नाते sourceअलग व्यवहार नहीं करना चाहिए, तो मैं क्या याद कर रहा हूँ?

बोनस, क्यों . .ठीक है जबकि source sourceनहीं है?


8
आप अपने उदाहरण के लिए एक स्पष्ट नाम चुन सकते हैं :)। किसी भी मामले में, आपको जो भी विचार दिया गया है . scriptऔर ./scriptवही बात है? वे निश्चित रूप से नहीं हैं । इसके अलावा, .एक अन्य के लिए नहीं है source। यह दूसरा तरीका है। .मानक है और sourceका एक अन्य नाम है .
terdon

2
शेल स्क्रिप्ट देखने में कुछ समय बिताने के बाद, आपको .कमांड की आदत हो जाती है , लेकिन मेरा मतलब sourceसिर्फ इतनी बेहतर कमांड है, जब आप source somefileकिसी स्क्रिप्ट में देखते हैं, तो आपको तुरंत पता चल जाता है कि वह स्टेटमेंट क्या करता है, लेकिन . somefile यह स्पष्ट नहीं है कि वह क्या करता है। आप आसानी से . चरित्र को पूरी तरह से याद कर सकते हैं
the_velour_fog

बोनस, क्यों है । ठीक है, जबकि स्रोत स्रोत नहीं है? - कितनी दूर त्रुटि संदेश में bash: .: .: is a directoryपर . .ठीक जरूरतों के बारे में बताया जा रहा है।
काउंटरमोड

@terdon - बिल्कुल सही। मूल उदाहरण . ./.a.a .ईमानदार होना था। : -DA प्रश्नोत्तरी के प्रकार, यदि आप करेंगे। :-) जुड़ा हुआ प्रश्न बहुत बढ़िया है, बहुत धन्यवाद। उस विचार ने मुझे क्या दिया: तथ्य यह है कि मैंने फाइलों को निष्पादित करने में कोई अंतर नहीं देखा था और इस तथ्य को मैंने कहीं पढ़ा है ., के लिए एक उपनाम है source। :-)
एलएएफके का कहना है कि मोनिका

जवाबों:


27

आप हर जगह .से बदल नहीं सकते source; अगर

. ./.a.a

काम करता है, आप पहले .(कम से कम बाश में) की जगह ले सकते हैं :

source ./.a.a

दूसरा .वर्तमान निर्देशिका का प्रतिनिधित्व करता है, आप उसे बदल नहीं सकते source(विशेषकर जैसा कि आपने किया है) के ./साथ नहीं source

source source

यदि आपके पास sourceवर्तमान निर्देशिका में एक फ़ाइल है , जो आपके वर्तमान शेल के लिए कुछ सार्थक है, तो ठीक होगा । मैं देख नहीं सकता कि कैसे. . सकता ठीक होगा ...

इसके अलावा, . ./.a.aऔर ./.a.aसमान नहीं हैं, दूसरा रूप .a.aएक अलग शेल में चलता है। देखें कि सोर्सिंग ('।' या 'सोर्स') और बैश में फाइल निष्पादित करने में क्या अंतर है? ब्योरा हेतु।


9

source: एक खोल कीवर्ड है कि इस तरह से इस्तेमाल किया जा ले आते है sourcefileजहां fileवैध खोल आदेशों में शामिल है। इन शेल कमांड को वर्तमान शेल में निष्पादित किया जाएगा जैसे कि कमांड लाइन से टाइप किया गया हो। अभी,.file बिल्कुल वैसा ही करता है।

इससे परे .अकेले "चालू निर्देशिका में" ./xyz(" xyzइस निर्देशिका में") या a/b/./c/./d(जो इसके समान है ) का अर्थ हैa/b/c/d )।

इसके अलावा कि .एक फ़ाइल नाम में केवल कन्वेंशन से एक अर्थ होता है .foobarजिसमें "छिपी" फ़ाइल (वास्तव में नहीं ...) या उसके रूप में foobar.pdfइंगित होती है, जो कि प्रत्यय द्वारा फ़ाइल प्रारूप को इंगित करता है (यहां.pdf ) ।

इन विभिन्न अर्थों को आपस में जोड़ा नहीं जा सकता है।


8
.किसी भी तरह से पुराना नहीं है। यह, विपरीत source, एक फ़ाइल सोर्सिंग का पोर्टेबल, पॉस-परिभाषित तरीका है। sourceउर्फ खोल-विशिष्ट है और (उदाहरण के लिए या तो अनुपस्थित हो सकता है dash) या मानक से अलग तरीके से व्यवहार .
terdon

धन्यवाद @terdon, विकी का कहना है कि सी शेल में एक डॉट (।) के रूप में स्रोत स्वीकार्य नहीं है, जहां कमांड पहली बार दिखाई दिया था।
नोआम मानोस

1
@NoamManos शायद, लेकिन सी-शेल POSIX नहीं है, इसलिए यह बहुत अलग तरीके से व्यवहार कर सकता है (और करता है)।
terdon
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.