/
पोसिट पेट नियम के लिए तर्क
इस नियम का उल्लेख किया गया था: आपको इसे चलाने के लिए निष्पादन योग्य या लिपि नाम से पहले / (डॉट-स्लेश) की आवश्यकता क्यों है? लेकिन मैं यह बताना चाहूंगा कि मुझे क्यों लगता है कि अधिक विस्तार से एक अच्छा डिजाइन है।
सबसे पहले, नियम का एक स्पष्ट पूर्ण संस्करण है:
- यदि पथ समाहित है
/
(उदाहरण ./someprog
के लिए /bin/someprog
, ./bin/someprog
): CWD का उपयोग किया जाता है और PATH नहीं है
- यदि पथ शामिल नहीं है
/
(उदाहरण के लिए someprog
): पथ का उपयोग किया जाता है और CWD नहीं है
अब, मान लीजिए कि चल रहा है:
someprog
खोज होगा:
- पहले CWD के सापेक्ष
- PATH के सापेक्ष
फिर, यदि आप /bin/someprog
अपने डिस्ट्रो से भागना चाहते थे , और आपने किया:
someprog
यह कभी-कभी काम करेगा, लेकिन दूसरों को यह विफल होगा, क्योंकि आप एक निर्देशिका में हो सकते हैं जिसमें एक और असंबंधित someprog
कार्यक्रम शामिल है।
इसलिए, आप जल्द ही सीखेंगे कि यह विश्वसनीय नहीं है, और जब आप पैथ का उपयोग करना चाहते हैं, तो आप हमेशा पूर्ण रास्तों का उपयोग करते हुए समाप्त करेंगे, इसलिए पीएटीएच के उद्देश्य को हरा सकते हैं।
ऐसा इसलिए भी है क्योंकि आपके PATH में सापेक्ष पथ होना वास्तव में एक बुरा विचार है। मैं कर रहा हूँ , आप देखnode_modules/bin
।
इसके विपरीत, मान लें कि चल रहा है:
./someprog
खोज करेंगे:
- पहले PATH के सापेक्ष
- CWD के सापेक्ष
फिर, यदि आपने अभी एक स्क्रिप्ट someprog
को एक रिपॉजिटरी से डाउनलोड किया है और इसे CWD से चलाना चाहते हैं, तो आपको कभी भी यकीन नहीं होगा कि यह वास्तविक प्रोग्राम है जो चलेगा, क्योंकि शायद आपके डिस्ट्रो में एक:
/bin/someprog
जो आपके द्वारा पिछले साल क्रिसमस के बाद बहुत अधिक पीने के बाद स्थापित किए गए कुछ पैकेज में से है।
इसलिए, एक बार फिर, आपको यह जानने के लिए मजबूर किया जाएगा कि आप क्या कर रहे हैं, यह जानने के लिए पूर्ण पथों के साथ CWD के सापेक्ष हमेशा स्थानीय स्क्रिप्ट चलाएं:
"$(pwd)/someprog"
जो बेहद कष्टप्रद होगा।
एक और नियम जिसके साथ आने के लिए आपको लुभाया जा सकता है:
सापेक्ष पथ केवल पथ का उपयोग करते हैं, पूर्ण पथ केवल CWD का
लेकिन एक बार फिर यह उपयोगकर्ताओं को गैर-पथ स्क्रिप्ट के लिए निरपेक्ष पथ का उपयोग करने के लिए मजबूर करता है "$(pwd)/someprog"
।
/
पथ खोज नियम समस्या के बारे में का हल याद करने के लिए एक सरल प्रदान करता है:
- स्लैश: उपयोग नहीं करते
PATH
- कोई स्लैश नहीं: केवल उपयोग करें
PATH
जो यह बताता है कि आप जो भी चला रहे हैं उसे हमेशा जानना आसान है, इस तथ्य पर भरोसा करके कि वर्तमान निर्देशिका में फ़ाइलों को ./somefile
या तो व्यक्त किया जा सकता है somefile
, और इसलिए यह उनमें से एक को विशेष अर्थ देता है।
कभी-कभी, थोड़ा कष्टप्रद होता है कि आप some/prog
रिश्तेदार के लिए खोज नहीं कर सकते हैं PATH
, लेकिन मुझे इसका कोई हल नहीं दिखता है।