बैश इतिहास खोज, आंशिक + ऊपर-तीर


145

मैंने खोज की है, लेकिन इस पर कुछ नहीं मिला। मैं एक टर्मिनल का उपयोग करके बैश में एक कार्यक्षमता की तलाश कर रहा हूं।

जब मैं एक डेबियन सिस्टम पर एक उपयोगकर्ता था, और एक मित्र ने मुझे एक सुविधाजनक इतिहास खोज सुविधा के साथ स्थापित किया (मुझे विश्वास है कि मैंने tcsh का उपयोग किया था), जहां मैं पिछली कमांड की शुरुआत टाइप करूंगा, ऊपर-तीर मारा, और यह आंशिक स्ट्रिंग के आधार पर एक खोज करेगा।

जैसे अगर मेरा इतिहास है:

./script.pl
./script.pl arg1
cat output
cat output | grep yada

और मैं टाइप करता हूं ., और ऊपर-तीर दबाता हूं , यह मुझे दिखाएगा ./script.pl arg1:। इसे फिर से दबाएं और यह दिखाएगा ./script.pl, आदि।

बहुत पसंद है यह एक grep.bash_history पर प्रदर्शन करेगा । क्या यह कार्यक्षमता प्राप्त करने का एक तरीका है?



1
@ मार्सेल लगता है कि यह एक ही जवाब हो सकता है, मैंने देखा कि खोज में है, लेकिन यह मेरे सवाल से कनेक्ट नहीं किया, iPython और शेल कीवर्ड के साथ।
TLP

इस तरह लगता है - github.com/zsh-users/zsh-autosuggestions
SLM

जवाबों:


196

निम्नलिखित पंक्तियाँ अपने में रखें ~/.inputrc:

## arrow up
"\e[A":history-search-backward
## arrow down
"\e[B":history-search-forward

के साथ शुरू होने वाली लाइनें #टिप्पणियाँ हैं। मुझे याद नहीं है कि पिछड़ा क्या है और आगे क्या है। इसके साथ प्रयोग करें। हो सकता है कि आपको आगे और पीछे स्विच करना पड़े।


थोड़ी पृष्ठभूमि की जानकारी:

बैश प्रॉम्प्ट को संभालने के लिए रीडलाइन का उपयोग कर रहा है। ~/.inputrcरीडलाइन के लिए कॉन्फ़िगरेशन फ़ाइल है। ध्यान दें कि यह रीडलाइन लाइब्रेरी का उपयोग करके अन्य सॉफ़्टवेयर में भी प्रभावी होगा, उदाहरण के लिए IPython

रीडलाइन के बारे में अधिक जानकारी के लिए बैश मैनुअल पढ़ें । वहां आप इतिहास से संबंधित रीडलाइन कमांड भी पा सकते हैं ।

तीर कुंजी के लिए भागने के कोड प्राप्त करने के लिए आप निम्नलिखित कार्य कर सकते हैं:

  1. catएक टर्मिनल में शुरू करें (बस cat, आगे कोई तर्क नहीं)।
  2. कीबोर्ड पर कीज टाइप करें, आपको ^[[Aअप एरो और ^[[Bडाउन एरो जैसी चीजें मिलेंगी ।
  3. बदलें ^[के साथ \e

1
महान, लेकिन यह समाधान ctrl-left / ctrl-right शॉर्टकट को अक्षम करता है।
ईयाल

क्या कोई मुझे बता सकता है कि मैं इसे कैसे बना सकता हूं
हितेश कुमार

@ एलस्माना, मैं अकेले बिल्ली के हिस्से के लिए अतिरिक्त अंक दूंगा
माइक डी

@ ईयाल को सुरक्षित रखते हुए, किसी को भी सलाह है कि मेरे पास यह कैसे हो सकता है लेकिन ctrl-left / ctrl-right शॉर्टकट्स को संरक्षित करें?
काटें

6
सभी डिफॉल्ट जोड़ को संरक्षित करने के लिए $include /etc/inputrc, अधिमानतः पहली पंक्ति पर।
तूलियो कासग्रेन्डे

30

निम्नलिखित सामग्री के साथ /etc/profile.d/ में 644 मोड के साथ setup_readline.sh नाम की एक फ़ाइल बनाएँ, लॉगिन करें और अपनी पसंदीदा कुंजियों की जाँच करें:

bind '"\e[A": history-search-backward'
bind '"\e[B": history-search-forward'

मुझे लगता है कि ऐसा करने का सबसे अच्छा तरीका है। ज्यादातर अगर आप शेफ, कठपुतली, आदि जैसे विन्यास प्रबंधन प्रणालियों का उपयोग कर रहे हैं

और सिस्टम कॉन्फ़िगरेशन अभी भी अछूता नहीं है!


3
अजीब तरह से ~ / inputrc मेरे लिए काम नहीं किया - लेकिन इन आदेशों को .bash_profile में डाल दिया।
जो

1
.inputrc मेरे होम फोल्डर में मौजूद नहीं है और मैं इस तरह की सेटिंग्स को .bashrc में रखना पसंद करता हूं, इसलिए मैं अपनी सेटिंग्स के लिए बस एक फाइल ले जा सकता हूं। तो यह शायद एक बेहतर जवाब है तो एक स्वीकार कर लिया।
शीतल शाह

.inputrc मेरे लिए fabulously काम करता है, लेकिन मेरे लोड करने के बाद नहीं screen। अजीब बात है, अन्य .inputrc शॉर्टकट काम करते हैं, लेकिन ये नहीं। इसलिए मैं अब दोनों समाधानों का उपयोग करता हूं।
Orwellophile

यह सुपर-सहायक है जब, उदाहरण के लिए, आप चीजों को करने के लिए एक सर्वर में लॉग इन करते हैं और इनमें से बिल्ली को याद कर रहे हैं और सर्वर पर ~ / .inputrc को संपादित और पुनः लोड नहीं करना चाहते हैं।
danmactough 20

13

Ctrl + R आपको इस प्रकार की कार्यक्षमता प्रदान करेगा। एक आंशिक कमांड टाइप करना शुरू करें और यह पुराने के साथ आएगा जिसे आप ऊपर और नीचे तीर के साथ नेविगेट कर सकते हैं। अधिक जानकारी: http://www.nuxified.org/blog/ctrl_r_in_the_bash_shell


2
आपके जवाब के लिए धन्यवाद। हाँ, मैंने कोशिश की है कि, लेकिन मुझे यह थोड़ा सा लगता है ... चुस्त। यह मुझे आंशिक के साथ शुरू होने वाली कमांड के माध्यम से स्क्रॉल करने की अनुमति नहीं देगा, यह केवल पहले दिखाता है। यह चरित्र के लिए संपूर्ण कमांड भी खोजता है, जो कि बेकार है।
टीएलपी

5
@ टीएलपी, बार-बार मारनाCtrl+r
अकोस्टैडिनोव

4

"~ / .Inputrc" के बारे में lesmana के उत्तर को पूरा करने के लिए जिसे मुझे अपने भरोसेमंद 14.04 के तहत बनाना चाहिए, "~ / .bashrc" में सत्यापित / जोड़ें (मेरी "~ / .bashrc" में पहली पंक्ति पहले से मौजूद है)।

shopt -s histappend  
PROMPT_COMMAND='history -a'  

यह पहले से ही फ्रांसीसी में https://doc.ubuntu-fr.org/terminal?&#pour_completer_les_commandes_a_partir_de_l_historique में समझाया गया है ।


2
यह कमांड मूल रूप से सत्र समाप्त होने की प्रतीक्षा करने के बजाय तुरंत इतिहास फ़ाइल में कमांड को जोड़ने का निर्देश देती है। यह उपयोगी है अगर आपके पास बहुत सारे टर्मिनल हैं और एक में इतिहास को ढीला नहीं करना चाहते हैं, लेकिन अन्यथा आवश्यक नहीं है। digitalocean.com/community/tutorials/…
शीतल शाह

2

शायद आप https://github.com/dvorka/hstr को आज़माना चाहते हैं जो बैश इतिहास की सरल और मल्टी-लाइन सरल फ़िल्टरिंग प्रदान करता है जो एक मैट्रिक्स के आधार पर (जब, कितनी बार और लंबाई कमांड के मायने रखती है) - आप उपयोग कर सकते हैं तीर कुंजी आसानी से इतिहास नेविगेट करने के लिए:

यहां छवि विवरण दर्ज करें

यह आसानी से और / या के लिए बाध्य हो सकता हैCtrl-rCtrl-s


0

निम्न समाधान उपरोक्त उल्लिखित दृष्टिकोणों में से कुछ को जोड़ता है और विस्तारित करता है: निम्न व्यवहार को प्राप्त करने के लिए अपनी ~/.bash_aliasesफ़ाइल में निम्नलिखित पंक्तियों को जोड़ें (कोई ज़रूरत नहीं है ~/.inputrc):

  1. CTRL + UP और CTRL + DOWN दबाकर इतिहास में (केवल एक ही उपसर्ग के साथ प्रविष्टियाँ) ले जाएँ। यह यूपी और अकेले के माध्यम से पूरे इतिहास में ऊपर / नीचे जाने की मानक कार्यक्षमता के लिए सह-अस्तित्व में हो सकता है
  2. CTRL + RIGHT और CTRL + LEFT दबाकर कमांडलाइन में अगले / पिछले शब्द पर जाएं
bind '"\e[1;5A":history-search-backward'
bind '"\e[1;5B":history-search-forward'
bind '"\e[1;5C":forward-word'
bind '"\e[1;5D":backward-word'

source ./bash_aliasesपरिवर्तनों को लागू करने के लिए शेल (या रन ) में फिर से लॉगिन करें ।

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