BASH में क्या है / है


3

मैं एक शेल में खेल रहा था और टाइप कर रहा था ।/। मैं निम्न आउटपुट पर जाता हूं:

bash: ./: Is a directory

यह "./" की तरह दिखता है यदि दिए गए नाम वाली निर्देशिका मौजूद है। मैं इस पर प्रलेखन खोजने की कोशिश कर रहा था कि क्या मेरी समझ सही थी, लेकिन ऑनलाइन कुछ भी नहीं मिल रहा है। क्या कोई मुझे यह समझा सकता है?


नहीं। ./के रूप में ही है ., जो वर्तमान निर्देशिका है। और सिर्फ लिनक्स में या सिर्फ बैश शेल में नहीं।
हेन्स

वैसे, मैं एक बेवकूफ की तरह महसूस करता हूं। हालांकि जवाब के लिए धन्यवाद।
एंडी

जवाबों:


8

इसके लिए एक सामान्य परिभाषा बाश मैनुअल में नहीं पाई जा सकती है, लेकिन POSIX विनिर्देशन (अनुभाग पथनाम रिज़ॉल्यूशन):

विशेष फ़ाइल नाम डॉट अपने पूर्ववर्ती द्वारा निर्दिष्ट निर्देशिका को संदर्भित करेगा।

खैर, अगर हमारे पास केवल पूर्ववर्ती है तो क्या है .? मैंने महत्वपूर्ण हिस्से पर जोर दिया:

यदि पथनाम स्लैश से शुरू नहीं होता है, तो पथनाम के पहले फ़ाइल नाम के पूर्ववर्ती को प्रक्रिया की वर्तमान कार्यशील निर्देशिका के रूप में लिया जाएगा

इसके अलावा,

एक पाथनाम जिसमें कम से कम एक गैर-स्लैश वर्ण होता है और जो एक या अधिक ट्रेलिंग स्लैश के साथ समाप्त होता है, जैसे कि एक एकल डॉट वर्ण ('।') को पथनाम में जोड़ा गया था।

इसलिए, जब आप टाइप करते हैं तो ./इसे हल किया जाता है ./., जो मूल रूप से आपके वर्तमान कार्य निर्देशिका को इंगित करता है। जब आप अपने शेल में कुछ टाइप करते हैं और हिट करते हैं Enter, तो शेल पहले भाग को कमांड के रूप में निष्पादित करने का प्रयास करेगा। (मूल रूप से पहले व्हाट्सएप तक वर्णों का पहला समूह।)

कोई कमांड या निष्पादन योग्य फ़ाइल नहीं है ./., इसलिए यह विफल हो जाएगा और आपको बताएगा कि ./"एक निर्देशिका है"। दिलचस्प बात यह है . है एक कमांड (यह अंतर्निहित रूप में भी पाया है source), इसलिए जब आप सिर्फ टाइप .आप प्राप्त करेंगे: bash: .: filename argument required


वैसे, अगर एक निर्देशिका मौजूद है की जाँच करने के लिए उचित तरीका हैtest -d /path/to/dir
slhck

3

जैसा कि दूसरों ने लिखा है, ./वर्तमान निर्देशिका का नाम है। जब आपने ./बैश प्रॉम्प्ट पर टाइप किया और एंटर मारा, तो आपने वर्तमान डायरेक्टरी को एक कमांड के रूप में निष्पादित करने का प्रयास किया, जो निश्चित रूप से विफल रहा, और बैश ने आपको संदेश दिया (पैराफ़्रास्ड), "मैं ऐसा नहीं कर सकता। ./एक निर्देशिका है और मैं। कमांड के रूप में निर्देशिकाओं को निष्पादित नहीं कर सकता। "


2

.वर्तमान निर्देशिका निकलता है। आप ./वर्तमान निर्देशिका में किसी भी फाइल के लिए उपसर्ग के रूप में उपयोग करते हैं ।

इसी तरह, ..पिछले (उच्चतर) निर्देशिका का अर्थ है। इसका उपयोग अक्सर उच्च स्तर की निर्देशिका में जाकर किया जाता है, जैसेcd ../../../

सामग्री के साथ एक फाइलसिस्टम दिया:

# Comments start with a hash and aren't parsed
/                    # root directory
/foo/                # first level directory
/foo/bar/            # second level directory
/foo/bar/baz         # third level directory
/foo/bar/baz/qux     # a file in the third level directory

यदि आप तीसरे स्तर के निदेशक (बाज) हैं, और आप दौड़ते हैं ls, तो आप देखेंगे qux। यदि आप दौड़ते हैं ls ., तो आपको समान रूप से समान है, साथ ही यदि आप दौड़ते हैं ls ./

यदि आप तीसरे स्तर के निदेशक (बाज) हैं, और आप दौड़ते हैं ls ..और ls ../दोनों आपको देते हैं baz। यही है, निर्देशिका की सामग्री एक स्तर अधिक है।


1
गलत - वर्तमान निर्देशिका पथ में कभी नहीं है। अन्यथा यह एक बड़ा सुरक्षा मुद्दा होगा।
स्लोक

मेरा बुरा, तुम सही हो। तो फिर क्यों आप के cd साथ निर्देशिका प्रस्तुत करने की जरूरत नहीं है ./?
झिमन डे z

1
पथ केवल निष्पादनों पर लागू होता है। जब आप टाइप करते हैं foo, तो शेल fooआपके PATH नामक एक निष्पादन योग्य को खोजने की कोशिश करता है , और यह पहले fooपाया गया भाग देगा । यदि आप दर्ज करते हैं cd bar, barतो बस एक विकल्प दिया जाता है cd, जो वर्तमान निर्देशिका में डिफ़ॉल्ट रूप से संभव निर्देशिकाओं के लिए देखेगा cd
स्लैक

1

Linux में ./ का अर्थ है वर्तमान निर्देशिका (और .. मूल माता-पिता को संदर्भित करता है)।

अगर आप ls -a करते हैं तो आप देखेंगे। और .. निर्देशिका के रूप में सूचीबद्ध (आपको -a की आवश्यकता है क्योंकि एक छिपी निर्देशिका का प्रतिनिधित्व करता है)

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