पोर्टेबल स्क्रिप्ट लिखना कब महत्वपूर्ण है?


18

मेरे द्वारा लिखा गया अधिकांश कोड PHP में है। मैंने हाल ही में शेल स्क्रिप्टिंग सीखना शुरू किया है। मेरे पास जितने संसाधन और ट्यूटोरियल हैं, उनमें से अधिकांश बैश के लिए विशिष्ट हैं। कुछ बश्शियों के बारे में चेतावनी देते हैं और कुछ नहीं। मैं यहां और स्टैक ओवरफ्लो पर बहुत कुछ पढ़ रहा हूं।

जब भी कोई उत्तर बशीट का उपयोग करता है , तो कोई व्यक्ति अनिवार्य रूप से कहने के लिए टिप्पणी करेगा:

आपको यहाँ <bashism सम्मिलित करें> का उपयोग नहीं करना चाहिए। यह पोर्टेबल नहीं है।

यह तब भी होता है जब प्रश्न के साथ टैग किया गया था bash। मेरे लिए, यह एक PHP प्रोग्रामर को बताने जैसा है कि वे PHP 5 में नए कोड का उपयोग नहीं करना चाहिए क्योंकि इसका उपयोग PHP 4 के साथ नहीं किया जा सकता है। या किसी को बता रहे हैं कि उन्हें Mac के लिए कुछ नहीं लिखना चाहिए क्योंकि इसका उपयोग नहीं किया जा सकता है विंडोज पर।

जब मैं PHP में लिखता हूं, मैं एक न्यूनतम आवश्यकता चुनता हूं और मैं आगे- असंगत कोड लिखता हूं । मैं इसे पिछड़े- असंगत बनाने के बारे में चिंता नहीं करता ।

अगर मैं #!/bin/bashशेबबैंग के रूप में उपयोग करता हूं , तो मुझे बशीज़ का उपयोग क्यों नहीं करना चाहिए? मैं धारणा है कि कुछ लोगों को बस की तरह पाने के लिए शुरू कर बैश बस की खातिर bashisms (यमक इरादा)।

लोग अक्सर उपयोग करते हैं bashऔर shellपरस्पर विनिमय करते हैं - शायद इस तथ्य के कारण कि कई प्रणालियों पर बैश डिफ़ॉल्ट शेल है। इसलिए मैं यह टिप्पणी करने के लिए समझ सकता हूं कि चेतावनियों में कोड का उपयोग किया गया है, लेकिन मैं इस निहितार्थ को नहीं समझता कि उनका उपयोग करना गलत है।

जाहिर है, अगर मैं निजी उपयोग के लिए कड़ाई से स्क्रिप्ट लिख रहा हूं तो मैं इसे जिस भी भाषा में चाहता हूं, लिख सकता हूं। लेकिन मुझे लगता है कि मेरे द्वारा लिखे गए कुछ कोड दूसरों के लिए उपयोगी हो सकते हैं।

मैंने पोस्ट करने से पहले अपने प्रश्न का उत्तर खोजने की कोशिश की। मैं के बारे में जानकारी का एक बहुत कुछ पाया कैसे परीक्षण करने के लिए पोर्टेबिलिटी के लिए, लेकिन के बारे में कुछ भी नहीं मिला जब यह महत्वपूर्ण है ऐसा करने के लिए।

तो, पोर्टेबल स्क्रिप्ट लिखना कब महत्वपूर्ण है?

उदाहरण के लिए,

  • किस प्रकार की लिपियों को यथासंभव पोर्टेबल होना चाहिए?
  • ऐसे सिस्टम कितने सामान्य हैं जिनमें बैश स्थापित नहीं है?
  • यदि सिस्टम ने बैश स्थापित किया है, तो क्या इसमें खोज और अन्य उपयोगिताओं का GNU संस्करण भी होगा ?

4
मैंने इस प्रश्न का उत्तर दिया और इसका उत्तर दिया, लेकिन जितना अधिक मैं इसके बारे में सोचता हूं, केवल अंतिम 2 प्रश्न साइट के साथ फिट होते हैं। दूसरों को "मुख्य रूप से राय आधारित"।
जोर्डनम

1
इस प्रश्न में एक मेटा पहलू भी है: हालांकि यह प्रश्न के प्रारंभिक उत्तर देने में मदद नहीं कर सकता है, "यह पोर्टेबल नहीं है" जैसी टिप्पणियां अन्य पाठकों के लिए बहुत उपयोगी हो सकती हैं जो प्रश्न / उत्तर महीनों या वर्षों के बाद ठोकर खा रहे हैं।
बनगुंगिन

2
@Bananguin टिप्पणी कह रही है "यह पोर्टेबल नहीं है" मुझे परेशान मत करो। वह सिर्फ एक FYI है। मैंने स्वयं उन प्रकार की टिप्पणियाँ की हैं। यह "आपको उपयोग नहीं करना चाहिए ..." जो मुझे परेशान करता है। इसका मतलब है कि उत्तर में कुछ गड़बड़ है। उदाहरण के लिए, यदि प्रतिनियुक्त कोड की सिफारिश की जा रही है तो यह मान्य होगा। तो यह मुझे सोच रहा था कि बैश में क्या गलत है।
टॉक्सालॉट

2
+1। खासकर जब सवाल bashअकेले टैग किया गया हो, तो कोई टिप्पणी करता है "यह बैशवाद है और पोर्टेबल नहीं है"। जब मैं एक सवाल का जवाब देता हूं जो टैग किया जाता है C, तो मुझे परवाह नहीं है कि यह पोर्टेबल है Javaया नहीं।
पीपी

4
मुझे लगता है कि इसके बारे में bashबताना हमेशा अच्छा लगता है कि यह एक विशिष्ट विशेषता है, और पोर्टेबल नहीं है, जैसा कि मैं इंगित करता हूं कि कुछ उपयोगिता के लिए एक GNU विशिष्ट एक्सटेंशन का उपयोग किया जा रहा है (भले ही प्रश्न को लिनक्स के रूप में टैग किया गया था)। मैंने कभी किसी को यह कहते हुए नहीं देखा "यह बैशवाद है और आपको इसका उपयोग कभी नहीं करना चाहिए"।
मार्टिन टूरनोइज

जवाबों:


15

इस समुदाय के एक सदस्य के रूप में, मैं अक्सर उन लोगों को चीजों के लिए घृणा फैलाने वाले लोगों को नहीं देखता जो कि लक्ष्य को निशाना बनाते हैं। पोर्टेबिलिटी के बारे में बात करते समय, GNUism बैशिज़्म की तुलना में बहुत खराब है। जब तक आप bashअपने शेबंग के लिए उपयोग करते हैं, तब तक आप स्क्रिप्ट का उपयोग करके निष्पादित करने की अपेक्षा कर सकते हैं bash। हालाँकि, जब तक आप स्पष्ट रूप से जाँच नहीं करते तब तक आप संस्करण की गारंटी नहीं दे सकते। बैश संस्करण 4 में कुछ उपयोगी विशेषताएं जैसे साहचर्य सरणियाँ लाई गईं, लेकिन बैश v3 को अभी भी ओएस एक्स और आरएचईएल 5 पर व्यापक रूप से उपयोग किया जाता है।

किस प्रकार की लिपियों को यथासंभव पोर्टेबल होना चाहिए?

यह आपकी आवश्यकताओं के बारे में अधिक है और आप डेवलपर के रूप में समर्थन के लिए क्या चुनते हैं। यदि आप सभी प्रकार के * NIX का समर्थन करने वाले एप्लिकेशन के लिए एक इंस्टॉल स्क्रिप्ट लिख रहे हैं, तो पोर्टेबिलिटी बहुत महत्वपूर्ण होगी।

ऐसे सिस्टम कितने सामान्य हैं जिनमें बैश स्थापित नहीं है?

FreeBSD और Solaris 10 ऐसे सिस्टम के उदाहरण हैं जो डिफ़ॉल्ट रूप से इंस्टॉल किए गए बैश के साथ नहीं आते हैं। अधिकांश लिनक्स सिस्टम में यह होगा, एम्बेडेड सिस्टम के अपवाद के साथ।

यदि सिस्टम ने बैश स्थापित किया है, तो क्या इसमें खोज और अन्य उपयोगिताओं का GNU संस्करण भी होगा?

नहीं, और यह पोर्टेबिलिटी वाला असली मुद्दा है। यदि पोर्टेबिलिटी महत्वपूर्ण है, तो आपको केवल शेल कमांड सुविधाओं का उपयोग करना चाहिए जो कि POSIX मानक द्वारा परिभाषित हैं। GNU उपयोगिताओं को गैर-GNU प्रणालियों जैसे FreeBSD पर स्थापित किया जा सकता है, लेकिन वे PATH में पहले होने की संभावना नहीं है, और आप उन उपकरणों पर भरोसा नहीं कर सकते जिन्हें स्थापित किया जाना है।


1
मुझे लगता है कि यह एसओ की तुलना में यहां अधिक है जहां मैं अक्सर लोगों को घृणा फैलाने वाले देखता हूं । मुझे सिर्फ इतना पता है कि मैंने अक्सर इस पर ध्यान दिया है और मुझे यह सवाल पूछने के लिए प्रेरित किया है।
टॉक्सालॉट

1
इसलिए यदि जीएनयू उपयोगिताओं को स्थापित किया गया है, लेकिन पहले पेट में नहीं है, तो क्या उन्हें विशेष रूप से कॉल करने का एक तरीका है? अन्यथा, उन्हें क्यों स्थापित किया गया है?
टॉक्सालॉट

@toxalot: बायनेरिज़ और स्क्रिप्ट्स को पूर्ण पथ का उपयोग करके स्पष्ट रूप से कहा जाता है।
बनंगुइन

1
@ बानंगुइन तो अगर किसी के पास बैश और जीएनयू उपयोगिताओं को स्थापित किया गया था (लेकिन पीएटीएच में नहीं), तो वे स्क्रिप्ट का उपयोग कर सकते थे यदि वे इसे संपादित करते हैं findऔर जो भी अन्य जीएनयू-विशिष्ट उपयोगिताओं का मैंने उपयोग किया था? जाहिर है, कि इंस्टॉलर स्क्रिप्ट के लिए उपयोगकर्ता के अनुकूल नहीं होगा। लेकिन मैं सिर्फ दूसरों के लिए GitHub पर कुछ डालने के बारे में सोच रहा हूं अगर वे ऐसा चाहते हैं। मुझे परवाह नहीं है कि यह हर प्रणाली के लिए पोर्टेबल नहीं है। मैं बस यह नहीं चाहता कि यह कई प्रणालियों पर बेकार हो ।
टॉक्सालॉट

1
@toxalot: हाँ जो काम कर सकता था। यदि आप FIND=/opt/gnu/dispicable/bin/findअपनी स्क्रिप्ट की शुरुआत में ऐसा कुछ डालते हैं और फिर अपनी स्क्रिप्ट के ${FIND}बजाय का उपयोग करते हैं तो findआप लोगों को उनके स्थापित पथ डालने के लिए एक (!) जगह देते हैं और अपनी स्क्रिप्ट का सही उपकरणों का उपयोग करते हैं।
बनंगुइन

5

तो, पोर्टेबल स्क्रिप्ट लिखना कब महत्वपूर्ण है?

किस प्रकार की लिपियों को यथासंभव पोर्टेबल होना चाहिए?

जब आप उन्हें अपने काम के माहौल के लिए उपयोग कर रहे हैं, और आप अलग-अलग मशीनों पर काम करते हैं (या भविष्य में कर सकते हैं) - और, आप काम करने से पहले अपने उपकरणों को फिर से लिखना नहीं चाहते हैं।

जैसे: एक कचरा लिपि / rmप्रतिस्थापन


मार्क स्टीवर्ट:

... मेरे समस्या निवारण टूलकिट के लिए मुझे लगता है कि मेरे पास केवल vi और Korn खोल होगा। और मैं यूनिक्स के अधिकांश स्वादों पर काम करने वाले आदेशों का उपयोग करने की कोशिश करता हूं।


3
मुझे कुछ "बाश-इस्स्स्स्" पसंद हैं, लेकिन अपनी समस्या निवारण टूलकिट के लिए मुझे लगता है कि मेरे पास केवल vi और Korn खोल होगा। और मैं यूनिक्स के अधिकांश स्वादों पर काम करने वाले आदेशों का उपयोग करने की कोशिश करता हूं। इस तरह मैं एक बीमार प्रणाली पर ट्राइएज करने के लिए तैयार हूं, बिना इस बात की चिंता किए कि पीएस कमांड कैसे व्यवहार करता है, चाहे बैश या पर्ल या पीएचपी हो, या जहां वे हों।
मार्क स्टीवर्ट
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.