शेल विशिष्ट क्या नहीं है?


9

कुछ उत्तरों के तहत, मुझे ऐसी टिप्पणियां दिखाई देती हैं जो उत्तर में शेल विशिष्ट कमांड से बचने की सलाह देती हैं।

मुझे कैसे पता चलेगा कि सभी शेल में कौन से कमांड, ऑपरेटर आदि मौजूद हैं? क्या मानकों की एक सूची है?

  • man builtinsआदेशों की एक सूची देता है। क्या वे एकमात्र कमांड हैं जो मैं एक पोर्टेबल शेल स्क्रिप्ट में उपयोग कर सकता हूं जो सभी शेल में काम करता है?
  • क्या एक अंतर्निहित शेल विशिष्ट हो सकता है?
  • क्या लिनक्स के लिए मानक अन्य यूनिक्स से भिन्न हैं?
  • वाक्यविन्यास के बारे में क्या? क्या कुछ गोले में विराम चिह्न, ऑपरेटर आदि अलग-अलग हो सकते हैं?

जवाबों:


12

ग्रेग के विकी के पास डैश के लिए बॅश स्क्रिप्ट को एडॉप्ट करने की एक पोस्ट है जो बहुत सारे 'बैशीज़' को इंगित करती है - अतिरिक्त विशेषताएं जो गैर-मानक हैं, लेकिन बैश का एक हिस्सा हैं। उन बशीरों से बचना आपकी लिपि को विभिन्न वातावरणों के अनुकूल बनाने में मदद कर सकता है। यह विशेष रूप से आपके कुछ सवालों के जवाब देता है। उदाहरण के लिए, हाँ, ऐसे ऑपरेटर हैं जो भिन्न (जैसे ==) हैं, लेकिन एक मानक पॉज़िक्स सेट हैं जो सभी वातावरणों में काम करना चाहिए।

अधिक पूरी तरह से पढ़ने के लिए, आप पॉज़िक्स मानक की जांच कर सकते हैं , जिसे सभी शेल को अनुपालन करना चाहिए। विशेष रूप से, "शेल एंड यूटिलिटीज" पर वॉल्यूम।

शेल अंतरों की तुलना में मुझे जो अधिक चुनौतीपूर्ण लगता है वह है कमांड अंतर। कई लिनक्स सिस्टम में जीएनयू होता है find, लेकिन यदि आप एक पोर्टेबल स्क्रिप्ट लिख रहे हैं, तो अपने आप पर भरोसा न करें man find, क्योंकि बीएसडी के साथ बहुत सारे सिस्टम हैं find, जिसमें एक अलग सुविधा सेट है। यदि आप बिजीबॉक्स के लिए स्क्रिप्ट लिख रहे हैं, तो आप पाएंगे कि विभिन्न संस्करण पूरी तरह से अलग-अलग हैं nc। वे चीजें हैं जो मुझे हमेशा मिलती हैं जब मैं अलग-अलग वातावरणों में एक स्क्रिप्ट को तैनात करता हूं।

अच्छी शेल स्क्रिप्टिंग प्रथाओं पर अतिरिक्त पढ़ने के लिए, डेविड पशले के ब्लॉग पर भी एक अच्छा संसाधन है: रोबस्ट बैश वीथ राइटिंग

इसके अलावा, सुनिश्चित करें कि आपने इस साइट पर गिल्स के उत्तर और टिप्पणियां पढ़ी हैं । आपके पास पोर्टेबल कोड का उपयोग करने के बारे में बहुत सारी युक्तियां हैं।


5

किसी विशिष्ट शेल में शेल स्क्रिप्ट लिखने का मतलब है कि शेल स्थापित होना। एकमात्र मानक सभी यूनिक्स वेरिएंट पर स्थापित cshऔर shस्थापित होना है। इसलिए, यदि आप चाहते थे कि आपकी स्क्रिप्ट सोलारिस, * बीएसडी, और जीएनयू पर चले तो आपको इसे बॉर्न शेल में लिखना होगा।

हालांकि, अधिकांश यूनिक्स कमांड में अलग-अलग कार्यान्वयन के तहत अलग-अलग सिंटैक्स होते हैं - psसोलारिस, फ्रीबीएसडी, और जीएनयू के तहत देखें - इसलिए आप किस टूल का उपयोग करते हैं, इसके आधार पर आपकी स्क्रिप्ट वैसे भी पोर्टेबल नहीं हो सकती है। जहां शेल स्थापित किया गया है वह भी मायने रखेगा। यह है /bin/bash /usr/bin/bash, /usr/local/bin/bashया कहीं और?

मैं शेल को परिभाषित करने वाले किसी भी मानक से अनजान हूं। आरसी या http://192.220.96.201 / es / es -usenix-winter93.html`"> अजीब गैर-मानक गोले के लिए देखें। हालांकि, वे अभी भी कुछ सामान्य विचारों के अनुरूप लगते हैं।


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