के बीच क्या अंतर है filename
तथा ./filename
? किन परिस्थितियों में एक दूसरे को पसंद किया जाता है?
के बीच क्या अंतर है filename
तथा ./filename
? किन परिस्थितियों में एक दूसरे को पसंद किया जाता है?
जवाबों:
डेटाफाइल्स के लिए, इससे कोई फर्क नहीं पड़ता - दोनों स्टेटमेंट आपकी वर्तमान निर्देशिका में डेटा फ़ाइल को संदर्भित करेंगे। (उदाहरण के लिए, cat filename
तथा cat ./filename
शब्दार्थ समान हैं।)
यह एक अलग कहानी है अगर प्रश्न में फ़ाइल नाम एक को संदर्भित करता है निष्पादन , यानी आप कमांड लाइन पर टाइप करने वाली पहली (या केवल) चीज़ है। ./filename
अपने वर्तमान निर्देशिका में निष्पादन योग्य के लिए देखेंगे, और कहीं नहीं। filename
दूसरी ओर, पर्यावरण चर का मूल्यांकन करेगा PATH
, और देखो filename
उसमें संग्रहीत हर निर्देशिका में (जिसमें आपकी वर्तमान निर्देशिका शामिल हो सकती है या नहीं भी)।
./filename
(या कोई अन्य /path/to/filename
) इस तरह से पसंद किया जाता है जब आप एक निष्पादित करना चाहते हैं विशिष्ट निष्पादन योग्य, आपके PATH में पाया जाने वाला पहला नहीं है।
यदि आप एक कार्यक्रम चला रहे हैं, filename
अपने पहले वाले को चलाने के लिए कहते हैं $PATH
और दूसरा वर्तमान निर्देशिका में एक को चलाने के लिए कहता है।
यदि आप उस फ़ाइलनाम को किसी प्रोग्राम में तर्क के रूप में उपयोग कर रहे हैं do_something filename
या do_something ./filename
तो उनका मतलब वही है।
आप कमांड निष्पादन की बात कर रहे हैं, है ना?
एक पर्यावरण चर है PATH
जिसमें कुछ सिस्टम निर्देशिकाएं शामिल हैं, जो अर्धविराम द्वारा सीमांकित हैं। जब आप टाइप करें command
प्रणाली इन निर्देशिकाओं में उस क्रम में दिखती है जिस क्रम में वे & lt; कमांड & gt; यदि यह पता चलता है, यह इसे निष्पादित करने की कोशिश करता है। आप अपने PATH के माध्यम से देख सकते हैं echo $PATH
बाश में। उदाहरण के लिए:
$ गूंज $ पाथ
/ Sbin: / बिन: / usr / sbin: / usr / bin: / usr / खेल: / usr / स्थानीय / sbin: / usr / स्थानीय / बिन: / घर / ivanatora / बिन: / usr / स्थानीय / केडीई 4 / bin : / usr / स्थानीय / केडीई 4 / bin
जब आप टाइप करें ./filename
आप सटीक पथ निर्दिष्ट कर रहे हैं: वर्तमान निर्देशिका। आप देख सकते हैं कि वर्तमान निर्देशिका शायद ही कभी आपके PATH (सुरक्षा कारणों से) में हो। इसलिए यदि आप वर्तमान निर्देशिका से किसी फ़ाइल को निष्पादित करना चाहते हैं, तो आप उपयोग करते हैं ./filename
।
किसी फ़ाइल को उसके पथ के द्वारा निष्पादित करने के लिए (विशेषकर यदि वह $ PATH में नहीं है) तो आप टाइप भी कर सकते हैं <path>/file
, पसंद:
/ Sbin / ifconfig
निष्पादन योग्य सुरक्षा इस अंतर का मुख्य कारण है।
आप नहीं चाहते । (वर्तमान वर्किंग डायरेक्टरी या पीडब्ल्यूडी) आपके रास्ते में है क्योंकि कोई ट्रोजन हो सकता है http://en.wikipedia.org/wiki/Trojan_horse_%28computing%29 पीएस या एलएस जैसे महत्वपूर्ण निष्पादन योग्य, आपके पीडब्ल्यूडी में और खराब डेटा प्रस्तुत करके आपको बेवकूफ बनाते हैं।
यह निर्भर करता है कि आप किन परिस्थितियों का उपयोग कर रहे हैं।
एक तर्क के रूप में, उदाहरण के लिए "कार्यक्रम फ़ाइल नाम", फिर यह कार्यक्रम पर निर्भर है, लेकिन आम तौर पर वे समान हैं।
एक प्रोग्राम नाम के रूप में, उदाहरण के लिए "फ़ाइल नाम तर्कों", फिर "फ़ाइल नाम तर्क" बाइनरी को खोजने के लिए पीएटीएच खोजेगा, जबकि "./filename तर्कों" वर्तमान निर्देशिका में कार्यक्रम का उपयोग करेगा। यह स्पष्ट रूप से उपयोगी है अगर। पेट में नहीं है, लेकिन यह भी एक का उपयोग करने के लिए उपयोगी है, भले ही। पथ में है, शायद इसलिए कि यह पहले की प्रविष्टि से मेल खाता है।