स्क्रिप्ट के साथ चल रहा है ”। "और" स्रोत के साथ


25
  1. मैं सोच रहा था कि क्या बैश स्क्रिप्ट को चलाने के निम्नलिखित दो तरीके बराबर हैं?

    . ./myScript.sh
    
    source myScript.sh
  2. क्या वे दोनों स्क्रिप्ट चलाने के बजाय स्क्रिप्ट की सामग्री को चला रहे हैं, यानी स्क्रिप्ट चलाने के लिए सबस्क्रिप्शन नहीं बना रहे हैं?

1
अरे, वह तो मैनपेज में है!
एलेक्स

@alex: कृपया मुझे दिखाओ? man ., man sourceया जो भी मुझे अभी तक पता नहीं है।
टिम

2
देखें type .औरhelp .
rozcietrzewiacz

man $SHELL,/source
एलेक्स

4
दूसरों के अनुसार अधिक पोर्टेबल है
l0b0

जवाबों:


21
  1. वे बाश में बराबर हैं कि वे ठीक वैसा ही करते हैं। दूसरी ओर, source5 अक्षर लंबा है और POSIX- केवल गोले या बॉर्न के लिए पोर्टेबल नहीं है जबकि .(डॉट) है, इसलिए मैं कभी भी उपयोग करने से परेशान नहीं हूं source

  2. यह सही है - एक फाइल सोर्सिंग वर्तमान शेल में कमांड चलाता है और यह आपके वर्तमान शेल वातावरण को प्रभावित करेगा। आप अभी भी खट्टा फ़ाइल के लिए तर्क पारित कर सकते हैं और बैश वास्तव में $PATHएक सामान्य आदेश की तरह फ़ाइल नाम के लिए देखेंगे यदि इसमें कोई स्लैश नहीं है।


.बनाम के मूल प्रश्न से संबंधित नहीं है source, लेकिन आपके उदाहरण में,

. ./myScript.sh 

के समान नहीं है

source myScript.sh

क्योंकि जबकि .और sourceकार्यात्मक रूप से समान हैं, myScript.shऔर समान ./myScript.shनहीं हैं। चूंकि ./myScript.shइसमें एक स्लैश होता है, इसलिए इसे एक पथ के रूप में व्याख्या किया जाता है और शेल बस उपयोग करता है ./myScript.sh। हालांकि, myScript.shएक स्लैश नहीं है इसलिए शेल $PATHपहले इसके लिए एक खोज करता है । यह POSIX निर्दिष्ट मानक व्यवहार है .। अधिकांश गोले इस के लिए डिफ़ॉल्ट हालांकि वे का व्यवहार बदलने के लिए (जैसे पथ खोज के बाद वर्तमान कार्यशील निर्देशिका में खोज के रूप में) एक्सटेंशन या विकल्पों जोड़ सकते हैं ./ source


2
व्यवहार जब फ़ाइल के प्रदान किए गए पथ में /शेल-आश्रित नहीं है और इसके लिए है bashऔर zshइस पर निर्भर करता है कि POSIX मोड सक्षम है या नहीं। यह भी ध्यान दें कि कई ksh कार्यान्वयन में, .से भिन्न व्यवहार करता है source
स्टीफन चेजेलस

@StephaneChazelas हाँ, आप सही हैं। मैंने स्पष्ट करने के लिए एक नोट जोड़ा कि यह उपरोक्त विवरण POSIX मानक का है।
jw013

8

हाँ, वे बराबर हैं। कोई कार्यात्मक अंतर नहीं है; .के लिए सिर्फ एक बिल्ट पर्यायवाची है source

(संपादित करें: जाहिर है यह केवल सच के लिए है bashऔर zshकुछ हल्का गोले जरूरत नहीं है। source, केवल .POSIX द्वारा निर्दिष्ट किया जाता तो ksh, dash, ash, आदि नहीं हो सकता है sourceदेखते हैं। Jw013 के जवाब की जानकारी के लिए।)


धन्यवाद! लेकिन $ alias .आउटपुट bash: alias: .: not found
टिम

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