सिड, आवक, पर्ल और श में सबसे अधिक पोर्टेबल कौन सा है?


15

क्या कोई इन उपकरणों को पोर्टेबिलिटी के क्रम में डाल सकता है? इनमें से कौन सा निश्चित रूप से सबसे न्यूनतम * निक्स सिस्टम पर पाया जाना है? क्या उनमें से कोई भी 100% मौजूद है? मेरा अनुमान है कि आदेश निम्नलिखित है:

  1. awk
  2. sed
  3. पर्ल

जब मैं कल्पना करता हूं कि ऐसे सिस्टम हैं जो एक बोर्न शेल के लिए डिफ़ॉल्ट नहीं हैं, तो कुछ शेल डिफ़ॉल्ट के रूप में मौजूद होंगे, क्या यह हमेशा रहेगा /bin/sh? शायद नहीं अगर यह एक बोर्न-प्रकार शेल नहीं है। दोनों awkऔर sedउनके पास POSIX विनिर्देश पर व्याख्या करने वाले पृष्ठ हैं, इसलिए संभवतः वे हमेशा मौजूद रहेंगे। ऐसा क्या? क्या मुझे यकीन है कि दोनों किसी भी * निक्स पर स्थापित होंगे? एम्बेडेड सिस्टम सहित?


एम्बेडेड सिस्टम अक्सर न्यूनतम रहने के लिए पोर्टेबिलिटी का त्याग करते हैं। कई पोसिक्स कंप्लेंट नहीं हैं।
jordanm

@ जोर्डनम का मतलब यह है कि वे संभवत: इनमें से कोई भी हो सकते हैं ? मैं एक प्रणाली मान रहा हूं जो कम से कम न्यूनतम शेल इंटरफ़ेस प्रदान करती है। मुझे पता है कि बिजीबॉक्स प्रदान करता है sh, awkऔर sedउदाहरण के लिए और मेरे बिजीबॉक्स-आधारित एनएएस भी पर्ल है।
terdon

1
आपके पास हो सकता है, लेकिन वे जो करते हैं, वह पूरे सिस्टम में अलग-अलग होगा, इसलिए यह प्रश्न उतना अर्थ नहीं रखता है जितना कि यह कहा गया है।
स्टीफन चेज़लस

@ स्टेफेनचैलेजस आह, क्या आप मुझे इसे नीचे संकीर्ण करने में मदद कर सकते हैं? सिस्टम एक्स पर पाए जाने की संभावना के संदर्भ में क्या उन्हें छांटना संभव नहीं है? मेरा अनुभव सख्ती से लिनक्स और एम्बेडेड NAS सिस्टम का एक जोड़ा है। मुझे पता है कि आपको इन सभी 4 के बिना कभी भी एक GNU / Linux नहीं मिलेगा, लेकिन क्या आप मुझे इस बात का अंदाजा नहीं दे सकते कि इनमें से कौन सा मौजूद होना सबसे सुरक्षित है?
terdon

जवाबों:


15

सिड, आवक, पर्ल और श में सबसे अधिक पोर्टेबल कौन सा है?

sed, shऔर awkPOSIX द्वारा निर्दिष्ट पोर्टेबल हैं, perlएक मानक द्वारा समर्थित नहीं है।

क्या कोई इन उपकरणों को पोर्टेबिलिटी के क्रम में डाल सकता है?

यदि आप अनुपालन कोड से चिपके रहते हैं, तो तीन POSIX कमांड के लिए पोर्टेबिलिटी का कोई क्रम नहीं होना चाहिए।

इनमें से कौन सा निश्चित रूप से सबसे न्यूनतम * निक्स सिस्टम पर पाया जाना है?

कई अन्य उपयोगिताओं के साथ तीन POSIX वाले एक OS के लिए POSIX होना अनिवार्य है। कम से कम होने के कारण उनमें से कुछ की कमी है, या अपूर्ण / गैर-अनुरूपण कार्यान्वयन प्रदान करते हैं, हालांकि मौजूद हैं।

वास्तव में, अधिकांश (यदि सभी नहीं) मुक्त और खुले स्रोत यूनिक्स जैसे ऑपरेटिंग सिस्टम शायद उस अनुरूप प्रक्रिया को पारित नहीं करेंगे जो उन्हें करने की कोशिश करनी चाहिए, और वे कभी भी कोशिश नहीं करते हैं।

क्या उनमें से कोई भी 100% मौजूद है?

मुझे आश्चर्य होगा कि एक OS * जैसे निक्स को बॉर्न सिंटैक्स आधारित शेल की कमी है, लेकिन कुछ भी संभव है, खासकर एम्बेडेड सिस्टम के साथ।

मेरा अनुमान है कि आदेश निम्नलिखित है: कुछ शेल डिफ़ॉल्ट के रूप में मौजूद होगा, क्या वह हमेशा / बिन / श पर रहेगा?

/bin/shबॉर्न सिंटैक्स पारिवारिक शेल होने की संभावना है, लेकिन पोसिक्स कंप्लेंट होने की गारंटी नहीं है, यहां तक ​​कि पोसिक्स कंप्लीट सिस्टम भी नहीं है। उदाहरण के लिए, यह /usr/xpg4/bin/shसोलारिस 10 पर है और पुरानी है जबकि /bin/shविरासत मूल बॉर्न शेल है जो पोसिक्स नहीं है।


12

ऑटोटूल से एक क्यू लें: बॉर्न और पोसिक्स शेल के सबसे कम आम भाजक से चिपके रहें - संभवतः द्वारा संवर्धित sed- यदि आपको कुछ लिखना है जो हर जगह काम करना होगा । ऐसे सिस्टम मौजूद हो सकते हैं जहां कुछ टूट जाता है, लेकिन आप पुनर्लेखन द्वारा ऐसी समस्याओं के आसपास काम कर सकते हैं।

उदाहरण के लिए, कुछ प्राचीन प्रणालियों में विस्तार त्रुटियों की समस्या है test, उर्फ [:

 if [ $foo = bar ] ; then...

इसलिए ऑटोकॉन्फ़ प्रैक्टिस को दोहरे उद्धरण चिह्नों में एक एकल वर्ण उपसर्ग के साथ फिर से लिखना है , जैसे:

 if [ x"$foo" = "xbar" ] ; then...

आप "x$foo"यहां भी इस्तेमाल कर सकते हैं। इस संभावना के खिलाफ गार्ड, जो $fooएक वैध विकल्प हो सकता है test(1), और चूंकि इसके [लिए एक उपनाम है test, यह अभिव्यक्ति की गलत व्याख्या कर सकता है। समाधान एक ऐसी स्थिति स्थापित करना है जहां अज्ञात तर्क [हमेशा शुरू होता है x, जिसका अर्थ है कि इसका कोई विशेष अर्थ नहीं हो सकता है [

(ऑटोकॉन्फ़ testइसके बजाय का उपयोग करने की सिफारिश करता है [, लेकिन यह सलाह एम 4 के साथ संभावित संघर्षों की प्रतिक्रिया के रूप में आती है , जो [इसके सिंटैक्स में भी उपयोग होती है।)

awk POSIX है , इसलिए सैद्धांतिक रूप से यह हर जगह उपलब्ध है। यह बिजीबॉक्स में भी है , इसलिए आपके पास awkकुछ बहुत ही प्रतिबंधित एम्बेडेड लिनक्स सिस्टम में भी कार्यान्वयन होगा । फिर भी, मैं एक प्रणाली के बिना आने के लिए कम आश्चर्यचकित awkरहूंगा sed। मुझे लगता है कि यह जटिलता के लिए नीचे आता है: सरल उपकरण आक्रामक ट्राइएज से बचने की अधिक संभावना रखते हैं।

पर्ल किसी भी व्यापक मानक, POSIX या अन्यथा का हिस्सा नहीं है, इसलिए यदि आप लक्ष्य पर्यावरण के बारे में पहले से कुछ नहीं जानते हैं तो आप बस इस पर भरोसा नहीं कर सकते। डिफ़ॉल्ट रूप से पर्ल स्थापित नहीं है:

  • Cygwin
  • FreeBSD और NetBSD
  • Slackware सहित कुछ लिनक्स के लिए "न्यूनतम" स्थापित करता है
  • कई एम्बेडेड लिनक्स जो मुख्य रूप से अपने यूजरलैंड के लिए बिजीबॉक्स पर निर्भर करते हैं

ऑटोकॉन्फ़ मैनुअल में पोर्टेबल शेल प्रोग्रामिंग पर एक अध्याय है जो आपके लिए उपयोगी होना चाहिए। अंतिम खंड कवर उपकरण की तरह है sed, awk, और कई अन्य।


धन्यवाद, लेकिन मैं इनमें से पोर्टेबिलिटी के आदेश के बारे में सोच रहा हूं। अगर मैं आपको सही पढ़ा, तो आप सुझाव दे रहे हैं कि shऔर sedसबसे पोर्टेबल हैं। ठीक है, दूसरों का क्या? और क्या shवास्तव में वह पोर्टेबल है? यदि डिफ़ॉल्ट शेल एक सी-शेल व्युत्पन्न है तो क्या होगा? क्या इस तरह की प्रणाली में अभी भी एक सिमलिंक है /bin/sh?
terdon

संपादित करने के लिए धन्यवाद, हालांकि यह बात है, दोनों sedऔर awkबिजीबॉक्स द्वारा प्रदान की जाती हैं, आप sedअनुपस्थित को खोजने के लिए और अधिक आश्चर्यचकित क्यों होंगे ? क्या आपके पास कोई विचार है अगर बिजीबॉक्स विकल्प भी sed और awk प्रदान करते हैं?
terdon

POSIX बनाम बॉर्न शेल , दोनों के एलसीडी से चिपके रहने की सलाह को फिर से लिखा। पुन: परीक्षण को उद्धृत करते हुए , मैंने इसके कारण को गलत बताया, लेकिन ऑटोकॉन्फ़ मैनुअल में अध्याय पाया जहां कारण कवर किया गया है, और तदनुसार उत्तर को संपादित किया। पुन :: sed बनाम awk और बिजीबॉक्स , मैंने समझाया कि: अधिक से अधिक जटिलता और triage। sedकम करता है, इसलिए इसका बाइनरी छोटा होगा, इसलिए इसे हटाने का कम कारण है awk, जो काफी जटिल है। (20 kiB बनाम 48 kiB मेरे सिस्टम पर।) Re: बिजीबॉक्स विकल्प , मुझे किसी अन्य वन-स्टॉप-शॉपिंग विकल्प के बारे में पता नहीं है।
वॉरेन यंग

+1 क्योंकि मैं यहां आपके सामान्य आधार से सहमत हूं (कि सबसे कम आम भाजक कुछ इस तरह का होगा sh- विषम जो कि टेर्डन रैंक awkऔर sedइस o_O के ऊपर है?) हालांकि यह केवल ऑटोटूल के उद्देश्यों के साथ संयोग है, क्योंकि कुछ वातावरण, विशेष रूप से छोटे वाले, निर्माण, अवधि के लिए अभिप्रेत नहीं हो सकता है।
गोल्डीलॉक्स

1
@ArrenYoung उस तरह की चीज़ है जिसके बारे में मैं सोच रहा था। मुझे नहीं पता (है) कि क्या सभी * निक्स सिस्टम वास्तव में डिफ़ॉल्ट रूप से एक बोर्न शेल स्थापित होंगे। यदि वे सभी एक हैं /bin/sh, तो चीजें अलग हैं लेकिन मुझे नहीं पता था कि सभी एक होंगे। इस तरह से नहीं मानने के लिए क्षमा करें, मैं आपके और जेलीग्रे के उत्तर के बीच फटा हुआ था, जिसमें दोनों ने मेरे प्रश्न का उत्तर दिया। मैंने उसका चयन इसलिए किया क्योंकि उसने इसे अधिक सीधे संबोधित किया था और क्योंकि उसके पास प्रतिनिधि कम है :)।
terdon
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.