क्या है 'डॉट स्पेस फाइलनाम' कमांड जो बैश में है?


30

बैश शेल का उपयोग करते समय, मैं कभी-कभी एक पाठ फ़ाइल में पर्यावरण चर रखता हूं, जिसकी सामग्री की मैं कॉपी / पेस्ट करता हूं, जैसे Export.txt:

export FOO=bar
export FIZZ=buzz

किसी ने मुझे कॉपी / पेस्ट के बजाय दिखाया, मैं टर्मिनल में टाइप कर सकता था

. exports.txt

जो कॉपी / पेस्ट के रूप में एक ही प्रभाव होगा।

वह कौन सा तंत्र है जिसके द्वारा यह 'डॉट स्पेस फाइलनाम' कमांड काम करता है? इसके लिए खोज शब्दों के बारे में सोचना कठिन है।

मैं समझना चाहता हूं कि क्या हो रहा है और यह एक-लाइनर क्या कर रहा है के सामान्य विवरण।


23
रन help . यह इतना छोटा है कि स्टैक एक्सचेंज इंजन को लगता है कि टिप्पणी करना बहुत कम है।
वाइल्डकार्ड

5
मुझे आश्चर्य है कि इस साइट में ये सभी प्रश्न क्यों होते हैं। स्टैक ओवरफ्लो , आस्क उबंटू और यूनिक्स और लिनक्स में उन्हें कई बार जवाब दिया गया है ।
फेडोरक्वि

डॉट-स्पेस को चलाने के लिए, आपको '. ' argsसिंगल या डबल कोट्स के साथ टाइप करना होगा । अन्यथा अनछुए स्थान को बैश द्वारा खाया जाता है जब यह लाइन को टोकन में बदलता है (बैश मैनुअल में "शब्द विभाजन" देखें)।
पीटर कॉर्ड्स

1
बाश में, के लिए एक वैकल्पिक नाम .है source, जिसका शाब्दिक अर्थ है "इस फ़ाइल से स्रोत आदेश," कम से कम मेरे लिए।
jpaugh

1
यूनिक्स और लिनक्स पर एक और भी सामान्य प्रश्न है unix.stackexchange.com/questions/58514 (और unix.stackexchange.com/questions/17815 और unix.stackexchange.com/questions/43882 और unix.stackexchange.com/questions/312573 और unix.stackexchange.com/questions/308109 और ...)
JdeBP

जवाबों:


40

.( "डॉट") आदेश के लिए एक पर्याय / शॉर्टकट है खोल के अंतर्निहित sourceआदेश।

यह नामांकित शेल स्क्रिप्ट को वर्तमान शेल संदर्भ (एक उपधारा के बजाय) में पढ़ा और निष्पादित किया जाता है। यह कॉलिंग शेल के वातावरण को संशोधित करने की अनुमति देता है, जैसे कि चर सेट करना और शेल फ़ंक्शन और उपनामों को परिभाषित करना।


49
दरअसल, POSIX परिभाषित "डॉट" ( ) कमांड के sourceलिए एक गैर-मानक और गैर-पोर्टेबल पर्यायवाची / शॉर्टकट है , अन्य तरीके से नहीं। .
टेराडॉन

8
बैश एक गैर-मानक sourceऔर .गैर-पॉसिक्स मोड में एक गैर-मानक प्रदान करता है, जो दोनों वर्तमान निर्देशिका को खोजते हैं, भले ही वह ऐसा न हो $PATH। POSIX मोड में, यह एक मानक प्रदान करता है .जो वर्तमान निर्देशिका को नहीं खोजता है, और नहीं source। न तो मोड sourcePOSIX के .आदेश का पर्याय है ।
hvd

26

जबकि दो मौजूदा उत्तर पहले से ही उत्कृष्ट हैं, मुझे लगता है कि उदाहरण जहां प्रभाव सबसे "ध्यान देने योग्य" है, ऐसा कहने के लिए, गायब है।

कहो कि मेरे पास script.shनिम्नलिखित सामग्री है:

cd dir

अगर मैं इस स्क्रिप्ट को सामान्य रूप से चलाऊंगा ( sh script.sh), मैं इसे देखूंगा:

olle@OMK2-SERVER:~$ sh script.sh
olle@OMK2-SERVER:~$

लेकिन अगर मुझे स्क्रिप्ट का स्रोत कहां है ( . script.sh), तो मैं इसे समाप्त करूंगा:

olle@OMK2-SERVER:~$ . script.sh
olle@OMK2-SERVER:~/dir$

ध्यान दें कि दूसरे मामले में हमारे मुख्य शेल की कार्यशील निर्देशिका कैसे बदल गई है!

इसका कारण यह है अपने स्वयं के subshell में पहला उदाहरण रन (अन्य उत्तर में उठाई बाहर के रूप में) ( shप्रक्रिया हम साथ शुरू sh-command, इस मूल रूप से किया गया हो सकता है किसी भी खोल, bash, dash, आप इसे नाम) तो वह यहां निर्देशिका बदल जाता है, कुछ नहीं करता और बंद करता है। जबकि दूसरा उदाहरण हमारे मुख्य शेल में चलता है, और इस प्रकार वहां डायरेक्टरी बदल जाती है!


4

यहाँ एक उदाहरण है।

स्क्रिप्ट फ़ाइल: mytest.sh

cat mytest.sh

#!/bin/bash

myvar=1
mystring="Hello World"

यदि आप उपरोक्त किसी भी चर को प्रिंट करने का प्रयास करते हैं तो आपको कुछ भी नहीं मिलेगा

echo $myvar

लेकिन अगर तुम करते हो

. mytest.sh

या

source mytest.sh

और फिर

echo $myvar

यह 1 प्रिंट करेगा

स्पिफ़ ने जो लिखा उसका सिर्फ एक दृश्य उत्तर


इसलिए अपने उदाहरण की व्याख्या करते हुए, उपयोग exportकरना केवल तभी है जब उन चर का उपयोग उपखंड में किया जाना है। मैं exportफ़ाइल में छोड़ सकता हूं यदि चर केवल वर्तमान शेल में उपयोग किए जाने के लिए हैं। क्या वह सही है?
२.३६ बजे iancoleman

1
काफी सही है और मैं हाँ कह सकता हूँ। हालाँकि, शेल कमांड वैरिएबल के बारे में सोचने पर एक्सपोर्ट कमांड का उपयोग अधिक उपयोगी या अधिक समझ में आता है। उदाहरण के लिए $ HOME या $ DISPLAY। हां, आप अपने शेल सत्र या किसी भी उपधारा पर एक चर निर्यात करने के लिए निर्यात कमांड का उपयोग कर सकते हैं लेकिन जैसे ही आप उस सत्र को समाप्त करेंगे।
९'१६
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.