बैश का उपयोग कब करें और पर्ल / पायथन / रूबी का उपयोग कब करें? [बन्द है]


78

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

स्क्रिप्ट के लिए बश पर पर्ल / पायथन / रूबी का उपयोग करने के बारे में आप कैसे निर्णय लेते हैं? मुझे नहीं लगता कि रूबी के साथ एक init स्क्रिप्ट समझ में आती है, लेकिन ईमेल खातों को जोड़ने वाली थोड़ी लंबी स्क्रिप्ट के बारे में कैसे?


1
यदि आप इसे या तो उपयोग कर सकते हैं, तो क्या यह वास्तव में मायने रखता है? पसंद केवल तभी दिलचस्प है जब परिणामस्वरूप स्क्रिप्ट किसी भी मतभेद को प्रस्तुत करती है। उदाहरण के लिए, निष्पादन का समय बहुत भिन्न हो सकता है (ईमेल खाते के मामले में समस्या नहीं)।
डेनिस

जवाबों:


44

एक ऐसी समस्या को देखते हुए, जिसे आप संभाल सकते हैं, आप उसी का उपयोग करना चाहेंगे जिसके साथ आप सबसे अधिक सहज हों। अंत में, बहुत सारे छोटे विवरण हैं, और केवल अनुभव आपको उन्हें देखना सिखा सकते हैं।

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

हालाँकि, आपके बीच के अंतर केवल एक बार आपके बेल्ट के तहत स्क्रिप्टिंग अनुभव की एक स्वस्थ मात्रा है। मेरा सुझाव है कि आप एक भाषा चुनें और इसे अगले तक ले जाने से पहले इसे सीमित करें। आप एक शेल स्क्रिप्ट में बहुत कुछ कर सकते हैं, अधिकांश लोग स्वीकार करेंगे। कोई भी भाषा उतनी ही कठिन होती है जितनी आप उसे बनाना चाहते हैं। आपके द्वारा इसमें कुछ बातें लिखने के बाद, हर भाषा आपके लिए "आसान" है।

यदि आप लिनक्स में रहते हैं, तो शेल से परिचित होना जल्दी से भुगतान करता है, इसलिए शायद आप उसी से शुरू करना चाहते हैं। यदि आपको कोई ऐसा कार्य मिलता है जो शेल स्क्रिप्ट में हल करना असंभव या अव्यवहारिक है, तो कुछ और उपयोग करें।

इसके अलावा, ध्यान रखें कि शेल स्क्रिप्टिंग सीखना बहुत सरल है। इसकी वास्तविक शक्ति अन्य कार्यक्रमों में निहित है, जैसे कि awk, sed, tr, et al।


मुझे रूबी के साथ बैश स्क्रिप्टिंग के साथ काफी कुछ अनुभव मिला है, लेकिन मुझे कभी-कभी पता नहीं है कि क्या उपयोग करना है। उस समय में व्यक्तिगत पसंद के आधार पर चुनना मूर्खतापूर्ण लगता है। लेकिन आप सही हैं, मैं खुद से पूछूंगा कि मैं क्या करना चाहता हूं और नौकरी के लिए सबसे अच्छा उपकरण चुनूं।
फुललिब

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

बस GNU Coreutils पैकेज (जैसे tr, सॉर्ट, यूनीक) में छोटे प्रोग्राम का उपयोग करके उन्हें जोड़ना चाहते थे और उन्हें पाइपिंग करके बहुत सारे कार्यों को पूरा करना संभव है।
GMaster

58

टीएल; डीआर - केवल एक बेहतर भाषा (यदि यह पहले से उपलब्ध नहीं है) स्थापित करने के लिए बैश का उपयोग करें , अन्यथा आप अपरिवर्तनीय, कीमती मानव समय बर्बाद कर रहे हैं। यदि आप इसे बिना गलती के हाथ से कमांड लाइन पर कर सकते हैं, तो बैश / शेल के साथ स्क्रिप्ट न करें।

यह 2015 है, इसलिए मैं निम्नलिखित पर विचार करूंगा:

  1. स्मृति उपरि

    • बैश की तुलना में रूबी / पायथन रनटाइम मेमोरी ओवरहेड छोटी होती है (साझा पुस्तकालयों के कारण), जबकि कोई भी संभवत: एक गैर-तुच्छ बैश स्क्रिप्ट को बनाए नहीं रख सकता है (अर्थात> 100 लाइनों के साथ) - इसलिए मेमोरी उपयोग एक कारक नहीं है
  2. स्टार्टअप का समय

    • रूबी / पायथन स्टार्टअप एक छोटा सा धीमा हो सकता है, लेकिन संभावना है कि आप एक पूर्ण लूप में प्रति सेकंड 100 बार पूर्ण रूबी / पायथन प्रक्रियाओं को चलाने नहीं जा रहे हैं (यदि आपके पास उन प्रकार की आवश्यकताएं हैं, तो बैश / शेल है वैसे भी बहुत अधिक उपरि और आपको संभवतः C / C ++ पर छोड़ना होगा
  3. प्रदर्शन

    • रूबी / पायथन में लगभग सभी विशिष्ट डेटा क्रंचिंग तेज हो जाएंगे - या कम से कम तुलनीय (या, आपको C / C ++ / Haskel / OCaml / जो भी हो) की आवश्यकता है
    • निष्पादन (या यहां तक ​​कि उत्पादकता) में वास्तविक प्रदर्शन / अड़चन लगभग कभी भी "बैश / शेल का उपयोग करने की कमी" नहीं होगी (यहां तक ​​कि स्टार्टअप के लिए उबंटू स्विचिंग डैश दिखाता है कि बैश वास्तव में समस्या कैसे है - और एक व्यस्त बॉक्स शायद एकमात्र उपयोग मामला है है, क्योंकि वहाँ है 'बैश' और 'vi' से ज्यादा कुछ नहीं लिख सकते हैं और कोड को चलाने के लिए, और वहाँ अक्सर जोड़ने के लिए / डाउनलोड करने या कुछ और की दुकान) कोई रास्ता नहीं है
    • काम करने के लिए अन्य प्रक्रियाएं चलाना (जैसे कि sed / awk / grep) वास्तव में मेमोरी में लाइव ऑब्जेक्ट पर एक विधि को कॉल करने की तुलना में एक परिमाण धीमा है
  4. उत्पादकता

    • रूबी / पायथन में "वास्तविक" तरीकों, मापदंडों, चर और अपवादों का उपयोग करने की तुलना में बैश / शेल में गलतियां करना बहुत आसान है
    • चंचलता मुख्य धारा है, जबकि बैश के पास इसके लिए कोई समर्थन नहीं है (इकाई परीक्षण क्षमताओं में कमी, पुस्तकालयों, OO, प्रतिरूपकता, अस्तर, आत्मनिरीक्षण, लॉगिंग, मेटाप्रोग्रामिंग; लगभग असंभव कुछ को तोड़ने के बिना प्रतिक्षेपक के लिए;
    • अन्य गोले के साथ भी बहुत सी असंगतताएं, लघु पर्यावरण चर पूरी तरह से एक पटकथा को तोड़ सकते हैं (और कठपुतली जैसे कुछ महत्वपूर्ण देव-ऑप उपकरण शंग लाइनों को अनदेखा करते हैं और महत्वपूर्ण खोल चर को फिर से लिखते हैं), जबकि रूबी / पायथन अच्छी तरह से परिभाषित अपेक्षाकृत चिकनी प्रवासन यहां तक ​​कि प्रमुख संस्करण परिवर्तनों के लिए पथ
    • एक नई भाषा सीखने में शेल-विशिष्ट मुद्दों (विशेष रूप से - चर नाम, कोई बूलियन, कोई अपवाद नहीं, आदि) के कारण वैकल्पिक रूप से डिबगिंग शेल स्क्रिप्ट का एक अंश लगता है।
    • यहां तक ​​कि स्टार्टअप स्क्रिप्ट एक बारूदी सुरंग है ( विशेष रूप से क्योंकि वे सिस्टम स्टार्टअप के दौरान विफल हो सकते हैं ), और बैश के साथ हाल की सुरक्षा खामियों को देखते हुए, आप सादे सी (अच्छे पुस्तकालयों के साथ) का उपयोग करके बेहतर हो सकते हैं - हां, सी को संकलन, कॉन्फ़िगरेशन आदि की आवश्यकता है। , लेकिन यहां तक ​​कि एक साधारण शेल स्क्रिप्ट के लिए भंडार की आवश्यकता हो सकती है, फिर संस्करण, फिर वैसे भी पैकेजिंग।
    • जो कुछ भी sed / awk / grep के साथ उपलब्ध है, वह संभवतः पहले से ही Ruby / Python में बनाया गया है - इसके बिना कोई निर्भरता, या प्लेटफार्मों पर उन टूल के संस्करणों के बीच "अंतर" (इसलिए यदि यह आपके सेटअप पर काम करता है )
  5. नौकरी की सुरक्षा
    • एक नौकरी हासिल करने की बात क्या है जो आपको पसंद नहीं है? (जब तक आप उन सभी घंटों को हार्ड-टू-डिबग खर्च करना पसंद करते हैं, लेकिन तुच्छ-से-शेल शेल बग बनाना)

मुझे लगता है कि अगर आपके पास रूबी / पायथन स्थापित है तो बैश / शेल का उपयोग करने का कोई कारण नहीं है।

और संभवत: रूबी / पायथन को स्थापित करने के लिए पहले स्थान पर एक बैश स्क्रिप्ट की भी आवश्यकता नहीं है (व्यस्त बॉक्स के अपवाद के साथ, कुछ सिस्टम उपकरण वैसे भी पायथन / पर्ल पर निर्भर हैं)।

और हर बार जब आप एक शेल स्क्रिप्ट लिखते हैं, तो आप वास्तव में ऐसा करने का अभ्यास कर रहे होते हैं - बजाय कुछ अधिक शक्तिशाली / उत्पादक सीखने के।

आजकल लोग बैश का उपयोग क्यों करते हैं? क्योंकि यह एक भयानक, कठिन-से-ब्रेक की आदत है। पहले कुछ मिनटों के बाद एक स्क्रिप्ट शायद ही कभी "हमेशा के लिए समाप्त हो जाती है" - कोई फर्क नहीं पड़ता कि लोगों को इस तरह से सोचने की कितनी दृढ़ता है। साथ ही "यह इस स्क्रिप्ट की अंतिम बग" है।

निष्कर्ष: बैश / खोल का उपयोग केवल जब तुम बिल्कुल रहे हैं मजबूर (जैसे करने के लिए ~/.bashrc,, बिजीबॉक्स) क्योंकि यह लगभग है कभी नहीं "इस काम के लिए सही उपकरण" आजकल।


28

मैं बैश का उपयोग करता हूं जब मेरा प्राथमिक ध्यान फ़ाइल हैंडलिंग पर होता है। इसमें फ़ाइलों को स्थानांतरित करना, कॉपी करना और उनका नाम बदलना शामिल हो सकता है, साथ ही अन्य कार्यक्रमों के इनपुट के रूप में फ़ाइलों का उपयोग करना या फ़ाइलों में अन्य प्रोग्राम के आउटपुट को संग्रहीत करना शामिल हो सकता है। मैं शायद ही कभी बैश कोड लिखता हूं जो वास्तव में किसी फ़ाइल की सामग्री की जांच करता है या फ़ाइल में लिखने के लिए आउटपुट उत्पन्न करता है; मैं अन्य कार्यक्रमों (जो मैं पर्ल या अजगर में लिख सकता हूं) के लिए छोड़ देता हूं जो मैं बैश के माध्यम से लॉन्च करता हूं।

मैं पर्ल और अजगर का उपयोग करता हूं, जब मेरा प्राथमिक ध्यान फाइलों से डेटा पढ़ने, उस डेटा को किसी तरह से संसाधित करने और फाइलों के आउटपुट लिखने पर होता है। अगर मैं अपने आप को (पर्ल में) systemकमांड, बैक टिक्स या (अजगर में) subprocessमॉड्यूल का बहुत अधिक उपयोग कर पाता हूं , तो मैं स्क्रिप्ट को बैश में लिखने पर विचार करता हूं। दूसरी ओर, मैं कभी-कभी एक बैश स्क्रिप्ट में इतनी अधिक कार्यक्षमता जोड़ना शुरू कर देता हूं कि अंततः इसे बैश सीमित, कार्य, डेटा संरचनाओं, आदि के लिए बैश के सीमित (तुलना करके) समर्थन के बजाय पर्ल / अजगर में फिर से लिखना अधिक समझ में आता है। ।


2
जब भी फ़ाइल पढ़ने / पाठ पीढ़ी की आवश्यकता होती है, तो मैंने bash पर t0 जमानत का भी इस्तेमाल किया, लेकिन मैं =~द्वारा समर्थित ऑपरेटर को सीखने के बाद [[ ]]मुझे साधारण फ़ाइल पढ़ने के लिए कुछ Bash से प्यार हो गया है
Freedom_Ben

16

मुझे इस ब्लॉग पोस्ट में निर्धारित मापदंड पसंद हैं ।

  • यदि इसमें पास होने के लिए कोई तर्क नहीं हैं, तो यह संभवतः एक शेल स्क्रिप्ट है।
  • यदि नियंत्रण तर्क के लिए बहुत कुछ नहीं है (एक लूप के अलावा या यदि / तो) यह शायद एक शेल स्क्रिप्ट है।
  • यदि कार्य कमांड-लाइन निर्देशों का स्वचालन है, तो यह निश्चित रूप से एक शेल स्क्रिप्ट है।

8

मैं इस पर्ल बनाम बैश विश्लेषण उपयोगी पाया ...

http://blogs.perl.org/users/buddy_burden/2012/04/perl-vs-shell-scripts.html

सुविधा के लिए, मैं उस लेखक के 1 के सारांश को कॉपी कर रहा हूं जब bash बेहतर निष्कर्ष है और 2) जब perl बेहतर निष्कर्ष है ...

जब बैश इज बेटर ...

  • नौकरी की विफलता
  • बाहर निकलता है
  • प्रसंस्करण नौकरी उत्पादन लाइनें
  • यहाँ दस्तावेज़
  • फ़ाइल समकक्षों
  • फ़ाइल टाइमस्टैम्प तुलना
  • टिल्ड विस्तार

जब पर्ल बेहतर है ...

पर्ल अभी भी अधिकांश अनुप्रयोगों के लिए बकवास से बाहर बकवास करता है। कारणों में मैं पर्ल को शामिल कर सकता हूं (लेकिन यह सीमित नहीं है):

  • यह और तेज होने वाला है। मुख्य रूप से क्योंकि मुझे वास्तव में उन बहुत सी चीजों के लिए नई प्रक्रियाएं शुरू नहीं करनी हैं जिन्हें मैं करना चाहता हूं (बेस्नाम और डाइरैम सबसे स्पष्ट उदाहरण हैं, लेकिन आम तौर पर कट, grep, सॉर्ट और wc सभी को अच्छी तरह से समाप्त किया जा सकता है)।
  • बैश में स्ट्रिंग हैंडलिंग सबसे अच्छा है, और पूरे $ IFS चीज सुपर-क्लंकी है।
  • शेल स्क्रिप्ट में सशर्त जीत हो सकती है।
  • शेल स्क्रिप्ट में कोटेशन एक बुरा सपना हो सकता है।
  • बैश का केस स्टेटमेंट साधारण मामलों (एनपीआई) से परे वांछित होने के लिए बहुत कुछ छोड़ देता है।
  • बैश चूसना में ऐरे। बैश में हैश (आपकी बैश को संभालने के लिए बिल्कुल नया है) उन्हें और भी कठिन चूसना।
  • एक बार फ़ाइलों या कमांड आउटपुट को संसाधित करने के बाद मैं ऊपर सूचीबद्ध साधारण मामले से परे हो जाता है, पर्ल वास्तव में धूम्रपान को रोकना शुरू कर देता है।
  • CPAN।

तो ऐसा नहीं है कि बैश जल्द ही किसी भी समय पर्ल के लिए पदभार संभालने वाले हैं। लेकिन मैं अभी भी इन सभी वर्षों के बाद, पाता हूं कि कई बार एक साधारण शेल स्क्रिप्ट कभी-कभी एक सरल पर्ल स्क्रिप्ट की तुलना में सरल हो सकती है। जैसा कि मैं कहता हूं, मैं अन्यथा समझाने के सभी प्रयासों का स्वागत करता हूं। लेकिन, फिर, आपके टूलबॉक्स में कुछ अलग उपकरण होने के साथ कुछ भी गलत नहीं है।


दिलचस्प बात यह है कि रूबी में, अंकों के सभी (?) लागू नहीं होते हैं, क्योंकि रूबी के पास at_exit (), realpath (), Expand_path (), स्टेट (), हेरेडोस्क और अपवाद ( fail "error" unless system("foobar")) हैं।
Cezary Baginski

5

मेरे अनुभव में बैश बनाम अजगर विकास के समय और लचीलेपन के बीच का व्यापार है। एक समस्या के लिए एक अल्पविकसित समाधान आमतौर पर एक बश लिपि में अधिक तेज़ी से स्थापित किया जा सकता है, जितना कि यह एक पाइथन लिपि में हो सकता है।

पाइथन आपको अपने समाधान की संरचना के बारे में अधिक सोचने के लिए प्रेरित करेगा जो समकक्ष बैश स्क्रिप्ट से होगा। पायथन में बैश स्क्रिप्ट की तुलना में अधिक अभिव्यंजक शक्ति है और इसलिए यह समय के साथ बेहतर पैमाने पर और संशोधित होता है। यह सामान्य रूप से अधिक पठनीय भी रहता है।

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


4

बैश एक यूनिक्स शेल है जिसमें एक स्क्रिप्टिंग भाषा शामिल है। बल्कि कमांड प्रोसेसर है। आप जिस तरह से कमांड चलाते हैं, उसे आप वास्तव में चलाते हैं।

पर्ल / रूबी / पायथन सामान्य प्रयोजन की भाषाएं हैं।

जब आप एक शेल स्क्रिप्ट चाहते हैं, तो आप बैश का उपयोग करते हैं

यदि आप अधिक जटिल कार्य चाहते हैं या शेल से संबंधित नहीं हैं। अजगर आदि का प्रयोग करें।

मैं वास्तव में इन भाषाओं की तुलना कभी नहीं करूंगा। अजगर आदि पोर्टेबल होते हैं। इन्हें आप कहीं भी चला सकते हैं। बैश केवल यूनिक्स के लिए है।

अजगर आदि के पास लाखों कार्यों के समाधान के लिए पुन: प्रयोज्य पुस्तकालय हैं।

यदि आप पूछें तो यह लगभग समान है। "पेंट का उपयोग कब करें और फ़ोटोशॉप का उपयोग कब करें"

ईमेल संसाधित करने के लिए, मैं रूबी का फिर से उपयोग करूंगा, क्योंकि इसमें बहुत सारे पुन: प्रयोज्य पुस्तकालय हैं।

लेकिन सबसे अच्छा तरीका होगा बैश और माणिक का गठबंधन। यह सही होगा। जैसे आप रूबी और बैश स्क्रिप्ट में एक ईमेल प्रोसेसिंग स्क्रिप्ट बनाते हैं, उस रूबी स्क्रिप्ट को लागू करते हैं और अन्य कॉमन्स डीएस चलाते हैं।

इसलिए जब भी आपको कमांड प्रोसेसर की आवश्यकता हो तो आप बैश का उपयोग करें। आप यूनिक्स कमांड चलाते हैं और उन्हें नियंत्रित करते हैं।

7 वर्षों के बाद अद्यतन (मार्च 2019)

हालांकि मेरे जवाब का मुख्य हिस्सा नहीं बदला था लेकिन मैं यह बताना चाहूंगा।

बैश एक शक्तिशाली पटकथा भाषा भी है। पाठ प्रसंस्करण के लिए यह एक पूर्ण कानूनी विकल्प हो सकता है।

कृपया नीचे mkaito की टिप्पणी पढ़ें। वे सभी पूरी तरह से सच हैं।


1
बैश की स्क्रिप्टिंग सब्मिट किसी भी सामान्य प्रयोजन की स्क्रिप्टिंग भाषा की तरह सामान्य उद्देश्य है। सामान्य कार्यक्रमों को मिश्रण में मिलाएं, और आप अपने आप को सभी स्क्रिप्टिंग जरूरतों के 90% के लिए कवर कर लें।
mitoito

1
bash एक कमांड प्रोसेसर है, इसलिए इसकी शक्ति अन्य लिपिक कमांड और प्रोग्राम को अपनी स्क्रिप्ट में चलाने के लिए है। जैसे आपने sed आदि का उल्लेख किया है। वह निश्चित भाषा चुनने के लिए कह रहा है
bakytn

1
शेल वास्तव में एक शानदार प्रोग्राम लॉन्चर है, लेकिन यह स्क्रिप्टिंग क्षमताओं से बहुत परे है। मेरा सुझाव है कि आप कुछ वास्तविक शेल स्क्रिप्टिंग सीखें।
मिकिटो

मैं फर्श पर सो सकता हूं लेकिन मैं इसे बिस्तर पर ही करूंगा। उन भाषाओं की तुलना नहीं की जा सकती है, जिनके पास उद्देश्यपूर्ण उद्देश्य हैं।
बाकिटन

2
ठीक है, अगर बैश फर्श है, तो हास्केल की तरह कुछ एक नेलबोर्ड होना चाहिए :-)
mkaito

1

रूबी, पायथन, या पर्ल जैसी उच्च स्तरीय सामान्य प्रयोजन भाषाओं की तुलना में बैश, क्श, ज़श, श, और मछली जैसी शैल लिपियाँ कुख्यात हैं। हालांकि एक शेल स्क्रिप्ट अपने जीवन को समान सामान्य उद्देश्य स्क्रिप्ट की तुलना में छोटी फ़ाइल के रूप में शुरू कर सकती है, आश्चर्य की बात यह है कि बहुत सारे रक्षात्मक रैपिंग कोड, जैसे कि set -euo pipefailसख्त मोड को सक्षम करने के लिए।

Exampmle के लिए, अधिकांश शेल भाषाएँ शेल स्क्रिप्ट में लाइनें निष्पादित करना जारी रखती हैं, तब भी जब कोई कमांड विफल हो जाती है। इसके विपरीत, एक सामान्य प्रयोजन की भाषा पहली त्रुटि पर तुरंत विफल हो जाती है, और अक्सर लोड की जाती है, जिसके परिणामस्वरूप सुरक्षित है, यहां तक ​​कि प्रकाश जटिलता की लिपियों में अधिक अनुमानित व्यवहार।


1

अत्यधिक पक्षपाती लेख।

मुझे लगता है कि डिबग करने के लिए यह सब कठिन नहीं है। पायथन अक्सर बहुत अधिक कठोर होता है, जबकि बैश आपको बहुत रचनात्मक बनाने की अनुमति देता है। यदि आप एक अच्छे आउट-ऑफ-द-बॉक्स विचारक हैं, तो आप बैश पसंद करेंगे।

मैं हजारों फ़ाइलों में लाखों डीएनए अनुक्रमण रीडिंग पर बैश स्क्रिप्ट चलाता हूं, और यह मुझे ठीक काम करता है। और हर कोई जो कहता है, उसके विपरीत, C ++ में स्क्रिप्ट के समान संस्करण वास्तव में बहुत तेजी से नहीं चलते हैं (कुछ मिनटों में उन्हें अलग करते हैं)।

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


0

"लामा पुस्तक" से

पर्ल निम्न-स्तरीय प्रोग्रामिंग (जैसे C या C ++ या असेंबली) और उच्च-स्तरीय प्रोग्रामिंग (जैसे "शेल" प्रोग्रामिंग [जैसे, bash]) के बीच के अंतर को भरने की कोशिश करता है । निम्न-स्तरीय प्रोग्रामिंग आमतौर पर लिखना कठिन और बदसूरत है, लेकिन तेज और असीमित है; किसी दिए गए मशीन पर अच्छी तरह से लिखे गए निम्न-स्तरीय कार्यक्रम की गति को हरा पाना मुश्किल है। और वहाँ बहुत कुछ तुम वहाँ नहीं कर सकते है। उच्च-स्तरीय प्रोग्रामिंग, दूसरे चरम पर, धीमी, कठोर, बदसूरत और सीमित होती है; कई चीजें हैं जो आप शेल या बैच प्रोग्रामिंग के साथ बिल्कुल नहीं कर सकते हैं यदि आपके सिस्टम पर कोई कमांड नहीं है जो आवश्यक कार्यक्षमता प्रदान करता है। पर्ल आसान है, लगभग असीमित है, ज्यादातर तेज़ है, और बदसूरत है।


0

अंगूठे के नियम के रूप में, सरल भाषा का उपयोग करें जिसमें आपके कार्य के लिए पर्याप्त अच्छा प्रदर्शन है। और इसकी विशिष्टताएं केवल वे विस्तार तक ही सही मायने में उपयोगी हैं।

और पठनीयता के बारे में, बैश भयानक है अगर आपकी प्रोग्रामिंग शैली भयानक है। यदि आप कोड को वहां फेंक देते हैं, तो यह अस्पष्ट हो जाता है।

लेकिन अगर आप कम से कम कार्यों में कोड को विभाजित करते हैं , और चीजों को सरल समझने योग्य तरीके से नाम देते हैं, तो यह सबसे स्पष्ट भाषा है जो आप पा सकते हैं। क्योंकि यह बहुत चर्चित है।

नमूने के रूप में, यह बैश में मेरा नवीनतम कोड है। ध्यान दें कि यह समझना कितना आसान है और इसे टाइप करना है:

#! /bin/bash


mainFunction () {
    file="${1}"

    checkFile "${file}"
    executeFile "${file}"
}


changeToThisProgramDir () {
    cd "$( dirname "${BASH_SOURCE[0]}" )"
}


checkFile () {
    file="${1}"

    checkFileNotEmpty "${file}"
    checkFileExist "${file}"
    checkFileIsExe "${file}"
}


checkFileExist () {
    file="${1}"

    if [ ! -f "${file}" ]; then
        echo "The file doesn't exist: ${file}" >&2
        echo "If the name was correct either type: exeCute \"pathToYourExeFile\""
        echo "Or just open with exeCute from the file manager"
        exit 1
    fi
}


checkFileIsExe () {
    file="${1}"
    mime=$(fileMime "${file}")

    if [ "${mime}" != "application/x-dosexec" ]; then
        echo "Not an exe: ${file}" >&2
        exit 1
    fi
}


checkFileNotEmpty () {
    file="${1}"

    if [ "${file}" == "" ]; then
        echo "No file specified" >&2
        echo "Either type this: exeCute \"pathToYourExeFile\""
        echo "Or just open with exeCute from the file manager"
        exit 1
    fi
}


execute () {
    function="${1}"
    command="${2}"
    error=$(eval "${command}" 2>&1 >"/dev/null")

    if [ ${?} -ne 0 ]; then
        echo "${function}: ${error}" >&2
        exit 1
    fi
}


executeFile () {
    file="${1}"
    type=$(fileType "${file}")

    if [ "${type}" == "MS-DOS executable" ]; then
        execute "executeFile" "dosbox \"${file}\" -forcescaler normal2x -exit -fullscreen"
    else
        execute "executeFile" "wine \"${file}\""
    fi
}


fileMime () {
    file="${1}"

    attributes=$(file --brief --mime "${file}")
    IFS=";" read -r -a attributes <<< "${attributes}"
    echo "${attributes[0]}"
}


fileType () {
    file="${1}"

    attributes=$(file --brief "${file}")
    IFS="," read -r -a attributes <<< "${attributes}"
    echo "${attributes[0]}"
}


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