जवाबों:
उस संदर्भ में एक डॉट का अर्थ है कि उस फ़ाइल की सामग्री को वर्तमान शेल में "स्रोत" करना। साथ source
ही एक खोल builtin आदेश किया जा रहा है। और source
और डॉट ऑपरेटर पर्यायवाची हैं।
कहो कि मेरे पास sample.sh
फ़ाइल में निम्नलिखित सामग्री थी ।
$ cat sample.sh
echo "hi"
echo "bye?"
अब जब मैं इसे स्रोत:
$ . sample.sh
hi
bye?
$
इस तरह की फाइलें अक्सर सेटअप कमांड को शामिल करने के लिए उपयोग की जाती हैं जैसे कि चीजों को पर्यावरण चर में जोड़ना।
, मैं एक फ़ाइल में इन आदेशों था कहो addvars.sh
।
$ cat addvars.sh
export VAR1="some var1 string"
export VAR2="some var2 string"
ध्यान दें कि मेरे वर्तमान शेल के वातावरण में मेरा कोई चर नहीं है।
$ env | grep VAR
$
अब जब मैं इस फ़ाइल को स्रोत:
$ . addvars.sh
$
ठीक है, ऐसा नहीं लगता कि यह कुछ भी किया था, लेकिन जब हम env
चर को फिर से जाँचते हैं :
$ env | grep VAR
VAR1=some var1 string
VAR2=some var2 string
स्लम के उत्तर में जोड़ने के लिए:
शेल स्क्रिप्ट को चलाने के दो तरीके हैं। एक स्क्रिप्ट को एक अलग प्रक्रिया में चलाना है, जिसका अर्थ है शेल के पर्यावरण (मेमोरी स्टेट) के बारे में कुछ भी "चाइल्ड" शेल प्रक्रिया को चलाने से पहले "पैरेंट" शेल की स्थिति पर वापस आ जाएगा।
उदाहरण के लिए, वर्तमान कार्य निर्देशिका (फाइलसिस्टम एक में स्थित है) प्रति-प्रक्रिया के आधार पर निर्धारित की जाती है। तो, चलो एक स्क्रिप्ट है जो इस तरह दिखता है:
#!/bin/bash
cd ~
cd ..
pwd
तो, चलो इस स्क्रिप्ट को कहते हैं, ओह foo
,। और इस स्क्रिप्ट को निम्नानुसार चलाते हैं:./foo
हम निम्नलिखित देखेंगे:
/home
(मानक अस्वीकरण है कि बड़ी संख्या में लिनक्स और अन्य UNIX क्लोन वितरण हैं, जिनमें से कुछ उपयोगकर्ता के उपयोगकर्ता निर्देशिकाओं में नहीं हैं /home
। या, जैसा कि हम कहते थे कि "आपका लाभ भिन्न हो सकता है")
अब इस स्क्रिप्ट को चलाने के बाद, इस कमांड में टाइप करते हैं
pwd
यह देखने के लिए कि हम किस निर्देशिका में हैं। हम कुछ इस तरह देखेंगे:
/home/username
कारण, फिर से, जिस शेल स्क्रिप्ट को हमने चलाया था, उसका अपना वातावरण था (अपनी स्वयं की निर्देशिका सहित जहां कमांड चलाए जा रहे थे), और स्क्रिप्ट के समाप्त होते ही वह वातावरण चला गया।
अब, foo
स्क्रिप्ट को इस तरह चलाते हैं
. ./foo
या, समकक्ष:
source ./foo
यदि हम pwd
बाद में करते हैं, तो हम इसे देखेंगे:
/home
इसका कारण: एक स्क्रिप्ट को सोर्स करना एक अलग प्रक्रिया नहीं कहलाता है। यह हाथ से पैरेंट प्रक्रिया में सभी कमांड टाइप करने जैसा है; स्क्रिप्ट समाप्त होने के बाद इसका वातावरण संरक्षित है।
मुझे एक सरल उदाहरण के साथ आना है। आइए एक स्क्रिप्ट है जो इस तरह दिखता है:
#!/bin/bash
exit
नाम बताइए foo
। आइए सुनिश्चित करें कि हम इसे चला सकते हैं chmod 755 foo
:। तो, चलो इसे इस तरह चलाते हैं:
./foo
कुछ नहीं हुआ। हालांकि, दूसरी तरफ, अगर हम ऐसा करते हैं:
. ./foo
या यह:
source ./foo
हम लॉग आउट करते हैं।
# type .
. is a shell builtin
# help .
.: . filename [arguments]
Execute commands from a file in the current shell.
Read and execute commands from FILENAME in the current shell. The
entries in $PATH are used to find the directory containing FILENAME.
If any ARGUMENTS are supplied, they become the positional parameters
when FILENAME is executed.
Exit Status:
Returns the status of the last command executed in FILENAME; fails if
FILENAME cannot be read.
। (स्रोत या डॉट ऑपरेटर)
वर्तमान शेल संदर्भ में फ़ाइल नाम तर्क से आदेशों को पढ़ें और निष्पादित करें।
Syntax
. filename [arguments]
source filename [arguments]
source डॉट / पीरियड का एक पर्याय है। '' बैश में, लेकिन POSIX श में नहीं, इसलिए अधिकतम अनुकूलता के लिए अवधि का उपयोग करें।
जब कोई स्क्रिप्ट स्रोत का उपयोग करके चलाई जाती है, तो वह मौजूदा शेल के भीतर चलती है, स्क्रिप्ट द्वारा बनाया या संशोधित किया गया कोई भी स्क्रिप्ट पूरी होने के बाद उपलब्ध रहेगा। इसके विपरीत यदि स्क्रिप्ट केवल फ़ाइल नाम के रूप में चलाई जाती है, तो स्क्रिप्ट को चलाने के लिए एक अलग सबशेल (चर के पूरी तरह से अलग सेट) के साथ चलाया जाएगा।
.Ss64script (dot ss64script) और चलाकर स्क्रिप्ट को निष्पादित करने के बीच एक सूक्ष्म अंतर है। ss64script (डॉट स्पेस ss64script)
पहले एक फाइल चल रही है, जिसे 'ls' कमांड से छिपाया गया है, (हालांकि ls -a छिपी हुई फाइलें दिखाएगा) दूसरा विकल्प ss64script को निष्पादित करेगा, भले ही वह chmod के साथ निष्पादन योग्य के रूप में सेट नहीं किया गया हो।
टी एल; डॉ
डॉट सोर्स कमांड के समान ही है।
स्रोत एक यूनिक्स कमांड है जो कमांड के अनुसरण में फाइल का मूल्यांकन करता है, कमांड की सूची के रूप में, वर्तमान संदर्भ में निष्पादित किया जाता है।
Https://en.wikipedia.org/wiki/Source_(command) से निकाला गया