क्या "श" को "बिन" निर्देशिका में होना चाहिए?


16

मैंने पढ़ा है कि POSIX अनुरूप ऑपरेटिंग सिस्टम (उदाहरण के लिए: लिनक्स) में shशेल होना चाहिए ।

लेकिन क्या यह निर्देशिका shमें होना आवश्यक है /bin, या यह किसी भी निर्देशिका में हो सकता है?


आप हमेशा एक सिम्लिंक का उपयोग कर सकते हैं /bin/sh, जैसे कि लिनक्स पर ज्यादातर मामलों में, यह पहले से ही एक सिमलिंक है bash। यह सिर्फ इतना है कि बहुत सारी लिपियाँ हार्डकोड का उपयोग करती हैं/bin/sh
बेलगैड

5
अब जब आपके पास यह जवाब है कि यह कहीं भी रह सकता है, तो आप खुद से पूछ सकते हैं: आप कैसे कर सकते हैं तब आप एक के लिए एक शबंग लाइन को लिख सकते हैं sh? और जवाब यह है: शेबंग या तो पोसिक्स का हिस्सा नहीं है, इसलिए समस्या खुद भी मौजूद नहीं है।
जोर्ग डब्ल्यू मित्तग

1
@ JörgWMittag हाँ, यह कभी-कभी आश्चर्य होता है कि हम "मानक" यूनिक्स सुविधाओं के रूप में कितनी चीजों के बारे में सोचते हैं, वास्तव में POSIX द्वारा आवश्यक नहीं हैं।
बमर

1
आप एक शेबंग का उपयोग करते हैं या नहीं, इस बात से स्वतंत्र है कि क्या पथ /bin/shएक पॉसिक्स सिस्टम पर मौजूद होना चाहिए।
चेपनर

कम से कम उबंटू-व्युत्पन्न सिस्टम पर, /bin/shएक लिंक है dash। बीएसडी पर, /bin/shइसकी एक कड़ी नहीं बल्कि एक अलग निष्पादन योग्य है, और निश्चित रूप से नहीं bash
रिआल्टो

जवाबों:


22

POSIX केवल जनादेश /devऔर /tmpअस्तित्व के लिए निर्देशिका , और /dev/null, /dev/ttyऔर /dev/consoleफ़ाइलें। मानक उपयोगिताओं का अस्तित्व होना चाहिए, लेकिन कोई विशेष स्थान निर्दिष्ट नहीं है। वहाँ बिल्कुल भी नहीं हो सकता है /bin, और अगर वहाँ है तो इसमें कोई शामिल नहीं हो सकता है sh, और अगर ऐसा होता है तो वह POSIX नहीं हो सकता है sh

आप एक मान्य PATHचर प्राप्त कर सकते हैं जिसमें POSIX उपकरण शामिल हैं sh, जिसमें getconfकमांड शामिल है :

$ PATH=$(getconf PATH)
$ sh

यह उपयोगी हो सकता है, उदाहरण के लिए, सोलारिस, जहां डिफ़ॉल्ट shPOSIX- संगत नहीं है , लेकिन एक अनुपालन shप्रदान किया गया है और उस तरह से सुलभ है (क्योंकि सोलारिस एक प्रमाणित यूनिक्स है )। मोर्चे पर getconf PATHशामिल होगा /usr/xpg4/bin, जिसमें POSIX shऔर कई अन्य आवश्यक उपकरण शामिल हैं ( जैसे बेकार वाले सहितcd )।


पुन: सोलारिस: ... जब तक आप सोलारिस "छोटा सर्वर" इंस्टॉलेशन नहीं चला रहे हैं, जो पोसिक्स के कई टूल को छोड़ देता है। Unix.stackexchange.com/q/360359/135943
Wildcard

"बेकार" वाले? मैं उन्हें निरर्थक कहना चाहूंगा।
मुकेश साई कुमार

2
तो गोनकॉफ़ कैसे पाया जाता है?
जोशुआ

@MukeshSaiKumar एक स्टैंड-अलोन 'cd' कमांड कभी काम नहीं कर सकता है
OrangeDog

ठीक है, यह केवल काम करने के मूल्य के लिए "काम" करेगा, कहते हैं, परीक्षण करता है कि क्या आप एक निर्देशिका में बदल सकते हैं, लेकिन वास्तव में उस प्रक्रिया को नहीं छोड़ते हैं जिसने इसे वहां बुलाया था। हालांकि यह सब से अधिक कार्यक्षमता है, हालांकि।
चार्ल्स डफी

12

नहीं, इसमें होना आवश्यक नहीं shहै /bin। यह स्पष्ट रूप से बताता है /bin, /usr/binऔर /usr/xpg4/binसंभावित स्थानों के रूप में। POSIX कल्पना के लिए केवल shPATH की आवश्यकता होती है ।

POSIX कल्पना कहता है:

अनुप्रयोगों को ध्यान देना चाहिए कि शेल के लिए मानक पथ को /bin/shया तो ग्रहण नहीं किया जा सकता है /usr/bin/sh, या गेटकॉफ पाथ द्वारा लौटाए गए पैट के पूछताछ से निर्धारित किया जाना चाहिए, यह सुनिश्चित करते हुए कि लौटाया गया पथनाम एक पूर्ण पथनाम है और शेल निर्मित नहीं है।

उदाहरण के लिए, मानक श उपयोगिता का स्थान निर्धारित करने के लिए:

command -v sh

कुछ कार्यान्वयन पर यह वापस आ सकता है:

/usr/xpg4/bin/sh


2

जैसा कि यहां अन्य लोगों ने कहा है, POSIX अनुपालन के लिए यह कड़ाई से आवश्यक नहीं है।

लेकिन मौजूदा सॉफ्टवेयर के साथ यकीनन अनुकूलता कहीं अधिक महत्वपूर्ण है (आखिरकार, POSIX का उद्देश्य सभी अनुरूप ऑपरेटिंग सिस्टम पर कुछ चीजें काम करना है) और अगर कोई OS पर sh प्रदान नहीं करता है /bin/sh, तो वह कुछ चीजों को तोड़ देगा।

जाहिर है, #!/bin/shइस रास्ते पर भरोसा करने वाली स्क्रिप्ट्स को मानकीकृत किया जा रहा है। यह काम करने के लिए आवश्यक नहीं है; POSIX के लिए भी आवश्यक नहीं है कि #!लाइनें समर्थित हों, हालांकि यह उल्लेख करता है कि ऐसी कार्यक्षमता आम है :

एक और तरीका है कि कुछ ऐतिहासिक कार्यान्वयन शेल स्क्रिप्ट को संभालते हैं, फ़ाइल के पहले दो बाइट्स को "स्ट्रिंग!" के रूप में पहचानते हैं। और निष्पादित करने के लिए कमांड दुभाषिया के नाम के रूप में फ़ाइल की पहली पंक्ति के शेष का उपयोग करना।

लेकिन अगर इसका समर्थन नहीं किया जाता है, तो बहुत सारे मौजूदा सॉफ्टवेयर टूट जाएंगे या पोर्ट के लिए अतिरिक्त काम की आवश्यकता होगी।

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