जैश की तुलना में बैश की अनूठी विशेषताएं


67

मैं काफी समय से एक zsh उपयोगकर्ता रहा हूँ (उस tsh से पहले और उस csh से पहले)। मैं इसके साथ काफी खुश हूं, लेकिन सोच रहा था कि क्या बाश की कोई आकर्षक विशेषताएं हैं जो zsh में मौजूद नहीं हैं। और इसके विपरीत, क्या zsh फीचर्स हैं जो bash में मौजूद नहीं हैं। मेरा वर्तमान अनुभव यह है कि बैश बेहतर है:

  • यदि आप पहले से ही इससे परिचित हैं और नया वाक्य-विन्यास सीखना नहीं चाहते हैं।
  • यह डिफ़ॉल्ट रूप से सभी * nix मशीनों पर मौजूद होने वाला है, जबकि zsh एक अतिरिक्त स्थापित हो सकता है।

यहां एक धार्मिक लड़ाई शुरू करने की कोशिश नहीं की जा रही है, यही कारण है कि मैं केवल उन विशेषताओं की तलाश कर रहा हूं जो केवल एक गोले में मौजूद हैं।


10
ऐसी विशेषताएं कैसे हैं जो एक या दूसरे व्यक्तिपरक के लिए अद्वितीय हैं? मैं ईमानदारी से एक फुलवारी की तलाश नहीं कर रहा हूं और उस गोले को पसंद करने के लिए एक या दूसरे की परिचितता एक अच्छा कारण है।
टिम

जवाबों:


40

zsh वल्कन्स के लिए है। ;-)

गंभीरता से: bash 4.0 में कुछ विशेषताएं हैं जो पहले केवल zsh में पाई जाती हैं, जैसे ** ग्लोबिंग:

% ls /usr/src/**/Makefile

के बराबर है:

% find /usr/src -name "Makefile"

लेकिन स्पष्ट रूप से अधिक शक्तिशाली है।

मेरे अनुभव में बैश का प्रोग्राम पूरा होना zsh की तुलना में थोड़ा बेहतर है, कम से कम कुछ मामलों के लिए (उदाहरण के लिए योग्यता के लिए डेबियन पैकेज को पूरा करना)।

बैश है Alt + .सम्मिलित करने के लिए!$

zsh has expansion of all variables, so you can use e.g.

% rm !$<Tab>

for this. zsh can also expand a command in backtics, so

% cat `echo blubb | sed 's/u/a/'`<Tab>

yields

% cat blabb

I find it very useful to expand rm *, as you can see what would be removed and can maybe remove one or two files from the commmand to prevent them from being deleted.

Also nice: using the output from commands for other commands that do not read from stdin but expect a filename:

% diff <(sort foo) <(sort bar)

From what I read bash-completion also supports completing remote filenames over ssh if you use ssh-agent, which used to be a good reason to switch to zsh.

Aliases in zsh can be defined to work on the whole line instead of just at the beginning:

% alias -g ...="../.."
% cd ...

8
बैश में, C-M-e"खोल-विस्तार लाइन", विस्तार होगा जो करने के लिए cat `echo blubb | sed 's/u/a/'` करने के लिए cat blabbऔर echo $SHELLकरने के लिए echo /bin/bashमेरे मामले में। इसके अलावा, C-x *"ग्लोब-एक्सपेंशन-वर्ड", जो विस्तार करेगा rm *
विक्टर

16

मैं यह बताना चाहूंगा कि FreeBSD, OpenBSD, या NetBSD पर डिफ़ॉल्ट रूप से बैश स्थापित नहीं है, और यह Solaris 10 पर डिफ़ॉल्ट रूप से भी स्थापित नहीं है (OpenSolaris ने इसे डिफ़ॉल्ट के रूप में स्थापित किया है), पिछली बार मैंने AIX का उपयोग किया था, और या एचपी-यूएक्स सर्वर इसे डिफ़ॉल्ट रूप से स्थापित नहीं किया गया था।

इसके अलावा, OpenSolaris / bin / sh पर bash नहीं है। यह ksh है। एक सॉफ्टवेयर कुली के रूप में मेरे पास सबसे बड़ा मुद्दा यह है कि मानने वाले लोग / बिन / श bash हैं और यह बैश विस्तारित सिंटैक्स स्वीकार करेगा। जबकि अधिकांश लिनक्स वितरण पर ऐसा लगता है कि यह मामला कहीं और नहीं है और यह वास्तव में कष्टप्रद है।


6
हाँ आप सही है। काश, इन सभी विक्रेताओं को यकीन है कि अतिरिक्त पैकेज के रूप में बैश स्थापित करना बहुत आसान है। स्क्रिप्ट में / बिन / श शुद्धता के लिए आवश्यकता को इंगित करने के लिए +1।
kubanczyk

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

12

हालांकि मैं एक बैश उपयोगकर्ता हूं, मुझे zsh के फीचर्स काफ़ी अच्छा लगता है: RPS1।

याद है:

  • PS1: बाएँ संरेखित संकेत
  • RPS1: सही एलाइनमेंट प्रॉम्प्ट

नमूना:

जैसे कुछ का उपयोग करते समय

PS1=’%B(%h) %m%#%b 
RPS1=’(%20<…<%~)'

आपको बाईं ओर अपना संकेत मिलता है और वर्तमान निर्देशिका दाईं ओर धकेल दी जाती है। यह तब भी गायब हो जाता है जब वर्तमान लाइन बहुत लंबी हो रही होती है! यह इसलिए है क्योंकि RPS1 को कम प्राथमिकता देने के लिए zsh काफी स्मार्ट है।

आप इस उदाहरण का स्क्रीनशॉट http://imgur.com/OAZhC पर देख सकते हैं ।


9

Zsh में वर्तनी सुधार है। यदि आप एक पत्र (या अधिक) बंद कर रहे हैं, तो यह पता लगाएगा कि आपका क्या मतलब है।

इसमें अधिक मजबूत टैब पूर्णता भी है, जो मुझे पसंद है।

Zsh में एक इंटरेक्टिव कॉन्फिग यूटिलिटी है जो इसे सेट करने के लिए है कि आपको कैसे पसंद है।

कुछ गति परीक्षणों का कहना है कि zsh तेज है, लेकिन मैंने कोई अंतर नहीं देखा है।


1
डैश का एक स्ट्रिप्ड डाउन संस्करण जो केवल अपनी विशेषताओं का एक सबसेट का समर्थन करता है, और इसे स्क्रिप्ट में उपयोग करने के लिए डिज़ाइन किया गया है, जिसे तेज़ चलना चाहिए (स्टार्टअप वाले, उदाहरण के लिए) डैश है।
Chucky

zshयहां तक ​​कि ड्वोरक कीबोर्ड उपयोग के लिए 'एक अक्षर बंद' मिस्टिप के लिए अनुमति देने के लिए एक सेटिंग है।
vgoff

6

मैं किसी भी bash फीचर्स के बारे में नहीं जानता जो zsh सपोर्ट नहीं करता है। Zsh का डिज़ाइन लक्ष्य किसी भी सुविधाओं को शामिल करना शामिल करता है जो बैश जोड़ता है।

मैं अभी भी zsh के बजाय बैश का उपयोग करता हूं। मैं शायद ही कभी सम्मोहक सुविधाओं के बारे में आता हूं जो zsh का समर्थन करता है कि बैश नहीं करता है। वर्षों से कभी-कभी होने वाली समस्याओं के साथ, या कुछ विशेष प्रकार के सिस्टेम पर मौजूद नहीं होने के कारण, यह संक्रमण बनाने लायक नहीं है।

मैं अंत में प्रत्येक यूनिक्स प्रणाली पर एक ही शेल का उपयोग कर सकता हूं, यह उन विशेषताओं के लिए नहीं है जो मैं कभी उपयोग नहीं करूंगा।

Zsh में मौजूद विशेषताएं जो बैश में मौजूद नहीं हैं, वे ज्यादातर प्यारे लगते हैं, लेकिन वे नहीं जो दिन-प्रतिदिन के आधार पर मायने रखते हैं।


3

बैश में कई विशेषताएं हैं जो केवल zsh में हुआ करते थे। अब आपके पास 'bash aswell' के साथ 'स्मार्ट टैब पूरा' हो सकता है, जैसा कि किसी भी हाल के ubuntu उपयोगकर्ता ने खोजा है।


1

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


मुझे लगता है कि आप मतलब है कि आप उन लोगों को zsh से याद करेंगे, AFAIK के बाद से आपके द्वारा बताई गई हर चीज zsh में शामिल है? (लेकिन क्या आपको यकीन है कि वे सभी बैश से अनुपस्थित हैं? यह मुझे आश्चर्यचकित करेगा।) किसी भी दर पर, जो आपके उत्तर को स्पष्ट कर देगा, क्योंकि बैश / ज़ेड बाड़ के दोनों किनारों पर उत्तर देने वाले लोग हैं। साथ ही, यह उपयोगी होगा यदि आप इस बात का उदाहरण देंगे कि उन विशेषताओं में से प्रत्येक आपके शेल जीवन को कैसे आसान बनाती है।
आइकनोकॉस्ट

0

मैं vi मोड समर्थन के कारण zsh का प्रशंसक हूं, लेकिन मुझे पता चल रहा है कि यह बहुत व्यापक रूप से उपयोग नहीं किया जाता है। मुझे लगता है कि मैंने पढ़ा है कि zsh अन्य गोले से लोकप्रिय विशेषताओं को लेना पसंद करता है और उन्हें संयोजित करता है (ताकि bash के लिए विशिष्ट चीजें और csh के लिए विशिष्ट चीज दोनों zsh में उपलब्ध हैं)।

किसी ने यह भी कहा कि मैं zsh का उपयोग करके अपने geek कारक को फ्लेक्स कर रहा हूं, लेकिन मैं उस अफवाह की पुष्टि या खंडन नहीं कर सकता।


5
और हां, बैश में vi-mode सपोर्ट भी है।
पीजेड

@ मिलनर: क्या आप बता सकते हैं कि किस तरह का vi मोड सपोर्ट zsh में है जो बैश में नहीं है? यदि आप बस कमांड लाइन पर -o vi करने की क्षमता का मतलब है, तो यह स्पष्ट रूप से दोनों में है। यदि zsh में कुछ विस्तारित समर्थन है, तो क्या आप स्पष्ट रूप से वर्णन कर सकते हैं कि यह क्या है और यह क्या जोड़ता है?
आइकनोकॉस्ट

-1

लोकप्रियता, #bash 430 उपयोगकर्ता। #zsh 123 उपयोगकर्ता। मेरा मानना ​​है कि zsh वेबसाइट में अन्य गोले के साथ zsh की अच्छी तुलना है। zsh में बेहतर vi मोड सपोर्ट है।


2
शून्य में vi-mode कैसे बेहतर है? मैं एक बैश उपयोगकर्ता हूं और मेरे पास vi- मोड है, इसलिए मैं यह जानना चाहूंगा कि क्या स्विच करने में कोई लाभ है।
पीटमैन

1
@ptman: zsh के प्रॉम्प्ट को मोड (इन्सर्ट / नॉर्मल) बताने के लिए बनाया जा सकता है। Readline ऐसा नहीं कर सकता। प्रॉमिस अधिक लचीला होने के साथ-साथ आपके पास सिंटैक्स हाइलाइटिंग आदि हो सकता है!
unperson325680

@progo: आह! बहुत अच्छा। अब मैं बस zsh में vi मोड का उपयोग शुरू कर सकता हूं। यह अब तक emacs मोड के साथ चिपके रहने के मेरे कारणों में से एक है।
आइकनोकॉस्ट

@ उस छोटे वृद्धि के कारण मुझे गोले स्विच करने का कारण था।
unperson325680

-1

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


1
मैंने यह कोशिश की, if [[ $test = "test" ]]; then echo "success"; else echo "failure"; fiदोनों कमांड लाइन और एक स्क्रिप्ट पर, और इसने दोनों मामलों में उम्मीद के मुताबिक काम किया। तो ऐसा लगेगा कि आपके पास अपने तथ्य सीधे नहीं हैं।
आइकनोकॉस्ट

यह इस बात पर निर्भर करता है कि आपने क्या / बिन / श के रूप में स्थापित किया है। यदि / बिन / शश है, तो आप सही हैं। अन्यथा, बैश के पास यह लाभ नहीं है। यदि zsh / bin / sh है, तो zsh को यह लाभ है। सभी अलग-अलग गोले जो / बिन / श प्रदान कर सकते थे, को देखते हुए, मैं व्यक्तिगत रूप से केवल शेल स्क्रिप्टिंग के लिए आपके द्वारा इच्छित शेल का उपयोग करने की सलाह देता हूं, ताकि इसकी अनुपस्थिति किसी स्पष्ट सुराग के साथ एक मुद्दे पर इंगित हो, बजाय विचित्र व्यवहार के कि कैसे कोई सुराग के साथ। हल।
एड ग्रिम
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.