BASH के साथ "स्क्रॉल" करने के बाद एक पिछली कमांड तक ... फिर इस इतिहास में अगले पर कैसे जाएं?


59

क्षमा याचना, यह शीर्षक सबसे सुरुचिपूर्ण नहीं है जो मैंने कभी तैयार किया है।

लेकिन मुझे लगता है कि बहुत से लोगों ने इस पर आश्चर्य किया होगा, और मेरा सवाल एक धोखा हो सकता है ... सभी मैं कह सकता हूं कि मैंने इसे नहीं पाया है।

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

तो आपको 30 कमांड वापस मिल सकती है ... और आप इसे चलाते हैं। और फिर आप कमांड चलाना चाहते हैं जो मूल रूप से इसके बाद आया था ... क्या ऐसा करने का एक तड़क-भड़क वाला तरीका है? या कैसे BASH में धाराप्रवाह करते हैं?

जवाबों:


96

कमांड को Ctrl+ के साथ चलाने के oबजाय Enterइतिहास से कमांड चलाएगा और फिर बैश इतिहास के सामने लौटने के बजाय अगले एक को कतार में खड़ा करेगा।


2
मैं सिर्फ NetBD पर एक xterm में चलने वाले अपने बैश में यह कोशिश करता हूं, और यह काम नहीं करता है! क्या ऐसी सेटिंग्स हैं जो इसे प्रभावित कर सकती हैं? मेरे पास कोई .inputrc फ़ाइल नहीं है। रीडलाइन (3) के लिए मैनुअल पेज में सह का उल्लेख नहीं किया गया है।
रियाल्टो

@ रियाल्टो क्या आप viलाइन संपादन (साथ सक्षम set -o vi) या का उपयोग कर रहे हैं emacs? क्योंकि Ctrl-Oजहां तक ​​मैं बता सकता हूं पूर्व के साथ काम नहीं करेगा।
बी लेयर

: ... लेकिन इस आदेश का उपाय किया जा सकता है bind "\C-o":operate-and-get-next(या बाद सब कुछ जोड़ने bindके लिए ~/.inputrc)
बी लेयर

1
मुझे पता चला कि मेरी समस्या क्या है: ^ ओ को फ्लश आउटपुट चरित्र (लिनक्स पर समर्थित नहीं) के रूप में लिया गया है, और सक्रिय होने के दौरान रीडलाइन इसे अक्षम नहीं करता है। मैंने एक साधारण पैच की आपूर्ति की, लेकिन बैश और रीडलाइन मेंटेनर रखता है कि यह ए बग नहीं है। मैं असहमत हूं। सूची देखें। Orgu.org/archive/html/bug-readline/2018-01/msg00004.html
Rhialto

19

जॉन रेनहोल्ड का जवाब बहुत अच्छा है, लेकिन एक और अधिक शक्तिशाली समाधान है जो मैं सुझाऊंगा। मेरे पास जॉन के जवाब में एक गोत्र के बारे में एक टिप्पणी है, लेकिन मेरे पास पर्याप्त प्रतिष्ठा नहीं है कि मैं सीधे टिप्पणी करने में सक्षम हूं, इसलिए @Jon Reinhold, यदि आप इसे पढ़ते हैं, तो कृपया नीचे मेरी टिप्पणी को संबोधित करें।

बैश में एक कमांड शामिल है fc, जो बैश इतिहास सूची के पैरामीटर लाइन नंबर के रूप में लेता है। यह तब पाठ के रूप में उन पंक्तियों के साथ आपके डिफ़ॉल्ट संपादक को खोलता है। उस बिंदु पर, आप वैकल्पिक रूप से लाइनों को संपादित कर सकते हैं। फिर, जब आप संपादक से बाहर निकलते हैं, तो बैश उन पंक्तियों को निष्पादित करता है!

आप जो संपादन करना चाहते हैं, उसका एक उदाहरण सभी के लिए संलग्न है, लेकिन अंतिम पंक्ति कुछ "," -p "अगला ..." पढ़ें। इससे प्रत्येक पंक्ति को निष्पादित करने और जारी रखने से पहले आपको संकेत मिलेगा।

जॉन रेनहोल्ड के लिए टिप्पणी: महान उत्तर, लेकिन आपको इसे योग्य बनाना चाहिए क्योंकि यदि उपयोगकर्ता ने शामिल करने के लिए बैश चर HISTCONTROL सेट किया है erasedups, तो प्रदर्शन करने C-oके बाद उपयोगकर्ता भ्रमित हो जाएगा क्योंकि इतिहास में अपेक्षित अगले आदेश के बजाय, यह प्रदर्शित किया जाएगा। प्रदर्शित किया जाएगा। ऐसा इसलिए है क्योंकि बैश ने निष्पादित कमांड के मूल उदाहरण को हटा दिया है, और इस तरह सभी कमांड बाद में एक लाइन, यानी स्थानांतरित हो गए हैं। इतिहास सूची में एक से कम सूचकांक संख्या।


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

3
@mikerodent नहीं। तो ऐसा होता fcहै कि दोनों ही Ctl-oऔर पूर्ववर्ती हैं bash। (इस उत्तर के विपरीत यह भी कम उपयोगी नहीं है।)
कुबंज़िक

1
यह मुद्दा erasedupsस्पष्ट रूप से एक बैश बग है ( इस स्थिति के लिए प्रावधान हो सकता है)। हालांकि जानकर अच्छा लगा।
एलेक्सिस

2
@kubanczyk यह बहस तक है। यदि यह एक जटिल, जटिल कमांड है, तो यह तय करने की आवश्यकता के आधार पर कि कमांड को अपडेट करने के लिए मेरी पसंद के संपादक का उपयोग करना मेरे लिए बहुत जल्दी होगा। यह आसान भी होगा।
प्रातः

14

अपने वांछित व्यवहार को पूरा करने का एक और तरीका यह होगा कि आप बैश रीडलाइन शॉर्टकट से परिचित हों (जिनमें से एक CTRL- oमेरा मानना ​​है) और बैश हिस्ट्री सर्चिंग।

इतिहास की खोज

CTRL- rआपको बैश कमांड हिस्ट्री सर्च में ले जाता है, जहां आप उस कमांड को टाइप करना शुरू कर सकते हैं जिसे आप सर्च कर रहे हैं और बैश आपके लिए कमांड को स्वत: पूर्ण कर देगा। स्वतः पूर्ण कार्यक्षमता वास्तव में बहुत अच्छी है। जब आप जिस कमांड को चलाना चाहते हैं, वह इनपुट लाइन पर है, आप ENTERकमांड को चलाने के लिए या प्रेस कर सकते हैं CTRL- eकर्सर को कमांड लाइन के अंत में ले जाने और इतिहास खोज मोड से बाहर निकलने के लिए।

साथ अच्छी बात यह है CTRL- eइस बिंदु पर है कि इतिहास बफर इस आदेश को प्रसंग से सेट कर दिया जाता है। अगली और पिछली कमांड अब वही हैं जो लाइन से पहले और बाद में चलीं कि इतिहास आपके लिए स्थित खोज। आप ऊपर या नीचे तीर दबा सकते हैं और अगले कमांड को पकड़ सकते हैं।

इतिहास की खोज बहुत शक्तिशाली है और पहली जगह पर वापस जाने के लिए ऊपर तीर का उपयोग करने से बचने का एक शानदार तरीका है। एक त्वरित इतिहास खोज इतिहास के माध्यम से मैन्युअल रूप से खोज करने में बहुत समय बचा सकती है और फिर आप आगे बढ़ सकते हैं CTRL- oजैसे कि जॉन ने ऊपर बताया।

छोटी कटियां पढ़ें

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

  1. CTRL- nअगले कमांड के लिए (नीचे तीर के बराबर)
  2. CTRL- pपिछले कमांड के लिए (ऊपर तीर के बराबर)
  3. CTRL- bएक वर्ण वापस (बाएं तीर बराबर)
  4. CTRL- fएक वर्ण आगे (समतुल्य तीर समतुल्य)

ये ReadLine शॉर्टकट (के साथ CTRL- aपंक्ति के आरंभ और CTRL- eपंक्ति के अंत) imo आदेश पंक्ति पर अपने गति और दक्षता में वृद्धि होगी।


2
मुझे नहीं पता। मैं तीर या किसी अन्य एकल कुंजी प्रेस की तुलना में धीमी होने के लिए संशोधक कुंजियों का उपयोग कर पाता हूं। EOL / etc के लिए के रूप में। मैं घर / अंत कुंजियों का उपयोग करने के लिए जाता हूं (स्ट्टी-ए कुछ सुंदर चीजें भी दिखाता है, निश्चित रूप से)।
प्रातः

@Pryftan फेयर काफी, आखिरी वाक्य एक राय के रूप में प्रस्तुत किया गया है (देखें 'imo')। मेरा मानना ​​है कि लंबी दौड़ में कीबोर्ड की होम रो पर रहना टर्मिनल या किसी अन्य टाइपिंग गहन कार्यों में काम करने के लिए एक अच्छी रणनीति है। कुछ लोगों के पास कीबोर्ड होते हैं जहां तीर कुंजी अन्य वर्णों के करीब होती है, उस स्थिति में शायद रीडलाइन शॉर्टकट एक सम्मोहक सुविधा नहीं है। मैं इस अंतिम बिंदु को स्पष्ट रूप से एक राय बयान करने के लिए उत्तर को संपादित करूंगा।
१११ ---

1
@datUser Tbh ​​मैं 'imo' से चूक गया (या अगर मैंने इस पर विचार करने की उपेक्षा नहीं की - पूरी तरह से संभव है)। हालांकि यह सही है कि रिवर्स खोज उपयोगी है (यदि आपके पास काम करती है तो +1 है)। बेशक एफसी भी कुछ है (जैसा कि पहले ही उल्लेख किया गया है) और इसलिए उपयोग कर रहा है! (आदि।)। यूनियनों में एक बिल्ली की त्वचा के लिए बहुत सारे तरीके। कीबोर्ड के लिए यह काफी हद तक सही है: मेरे पास एक यूनिकॉम्प कीबोर्ड है (इसे प्यार करें और यादें वापस लाएं) लेकिन निश्चित रूप से अन्य कीबोर्ड भी हैं, जो ड्वोरक का उल्लेख नहीं करने पर विचार करते हैं। अंत में आपके पास जितने बेहतर विकल्प हैं आप उतने बेहतर हैं और आपका काम आसान है (या खेल) है :)
Pryftan
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.