यह पता लगाने के लिए कॉन्फ़िगर करना कि क्या कोई कमांड मौजूद नहीं है, स्थापना का सुझाव दें


22

क्या यह zshदिखाने के लिए शेल को कॉन्फ़िगर किया जा सकता है कि bashजब कोई कमांड मौजूद नहीं होता है, तो इसी तरह से:

kahless:~$ sysv-rc-conf  
The program 'sysv-rc-conf' is currently not installed.  You can install it by typing:  
sudo apt-get install sysv-rc-conf

ZSH प्रॉम्प्ट के बजाय:

[kahless /home/teward]% sysv-rc-conf  
zsh: command not found: sysv-rc-conf

नोट मैं स्वयं प्रॉम्प्ट को बदलना नहीं चाहता, लेकिन मैं परिणाम zsh: command not foundको बैश-जैसे The program 'progname' is currently not installed. You can install it by typing:या उससे समान आउटपुट से बदलना चाहता हूं ।

क्या यह ZSH के साथ संभव है?

जवाबों:


22

यह सुविधा पैकेज द्वारा प्रदान की गई है । उबंटू इसे डिफ़ॉल्ट रूप से स्थापित करता है, और इसे बश में डिफ़ॉल्ट रूप से सक्रिय बनाता है, लेकिन zsh में नहीं। बस इस पंक्ति को अपने में जोड़ें :command-not-found आदेश-स्थापित-पाया नहीं~/.zshrc

. /etc/zsh_command_not_found

यह समाधान काम कर गया। क्या आउटपुट में एक लाइन से छुटकारा पाने का एक तरीका है, फिर? (ध्यान दें कि यह उत्पादन में शामिल किया गया था, के रूप में था The program 'progname' is currently not installed. You can install it by typing:हिस्सा) zsh: command not found: sysv-rc-conf
थॉमस वार्ड

@EvilPhoenix: कहीं भी (एक समारोह या कुछ स्पष्ट रूप से अंदर छोड़कर) करेगा। मैं zsh: command not foundलाइन को हटाने के बारे में नहीं जानता ।
गिलेस एसओ- बुराई को रोकना '

ठीक है, मैं शायद "कमांड नहीं मिला भाग" को अनदेखा कर सकता हूं। क्योंकि सुझाव है स्थापना हिस्सा अच्छा है, और knokw करने के लिए अपने अच्छा है कि यह क्योंकि एक कमांड फ्लॉप अस्तित्व आया;)
थॉमस वार्ड

के मोड़ करने के लिए command not foundसंदेश आप जोड़ सकते हैं exitसमारोह के अंत में command_not_found_handlerमें /etc/zsh_command_not_found
जेन्स_बो

4

ध्यान दें कि यदि आप फ़ाइल साझा कर रहे हैं तो आप एक चेक जोड़ना चाहते हैं यदि आप अपने .zshrc को उन वितरणों में साझा कर रहे हैं जिनमें /etc/zsh_command_not_foundफ़ाइल नहीं है :

[[ -a "/etc/zsh_command_not_found" ]] && . /etc/zsh_command_not_found

इसके अलावा, यदि आप ओह-माय-ज़श का उपयोग कर रहे हैं , तो पहले से ही एक प्लगइन है command-not-found, जिसे आप अपने pluginsचर में जोड़ सकते हैं जो समान कार्य करता है।


1

यदि आप ओह-माय-ज़श का उपयोग कर रहे हैं , तो आप इसके बजाय अपने अंदर "प्लगइन्स" की तलाश कर सकते हैं .zshrc

जोड़े command-not-foundप्लगइन autoload को प्लग इन सूची से (इस प्लगइन पहले से ही डिफ़ॉल्ट रूप से स्थापित किया गया है)।

ऐशे ही:

# Which plugins would you like to load? (plugins can be found in ~/.oh-my-zsh/plugins/*)
# Custom plugins may be added to ~/.oh-my-zsh/custom/plugins/
# Example format: plugins=(rails git textmate ruby lighthouse)
# Add wisely, as too many plugins slow down shell startup.
plugins=(git command-not-found)

0

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

यहां बताया गया है कि आप कैसे शुरुआत कर सकते हैं, उम्मीद है कि zsh समान है।

mpandit@mpandit-ubuntu:~$ command_not_found_handle() {echo 'Handler: Command not found!';}
mpandit@mpandit-ubuntu:~$ ddaadada
'Handler: Command not found!
mpandit@mpandit-ubuntu:~$

यह डेबियन और उबंटू के बैश में अंतर नहीं है। अंतर यह है कि उबंटू command-not-foundडिफ़ॉल्ट रूप से स्थापित होता है और डेबियन नहीं करता है। यह सुविधा पहले से ही zsh के लिए मौजूद है, यह सिर्फ डिफ़ॉल्ट रूप से सक्रिय नहीं है।
गिलेस एसओ- बुराई को रोकना '

यह मानता है कि कमांड_नोट_फाउंड सिस्टम में शामिल नहीं है। हालाँकि यह वह नहीं है जिसकी मुझे तलाश है। यह कहने के बाद कि, @ गिल्स का उत्तर इस बात की पंक्तियों के साथ है कि मैं क्या देख रहा हूँ, मैं यह पता लगाने की कोशिश कर रहा हूँ कि वह उस पंक्ति को शामिल करने के लिए जहाँ वह निर्दिष्ट है।
थॉमस वार्ड

इसे command_not_found_handlerzsh में कहा जाता है। Zsh.sourceforge.net/Doc/Release/Command-Execution.html देखें ।
मिकेल

0

यदि आप इस व्यवहार को 100% समय नहीं देना चाहते हैं, तो आप कुछ ऐसा कर सकते हैं जैसे:

/usr/lib/command-not-found urxvt

या अपने $ PATH में कमांड-नहीं-मिला


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