क्या मैं बैश में टैब ऑटो-कम्प्लीट केस-असंवेदनशील बना सकता हूं?


144

उबंटू के टर्मिनल केस-संवेदी ऑटो-पूर्ति का उपयोग करता है, क्योंकि मुझे लगता है कि लिनक्स के लिए उम्मीद की जाएगी।

लेकिन मुझे लगता है कि अक्सर एक केस-असंवेदनशील का उपयोग करना अधिक सुविधाजनक होगा, बजाय इसके कि आप नाम शुरू करते समय सटीक रहें, और संभवतः अतिरिक्त झूठी सकारात्मकता के लायक होगा। क्या इस व्यवहार को बदलना संभव है?


बहुत अच्छा सवाल है। प्रयोज्य उपकरण के रूप में, टैब-पूरा होना सामान्य रूप से कंप्यूटर सिस्टम के समान सख्त नहीं होना चाहिए जब यह नामकरण की चीजों की बात आती है।
मास्टरएक्सिलो

जवाबों:


169

bashवर्तमान उपयोगकर्ता के लिए केस-असंवेदनशील बनाने के लिए:

टर्मिनल में निम्न शेल स्क्रिप्ट चलाएँ:

# If ~/.inputrc doesn't exist yet: First include the original /etc/inputrc
# so it won't get overriden
if [ ! -a ~/.inputrc ]; then echo '$include /etc/inputrc' > ~/.inputrc; fi

# Add shell-option to ~/.inputrc to enable case-insensitive tab completion
echo 'set completion-ignore-case On' >> ~/.inputrc

एक नया शेल शुरू करें (टर्मिनल को फिर से खोलें)।

परिवर्तनों को व्यवस्थित बनाने के लिए:

# add option to /etc/inputrc to enable case-insensitive tab completion for all users
echo 'set completion-ignore-case On' >> /etc/inputrc
# you may have to use this instead if you are not a superuser:
echo 'set completion-ignore-case On' | sudo tee -a /etc/inputrc

जानकारी के लिए, देखें man bash। हां, यह एक लंबा पृष्ठ है, लेकिन बैश एक कुछ जटिल कार्यक्रम है, और यदि आप संबंधित अनुभाग पर जाने के लिए "केस-असंवेदनशील" के लिए सिर्फ उस पृष्ठ को खोजना चाहते हैं। लोग आमतौर पर एक समय में एक विकल्प या एक स्क्रिप्ट को एक बार में सीखते हैं और सभी बारीकियों में महारत हासिल करने में लंबा समय लेते हैं। आपकी रुचि भिन्न हो सकती है।


धन्यवाद। मैं उपयोगकर्ता-विशिष्ट / गैर-व्यवस्थापक अनुकूल समाधान की सराहना करता हूं। लगता है कि इको लाइन ने काम कर लिया है, लेकिन अब मुझे लगता है कि कर्सर को स्थानांतरित करने के लिए Ctrl-Left / Right का उपयोग करने की क्षमता खो गई है। इसके अलावा, >>अधिक सुरक्षित होगा >?
mwfearnley

सामान्य तौर पर >> अधिक सुरक्षित होने जा रहा है, मेरी गलती, मैं मान रहा था कि आपके पास एक ~ / .inputrc नहीं है। मैंने noclobber =) को भी निश्चित किया है कि आपकी तीर कुंजी काम क्यों नहीं कर रही है, मैं इसे दोहरा नहीं सकता। आप ~ / .inputrc को हटा सकते हैं और एक नया शेल शुरू कर सकते हैं।
पैंथर

हाँ, अगर मैं इसे हटा देता हूं तो यह फिर से काम करता है .. linuxfromscratch.org/blfs/view/5.1/postlfs/inputrc.html के अनुसार नया inputrc वैश्विक को पछाड़ सकता है?
mwfearnley

2
पवित्र बकवास, मैंने इसे / etc / inputrc में कॉपी किया और मैं "i" को अब टाइप नहीं कर सकता और जब मैं "e" टाइप करता हूँ तो यह "ssssssssss [..]" को कंसोल में रखता है .. बेहतर @ emtin4 से समाधान का उपयोग करें
लुका स्टेब

2
@LucaSteeb मैंने उसे भी मारा, लेकिन फिर महसूस किया कि यह पूरा ब्लॉक आपके .inputrc में नहीं डाला जाएगा, लेकिन एक बार टाइप किया गया। केवल $include /etc/inputrcऔर set completion-ignore-case onआपके ~ ..inputrc फ़ाइल में होना चाहिए।
क्रिस

49

एक टर्मिनल खोलें और नीचे कमांड टाइप करें:

echo set completion-ignore-case on | sudo tee -a /etc/inputrc

पास वर्ड दर्ज करें। टर्मिनल को पुनरारंभ करें।

यदि किसी मामले में आप असंवेदनशील मामले को हटाना चाहते हैं, तो set completion-ignore-caseलाइन को हटाकर / edit / inputrc फ़ाइल को संपादित करें ।

बस इतना ही।


ठीक है, मैंने स्पष्ट किया कि आपके लिए। बैश के बारे में जानने में थोड़ा समय लगता है, लेकिन खोज, पढ़ना और पूछना जारी रखें। linuxcommand.org एक लोकप्रिय शुरुआत है;)
पैंथर

3
यदि एक से अधिक उपयोगकर्ता हैं, तो यह इसे सभी के लिए बदल देता है, जो वांछित व्यवहार हो भी सकता है और नहीं भी
Walter Tross

2
अब तक का सबसे सीधा और सरल जवाब यहाँ
वर्कबाइट

सरल और स्पष्ट उत्तर
डेवलपर

11

मुझे पता है कि यह प्रश्न बहुत पुराना है लेकिन जब तक मुझे कुछ याद नहीं आ रहा है, मुझे लगता है कि मेरे पास एक सुपर सरल उपाय है यदि आप बैश का उपयोग कर रहे हैं।

echo "bind 'set completion-ignore-case on'" >> ~/.bashrc

या बस अपने पसंदीदा टेक्स्ट एडिटर का उपयोग करके लाइन जोड़ें। अपने बैश सत्र को पुनरारंभ करें और आनंद लें।


2
खैर, आप कुछ याद कर रहे हैं: ~/.inputrcरीडलाइन द्वारा पढ़ा जाता है, जो कि इस पूर्णता को प्रदान करने के लिए बैश का उपयोग करता है। रीडलाइन का उपयोग अन्य कार्यक्रमों द्वारा भी किया जाता है, इसलिए, आमतौर पर इसे सेट करने के लिए, ~/.inputrcजैसा कि सुझाव दिया गया है कि उत्तर बेहतर होगा।
मुरु

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

उत्तम। अच्छी तरह से याद करने की एकमात्र चीज bind 'set completion-ignore-case on'नई लाइन में जाना चाहिए.bashrc
विसेंट

3

आप GNU रीडलाइन के लिए कॉन्फ़िगरेशन चर सेट करके ऐसा कर सकते हैं, जो कि एक इंटरैक्टिव शेल में इनपुट को संभालता है।

चर की जरूरत है completion-ignore-case, और सीधे आपके बैश सत्र में सेट किया जा सकता है:

bind "set completion-ignore-case on"

इसे सभी उपयोगकर्ताओं के लिए सक्षम करने के लिए इसे उपयोगकर्ताओं की ~/.inputrcफ़ाइल, या सिस्टम में डालकर भविष्य के सभी बैश सत्रों के लिए सक्षम किया जा सकता है /etc/inputrc। यह रीडलाइन के लिए आरंभीकरण फ़ाइल है।

लेकिन ध्यान दें कि यदि आप बनाते हैं ~/.inputrc, तो यह सिस्टम कॉपी को ओवरराइड करेगा । (मेरे लिए इसके कारण मुझे कुछ महत्वपूर्ण मैपिंग खोनी पड़ीं, जैसे कि Ctrl-Left/ Rightआप देख सकते हैं कि कौन-कौन से लोग /etc/inputrcफ़ाइल का उपयोग कर रहे हैं।)
इस समस्या को ठीक करने का तरीका लाइन $include /etc/inputrcको सबसे ऊपर रखना है ~/.inputrc, जैसे:

$include /etc/inputrc

set completion-ignore-case on

परिवर्तनों को लागू करने के लिए, बैश या पुनः लोड करें पुनः आरंभ करें rcrc , उदाहरण के लिए Ctrl+x, के साथ Ctrl+r

ReadLine और inputrc बारे में अधिक जानकारी में पाया जा सकता man bashहै और man 3 readline

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