क्या विशेषताएं zsh में हैं और बैश से गायब हैं, या इसके विपरीत?


62

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

एक बैश उपयोगकर्ता के रूप में:

  • मुझे क्या सुविधाएँ याद आएगी?
  • और मुझे किन लोगों के लिए देखना चाहिए?


5
@ किसी दिन उन सभी को यहाँ ले जाना अच्छा हो सकता है ... और विलय कर दिया
xenoterracide

जवाबों:


45

अन्य स्टाॅक एक्सचेंज साइटों पर इस विषय पर पहले से ही काफी सक्रियता है। बाश से zsh में स्विच करने का मेरा अनुभव, जहाँ तक याद कर सकते हैं (यह साल पहले था), यह है कि मैं एक भी बात याद नहीं किया। मुझे बहुत फायदा हुआ; यहाँ मुझे लगता है कि मैं सबसे सरल उपयोग कर रहे हैं विशिष्ट विशिष्ट विशेषताएं हैं:

  • जब मैं कभी-कभी bash का उपयोग करता हूं तो zsh फीचर मुझे सबसे ज्यादा याद आता है: zsh में, निर्देशिका को निष्पादित करने का अर्थ है इसे बदलना, बशर्ते आप विकल्प चालू करें। autocdmost

  • एक और बहुत ही उपयोगी विशेषता फैंसी ग्लोबिंग है। चित्रलिपि पात्रों एक सा याद करना मुश्किल है, लेकिन अत्यंत सुविधाजनक (के रूप में, यह अक्सर तेजी से उन्हें देखने के लिए बराबर लिखने के लिए की तुलना में है कर रहे हैं findआदेश)। सरल उदाहरणों में से कुछ:
        foo*~*.bak= मेल खाने वालों foo*को छोड़कर सभी मेल खाते हैं *.bak
        foo*(.)= केवल नियमित मिलान वाले मेल foo*
        foo*(/)= केवल निर्देशिका मिलान foo*
        foo*(-@)= केवल प्रतीकात्मक प्रतीकात्मक लिंक मिलान foo*
        foo*(om[1,10])= = 10 सबसे हाल की फाइलें मिलान foo*
        foo*(Lm+1)= आकार की केवल फाइलें> 1 एमबी = निर्देशिका में और इसके सभी उपनिर्देशिकाएँ, पुनरावर्ती रूप से
        dir/**/foo*foo*dir

  • फैंसी नाम बदलने के लिए, zmvबिलिन काम कर सकता है। उदाहरण के लिए, हर fileको कॉपी करने के लिए file.bak:zmv -C '(*)(#q.)' '$1.bak'

  • बैश और zsh दोनों में एक सभ्य समापन प्रणाली है जिसे स्पष्ट रूप से चालू करना होगा ( . /etc/bash_completionया autoload -U compinit; compinit)। Zsh की बहुत अधिक विन्यास और आम तौर पर कट्टर है।

यदि आप बिना zsh चलाते हैं .zshrc, तो यह एक इंटरैक्टिव मेनू शुरू करता है जो आपको कॉन्फ़िगरेशन विकल्प चुनने देता है। (कुछ वितरण इसे अक्षम कर सकते हैं; उस स्थिति में, चलाएँ autoload zsh-newuser-install; zsh-newuser-install।) मैं अनुशंसित इतिहास विकल्पों को सक्षम करने की सलाह देता हूं, ("नई शैली") को पूरा करने, और "सामान्य शेल विकल्पों" को छोड़कर beep। बाद में, आपके द्वारा खोजे जाने पर अधिक विकल्प कॉन्फ़िगर करें।

² उस समय प्रोग्रामेबल कम्प्लीट करना zsh का किलर फीचर था, लेकिन बैश ने जल्द ही इसे हासिल कर लिया।
⁴ वे सुविधाएँ जो केवल संस्करण 4 में अधिग्रहित की गई हैं (इसलिए अभी भी कई प्रणालियों पर उपलब्ध नहीं हैं) छोटे प्रकार में हैं।


5
बैश 4.0 अब autocdआपके द्वारा ऊपर चर्चा की गई सुविधा का समर्थन करता है। कमांड का उपयोग करके सुविधा को सक्षम करें shopt -s autocd। फिर फीचर आपके द्वारा बताए गए अनुसार काम करता है।
फिलुमिनाती

zsh में अंतर्निहित whereकमांड भी है, कमांड के साथ भ्रमित होने की नहीं which
सिल्डोरेथ

@EdGrimm मुझे लगता है कि GNU और FreeBSD मिल सकता है सब कुछ कर सकते हैं zsh glob क्वालिफायर कर सकते हैं ( -execचयन के साथ चीजों के लिए एक खोल के साथ eऔर उपकरण में एक पाइपलाइन की तरह sortऔर sedके साथ eऔर फिर से लिखने के लिए )। बहुत अधिक निश्चित रूप से, निश्चित रूप से।
ग्लीस

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

11

इसके अलावा डिफ़ॉल्ट टैब पूरा होने से मार से बेहतर है ... उदाहरण के लिए ...

~/.e.d~/.emacs.d/ZAB में TAB का विस्तार होगा , बैश सिर्फ बीप होगा।


यह नहीं था। setoptआप (यदि कोई हो) के लिए क्या गैर-डिफ़ॉल्ट विकल्प का उपयोग करते हैं?

मुझे एहसास हुआ कि मैंने _-.वाइल्डकार्ड के रूप में सेट किया है। zstyle ':completion:*' matcher-list 'm:{a-zA-Z}={A-Za-z}' 'r:|[._-]=* r:|=*' 'l:|=* r:|=*' । देखें stackoverflow.com/q/7906078/311660
ocodo

10

zshआपको मल्टी-लाइन कमांड ( zsh लाइन संपादक देखें ) को संपादित करने देता है , bash नहीं करता है। यदि आप एक ही ट्रिक ( Ctrl-p) आजमाते हैं, तो bash अंतिम कमांड प्राप्त करता है।


2
बैश ऐसा करता है, कम से कम संस्करण 4.2.37 के रूप में; यह अर्धविरामों द्वारा नई लाइनों की जगह लेता है और आपको संपादित करने के लिए एक पंक्ति देता है।
कीथ थॉम्पसन

1
फिर भी उतना अच्छा नहीं। (:
सिल्वरवॉल्फ

8

बैश में बंदरगाहों का उपयोग करने में सक्षम होने की सुविधा है

/dev/tcp/host/port

या

/dev/udp/host/port

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


5
zsh में ztcp बिलिन है, जिसमें bash / dev / tcp की तुलना में अधिक क्षमताएं हैं, जिनमें / dev / udp नहीं है। मैं हालांकि समाज का उपयोग करूंगा।
स्टीफन चेज़लस

2

कौन सा - zsh में बढ़ाया

whichबैश में आदेश केवल एक कमांड के स्थान का पता चलता है।

Zsh whichमें एक की परिभाषा, एक aliasके लिए स्रोत functionऔर एक कमांड का स्थान प्रकट होगा ।

मान लें कि हमारे पास एक शेल उपनाम था:

alias gg='git log'

बैश में अगर हमने पूछा: which ggपरिणाम शून्य होगा

Zsh में: which ggहमें दे देंगे ...

gg: aliased to git log

मान लें कि हमारे पास एक शेल फ़ंक्शन था:

hello() {
    echo "Hello World"
}

बैश में अगर हमने पूछा: which helloपरिणाम शून्य होगा।

Zsh में: which helloहमें दे देंगे ...

hello() {
    echo "Hello World"
}

बैश type(बिलिन) कमांड के माध्यम से समान कार्यक्षमता प्रदान करता है । और सिर्फ नाइटपिक करने के लिए: whichएक बाहरी कमांड है, न कि बैश बिलिन।
टोर्केल ब्योर्नसन-लैंगेन


0

zsh - एक पूर्ण शेल

कई के माध्यम से पढ़ने देखते हैं, zshcontrib(1)एक के दो संस्करणों का पता लगा सकते autoloadसुलभ tetrisखेल (के साथ अन्य ncurses) में zshके साथ प्रतिस्पर्धा में emacs, पूर्णता के लिए (के रूप में वर्णित)।

=

मैं उस =कीवर्ड का उल्लेख करना चाहूंगा , जिसके साथ जलन हो सकती है curl(आमतौर पर ?var=valउनमें URL होता है ; लेकिन यह संभव है unsetopt, मुझे लगता है):

  • q file =less( gentoo) को हल करता हैq file $(which less)

= विचाराधीन कमांड के पूर्ण पथ पर फैलता है।

अन्य अच्छाईयां

अन्य चीजें, दिमाग से बाहर, सही प्रांप्ट हैं RPS1=%d( $PWDशैली में प्रदर्शित करने के लिए ), Alt + H( run-helpयानी। man), Alt + ? ( which-command) vared, और zed( autoloadफ़ंक्शन), Emacs 'मिनीबफ़र-जैसे Alt + Xउन्हें, वैश्विक और प्रत्यय उपनामों के बंधन के बिना विगेट्स निष्पादित करना। विस्तारित इतिहास ट्रैकिंग कमांड पूरा होने की अवधि, -mऔर -regexमैचर्स, शेल एमुलेशन (जैसे csh, के kshसाथ emulate) और autoload run-helpबिल्ट-इन के लिए फ़ाइल स्निपेट के साथ।

विलाप

मुझे लगता है कि सबसे अधिक, यदि नहीं, तो सुविधाओं को एक लंबे समय से पहले लागू किया गया था, और चेंगलॉग के माध्यम से पढ़ना, कोई बड़ा बदलाव और नई सुविधा नहीं है, जो बहुत दुखद है (अब और खोज और खोज करने के लिए कुछ भी नहीं)।

bash(जैसा कि विरोध किया गया है ) और लिनक्स स्पिरिट में अधिक वितरित किया गया प्रतीत होता है ; जैसे ReadLine कार्य करता है और विश्व स्तर पर कीबाइंडिंग (में रखा के रूप में लागू किया जा सकता और ) यदि पार्टी विशेष के द्वारा ओवरराइड नहीं ।readlinezlegnu history~/.inputrc/etc/inputrcbind

निष्कर्ष

मैं व्यक्तिगत रूप से emacs(esp; वर्तमान की?) emacs-noxस्वाद की संभावना से (जैसे) असाधारण सॉफ्टवेयर के लिए प्रेरणा की तरह लगता है zshऔर tmuxइस तरह के कार्यान्वयन में एक उदाहरण के रूप में एक बहुत अच्छा काम किया; लोगों के लिए इसकी कीमत ( Xसर्वर के आधार पर आवश्यकता नहीं / निर्भर करता है) के मूल्य की सराहना की । यूनिक्स शेल पर्याप्त शक्तिशाली है, और इसकी निरंतरता और निरंतरता एक उचित वर्कफ़्लो और उत्पादकता (समग्र कंप्यूटिंग में) के लिए पर्याप्त है।

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