एक बुरी आज्ञा के बाद क्या कारण बनता है?


23

जब आप एक खराब कमांड टाइप कर रहे हों, तो कहें: आप करना चाहते हैं:

$ cd ..
$ ls

लेकिन इसके बजाय आप बहुत तेजी से टाइप करते हैं और अंत में l और s के बीच एंट्री मारते हैं, इसलिए आपको मिलता है:

$ cd ..
$ l
sbash: l: command not found...

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

संपादित करें: रनिंग फेडोरा 16 प्रणाली


आप यह बताना भूल गए कि आप किस ओएस पर हैं।
डैनियल बेक

वाह, आप एलएएस एल से एल एस नहीं करते हैं? :)
डॉटजेओ

जवाबों:


42

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

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

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

यहाँ एक उदाहरण है

# command-not-found installed
$ time pwgen
The program 'pwgen' is currently not installed.  To run 'pwgen' please ask your administrator to install the package 'pwgen'
pwgen: command not found

real    0m0.074s
user    0m0.032s
sys     0m0.040s

# purge command-not-found and restart bash
$ time pwgen
-bash: pwgen: command not found

real    0m0.002s
user    0m0.000s
sys     0m0.000s

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


10
फेडोरा में मेरे मामले में, यह एक पैकेज कहलाता है: PackageKit-command-not-found
Fuu

6

सवाल का हिस्सा था "क्या यह (फेडोरा में) इसे ठीक करने का एक तरीका है?" वहाँ है: अपने .bashrc फ़ाइल के नीचे कमांड जोड़ें

unset command_not_found_handle

आप शायद इसे अपने .bashrc (या इसके करीब) के अंत में करना चाहते हैं क्योंकि आप अपने .bashrc के शीर्ष पर / etc / bashrc या अन्य बैश स्क्रिप्ट चला रहे होंगे।


5

फ़ेडोरा पर, /etc/PackageKit/CommandNotFound.confकॉन्फ़िगरेशन फ़ाइल को बदलकर इस व्यवहार को नियंत्रित किया जा सकता है ।

सेटिंग SoftwareSourceSearch=falseमें देरी से छुटकारा मिलेगा क्योंकि यह पैकेज मैनेजर का उपयोग करके लापता कमांड के साथ पैकेज का पता लगाने की कोशिश नहीं करेगा।

आप MaxSearchTime=2000एक मिलान वापस करने के लिए पैकेज खोज के लिए प्रतीक्षा करने के लिए इच्छुक मिलिसेकंड की संख्या को इंगित करने के विकल्प को बदलने के बजाय एक पैकेज खोज की प्रतीक्षा करेंगे समय को बदल सकते हैं। मुझे लगता है कि 2 सेकंड का डिफ़ॉल्ट किसी भी मैच को वापस करने के लिए पर्याप्त नहीं है और जब आपके पास टाइपो होता है तो बस अवांछित देरी होती है।

या तो MaxSearchTimeउपयोगी आउटपुट प्रदान करने के लिए टकराएं या SoftwareSourceSearchपूरी तरह से देरी को खत्म करने के लिए अक्षम करें।

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