2009-06-01 16 views
27

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

कुछ साल पहले माइक्रोसॉफ्ट ने पावरशेल जारी किया, जो बहुत दिलचस्प लग रहा था। क्या लिनक्स शैल में कोई तुलनीय नवाचार चल रहा है?

+9

बैश बनाम आप कौन सी फीचर्स याद करते हैं जो अन्य शैल में उपलब्ध हैं जिन्हें आप अभिनव मानते हैं? अधिक महत्वपूर्ण बात यह है कि क्या आप ऐसी विशेषताएं देखते हैं जो आपको लगता है कि यह करने के लिए जो लिखा गया था, उसे करने में मदद मिलेगी? जैसे मेरे दृष्टिकोण से बैश ऑपरेटिंग सिस्टम संसाधनों तक पहुंचने के लिए एक कमांड लाइन इंटरफ़ेस है, उस बिंदु से आप किस कार्यक्षमता को खो रहे हैं? – stefanB

+0

शायद यह छोटे उपकरणों का उपयोग करने के यूनिक्स दर्शन के भीतर रहने का एक तरीका है जो विशिष्ट चीजों को बहुत अच्छी तरह से करता है (बड़े उपकरणों के विपरीत जो सबकुछ खराब करते हैं)। –

+2

यह कीड़े का एक प्रकार है .. इसे देखभाल के साथ खोलें .. – sybreon

उत्तर

6

आप Pash के माध्यम से लिनक्स पर पावरशेल चला सकते हैं। यह मोनो का उपयोग करता है जिस तरह PowerShell .NET का उपयोग करता है।

8

मैं zsh या fishshell पर एक नज़र डालेगा।

+0

zsh और fishshell के बारे में एक विचार है कि हमें या तो काम पर उपयोग करने की अनुमति नहीं है। और मैं अकेला नहीं लग रहा हूं। तो हालांकि वे अच्छे हैं, वे कार्यस्थल में बाश के रूप में मूल्यवान नहीं हैं, जब तक कि आप अपने लिए चुन सकें। –

+5

लगता है कि शैल बदलना आसान होगा। आपको इसे लॉगिन खोल के रूप में नहीं रखना है, आप इसे लॉग इन करने के बाद इसे चला सकते हैं। – stimms

6

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

अन्य दिलचस्प खोल zsh है, जो कि सीएसएच सहित सभी चीजें होने का प्रयास करता है। चूंकि मैंने कभी भी सीएसएच के लिए कोई बिंदु या उपयोग नहीं देखा है, इसलिए मैं zsh के लिए वकालत करने का सही व्यक्ति नहीं हूं। मैं एक असामान्य असंगतता को इंगित करता हूं: डिफ़ॉल्ट रूप से, zsh में एक चर $varहमेशा एक टोकन तक फैलता है, भले ही इसमें रिक्त स्थान हों। यह व्यवहार अन्य सभी शर्मीले गोले के साथ असंगत है, और यह कभी-कभी असुविधाजनक होता है, लेकिन वास्तव में यह मूल की तुलना में बहुत अधिक समझ में आता है, और यह बहुत सारे उद्धरण का नरक बचाता है।

सीएसएच नौकरी नियंत्रण रखने वाला पहला खोल था, लेकिन मेरे दिमाग में यह (और इसके उत्तराधिकारी) को बाश और क्षीर से हटा दिया गया है।

अंत में, बचाव फ्लॉपी (!) और अन्य स्पार्टन वातावरण के लिए डिज़ाइन किए गए कई छोटे गोले हैं, लेकिन ऐसा लगता है कि आपको उन लोगों में बहुत रुचि नहीं है।

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

+1

ksh (या pdksh) हैक करना बहुत आसान है, वास्तव में आप इसे उसी पंक्ति संपादक और स्वत: पूर्ण पुस्तकालय के विरुद्ध लिंक कर सकते हैं वह बैश उपयोग करता है। जो आप नहीं प्राप्त करेंगे वह POSIX से परे सभी जीएनयू एक्सटेंशन है (यानी बैश 4.0 में सहयोगी सरणी)। किसी भी खोल के साथ, कमांड लाइन पर एक आधुनिक भाषा का उपयोग करने के लिए पार्सर/व्याकरण स्विच करना आसान है। यदि आप "नीली प्रोग्रामिंग भाषा" के लिए Google हैं, तो आप देखेंगे कि बैश में ड्रॉप करना कितना आसान है। –

3

आईआईआरसी, पावरहेल ऑब्जेक्ट ओरिएंटेड है, जबकि अधिकांश यूनिक्स शैल और उपयोगिता टेक्स्ट पर काम करती हैं। उस संबंध में, Squirrel Shell आपको रूचि दे सकता है। मैंने कभी इसका इस्तेमाल नहीं किया है, हालांकि।

20

आपको एहसास है कि bash 4 हाल ही में नई सुविधाओं और भाषा परिवर्धनों के साथ जारी किया गया है?

  • शैल विकल्पों globstar (**/foo) एक पुनरावर्ती खोज, पथ विस्तार के दौरान dirspell फिक्स टंकण त्रुटि है।
  • एसोसिएटिव सरणी, स्ट्रिंग्स के लिए तारों की संख्या, तारों की संख्या केवल जगहों के बजाय।
  • autocd शैल विकल्प cd को सामने रखने के बजाय निर्देशिका पथ टाइप करके निर्देशिकाओं को बदलने की अनुमति देता है।
  • Coprocesses
  • &>> और |& पुनर्निर्देशन ऑपरेटरों कि बेहतर पटकथा सुविधा के लिए मौजूदा builtins में योग के दोनों stdout और stderr
  • भार अनुप्रेषित।

चेक आउट:

3

आप ’ तैयार फिर से करने के लिए तो sh संगतता खोएं, आप पाइथन या टीसीएल जैसे स्क्रिप्टिंग भाषा का उपयोग अपने खोल के रूप में देख सकते हैं। rlwrap बहुत उपयोगी अगर दुभाषिया लाइन संपादन, आदेश इतिहास, पूरा होने, आदि प्रदान नहीं करता है के गोले के बारे में

एक दर्शन है कि वे मुख्य रूप से केवल फ़ाइलें (here is one page that espouses that approach) के साथ प्रक्रियाओं कनेक्ट करने के लिए इस्तेमाल किया जाना चाहिए है सकते हैं। उस ने कहा, लोगों ने उनका उपयोग करके कुछ उल्लेखनीय जटिल सॉफ्टवेयर लिखा है।

7

बैश (और कई अन्य गोले) की कम से कम विशेषताओं में से एक है अपने स्वयं के लोडबेल लिखने की क्षमता है, और खोल उन्हें बिल्टिन के रूप में चलाती है।

चलें 'चालू' लोड करने योग्य बारे में कहते हैं कि .. और आप इसे इस तरह से काम करना चाहते हैं:

on node 123 run some command 
on class nodes run some command 
on all nodes run some command 

... आदि ..

आप कैसे लिखने के लिए पर सरल उदाहरण का अनुसरण कर सकते किसी लोड करने योग्य है, तो/के माध्यम से -f सक्षम/पथ में बनाया गया एक पार्टी के रूप में यह सक्षम/लोड करने योग्य loadable_name

तो हमारे मामले में करने के लिए, पर सक्षम -f/opt/bash/loadables/

पर ... आपके bashrc में , और आपको मिल गया है।

तो, यदि आप अपनी स्पिफी नई भाषा को मूल रूप से समझना चाहते हैं, तो आप एक लोड करने योग्य नाम 'उपयोग' या 'स्विच_to' लिखेंगे, फिर एक निश्चित व्याकरण/रनटाइम लोड करने के लिए पार्सर को संशोधित करें यदि कोई निश्चित वातावरण चर था सेट।

यानी .:

#/bin/bash 

switch_to my-way-cool-language 

funkyfunc Zippy(int p) [[ 
    jive.wassup(p) ]] 

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

देखें/पथ-टू-बैश-स्रोत/उदाहरण/लोडबेल, आप उस काम को उड़ाने में सक्षम हो सकते हैं जहां आप काम करते हैं, क्योंकि आप अभी भी बैश का उपयोग कर रहे हैं।

+2

इस की शक्ति का एक अच्छा उदाहरण रेने रेबे का [लुआ बैश] (http://freshmeat.net/projects/luabash/) है, जो एक लोड करने योग्य है जो एक निर्मित 'लुबाश' को परिभाषित करता है जो लुआ को निष्पादित करता है, और कुछ बुनियादी ढांचे के लिए आगे के निर्माण, और सी जोड़ना। [उदाहरण] (http://svn.exactcode.de/t2/trunk/misc/luabash/example/example.sh) क्या हो रहा है इसके बारे में कुछ विचार देता है। –

+0

@ चार्ल्स - यह वास्तव में एक उत्कृष्ट उदाहरण है! –

1

अगर आप माणिक की तरह, आप भीड़ (माणिक यूनिक्स खोल, आईआरबी नहीं) का उपयोग कर सकते

देखने प्रस्तुति यहाँ

http://www.slideshare.net/adamwiggins/rush-the-ruby-shell-and-unix-integration-library

या आधिकारिक वेबसाइट और उदाहरण

को देखने के लिए http://rush.heroku.com/

2

शैल Scheme Schell की तुलना में अधिक अधिक अभिनव नहीं आते हैं। यूनिक्स कमांड और एक एम्बेडेड अजीब दुभाषिया (निश्चित रूप से योजना में लिखे गए) को चलाने की क्षमता के साथ योजना की सभी शक्तियों को संयुक्त किया गया है। एकमात्र कमी यह है कि इसे 64 बिट लिनक्स पर बनाने के लिए patching का एक छोटा सा बिट चाहिए।

यह बिल्कुल बोर्न-खोल नहीं है, लेकिन यह अलग है। बेशक, आपको योजना सीखना है - बोनस!

संबंधित मुद्दे