क्या POSIX गारंटी देता है कि PATH में मानक उपयोगिताओं हैं?


11

में "कमांड खोजें और निष्पादन" खंड , POSIX विनिर्देशन का कहना है कि PATHजब निष्पादित करने के लिए एक उपयोगिता (कुछ अपवादों को छोड़कर) की खोज की खोज कर रहा है। क्या विनिर्देश कहीं भी उल्लेख करता है कि PATHएक मूल्य के लिए इनिशियलाइज़ किया जाएगा जो गारंटी देता है कि सभी मानक उपयोगिताओं को मिलेगा?

या क्या मुझे यह गारंटी देने के लिए निम्न की तरह कुछ करने की आवश्यकता है कि मुझे मानक उपयोगिता चलाने की कोशिश करते समय "कमांड नहीं मिली" त्रुटि मिलेगी?

PATH=$(command -p sh -c 'printf %s "${PATH}"')

( उपयोगिता के POSIX विनिर्देशcommand देखें )

जवाबों:


13

हां और ना। POSIX वातावरण में, उपयोगिताओं को विनिर्देश द्वारा वर्णित व्यवहार करना चाहिए। व्यवहार में, इसका मतलब है कि उपयोगिताओं के अनुरूप संस्करणों में मौजूद होना चाहिए $PATH। हालाँकि, जब आपका कार्यक्रम POSIX- अनुरूप प्रणाली पर चल रहा है, तो आप इसे गैर-अनुरूप वातावरण में चला सकते हैं। व्यवहार में, अक्सर ऐसा होता है कि ओएस में एक विरासत मोड और एक पॉसिक्स मोड है, और डिफ़ॉल्ट रूप से विरासत मोड में है। कुछ आदेशों को याद करने से बदतर, विरासत मोड में असंगतताएं होती हैं, जैसे विभिन्न अर्थों के साथ विकल्प।

आप के PATHसाथ एक अच्छा प्राप्त कर सकते हैं getconf। बेशक, यह मुश्किल है, क्योंकि getconfमूल $PATHसही नहीं हो सकता है। कमांड के लिए एप्लिकेशन उपयोग इसे करने का एक तरीका दिखाता है:

command -p getconf PATH

जहाँ तक मैं विनिर्देश को समझता हूँ, यह आवश्यक नहीं है यदि आप अपना कार्यक्रम POSIX-अनुरूप वातावरण में चला रहे हैं; और यदि आप POSIX- अनुरूप वातावरण में अपना कार्यक्रम नहीं चला रहे हैं, तो POSIX लागू नहीं होता है। हालांकि, इस एप्लिकेशन के उपयोग को एक सिफारिश के रूप में लिया जा सकता है: यदि यह काम नहीं करता है, तो आप अपने विक्रेता से शिकायत करने के लिए हकदार महसूस कर सकते हैं कि वे जो कुछ भी कर रहे हैं POSIX कल्पना के पत्र के बारे में, वे इसकी भावना का अनुपालन नहीं कर रहे हैं।


हे, मैंने यह भी नहीं देखा कि getconf PATHआवेदन उपयोग अनुभाग में। धन्यवाद!
रिचर्ड हैनसेन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.