बैश इतिहास से कमांड का चयन करें


20

अप बटन दबाना थकाऊ है और मुझे वह कमांड याद आ सकती है जिसकी मुझे तलाश थी। इसलिए जब historyटर्मिनल पर टाइप करना मुझे पहले से दर्ज किए गए सभी कमांड देता है, तो एक नंबर पर अनुक्रमित किया जाता है। क्या कोई ऐसा तरीका है जिसे मैं केवल कमांड से जुड़े नंबर पर कॉल कर सकता हूं?


अब तक कोई और इंटरैक्टिव विकल्प? ये बहुत त्रुटि प्रवण हैं
मैट

जवाबों:


31

बैश इतिहास कई सहायक चीजें कर सकता है, और Strg-rटेरी वांग ने जिस खोज का उल्लेख किया है, वह उनके बीच एक महत्वपूर्ण है। लेकिन यह भी संभव है कि आपने जो मांगा है वही करें।

आप पिछली कमांड को फिर से कर सकते हैं !!। इसके साथ ही आप पिछली कमांड को भी एडिट कर सकते हैं। यदि उदाहरण के लिए आप एक कमांड के लिए रूट विशेषाधिकार प्राप्त करना भूल गए

apt-get install a-long-list-of-packages

आपको उस सब को फिर से नहीं लिखना है। इसके बजाय बस बुलाओ

sudo !!

यदि आप अपने इतिहास से किसी विशिष्ट स्थान पर कमांड को फिर से निष्पादित करना चाहते हैं, तो आप !उदाहरण के लिए भी उपयोग कर सकते हैं

!3

स्थिति पर कमांड को फिर से निष्पादित करने के लिए 3. ध्यान रखें कि यह ऊपर से गिना जाता है। इसलिए यदि आप अपने इतिहास में 500 कमांड जमा कर रहे हैं, !1तो "500 कमांड पहले" होगा। आप नकारात्मक संख्याओं का भी उपयोग कर सकते हैं। उदाहरण के लिए

!-2

दूसरी अंतिम कमांड को फिर से निष्पादित करेगा।

आप अंतिम कमांड को भी फिर से निष्पादित कर सकते हैं जो एक स्ट्रिंग के साथ शुरू हुआ था

!apt-

जो "apt-" के साथ शुरू हुई अंतिम पंक्ति को फिर से करेगा। यदि आप अंतिम कमांड चाहते हैं जहां स्ट्रिंग लाइन में कहीं भी दिखाई दे, तो आप कुछ का उपयोग कर सकते हैं

!?pt-ge

और भी रोचक बातें हैं जो बैश इतिहास कर सकता है। बस संभावनाओं की एक विस्तृत श्रृंखला की छाप देने के लिए, आप विशेष रूप से इतिहास से एक कमांड के पैरामीटर का उपयोग कर सकते हैं। इसलिए

!-5:3:p

अंतिम कमांड से तीसरे पैरामीटर को पांचवें तक प्रिंट करेगा।

EDIT: रूडी की टिप्पणी के संबंध में, मानक सेटिंग्स के साथ यह बैश इतिहास विस्तार वास्तव में सीधे निष्पादित होता है। यह शायद सबसे अच्छा इस तरह वर्णित है: की तरह एक कॉल !-3कर रहा है की जगह अपने इतिहास से तीसरे पिछले आदेश और साथ खोल से तो अपने इनपुट (प्रतिस्थापन के साथ) निष्पादित। इसलिए यदि आप टाइप करते हैं !-3और प्रेस करते हैं ENTERऔर आपकी तीसरी अंतिम कमांड होती है ls ~, तो यह उसी तरह से लागू होती है जैसे कि आपने ls ~फिर से टाइप किया और ENTER"अपने दम पर" दबाया ।

यदि आप ऐसा नहीं चाहते हैं, तो आप शेल विकल्प सेट कर सकते हैं histverify। खोल विकल्प सेट करने और परेशान करने के लिए, आप shoptकमांड पर पढ़ना चाह सकते हैं । histverifyसेट के साथ , जैसे कॉल !-3केवल आपके इतिहास से आपकी कमांड लाइन में प्रतिस्थापन लिखता है, लेकिन इसे सीधे निष्पादित नहीं करता है। यदि आपके पास है, तो महत्वपूर्ण बात करने के लिए, ENTERअपने आप को दबाएं - या यदि आप चुनते हैं तो इससे बचना चाहिए।


तो !बहुत खतरनाक है खतरनाक ... मैं जानना चाहता हूं कि !-4इसे चलाने से पहले क्या किया था। या यह आपको पहले दिखाता है? शांत सारांश!
रडी

1
@ रुडी यह एक अच्छी बात है, मैंने अपना जवाब अपडेट कर दिया। इतिहास की विशेषताएं ज्यादातर आपके काम को गति देने और आपको कीस्ट्रोक्स को बचाने के लिए होती हैं। तो एक मानक "क्या आप वास्तव में, वास्तव में इसका मतलब है?" कम से कम आंशिक रूप से उस उद्देश्य को हरा सकते हैं। और भले ही आप कर सकते थे, आम तौर पर आप जैसे "दूर वापस" आदेश नहीं कहेंगे !-238। अपने दूसरे अंतिम, तीसरे अंतिम, शायद अंतिम आदेश को याद रखना मुश्किल नहीं होना चाहिए;) अक्सर लिनक्स के साथ (और, वास्तव में, सामान्य रूप से कंप्यूटिंग के साथ), यह उम्मीद है कि आप जानते हैं कि आप क्या कर रहे हैं। और अगर आप वास्तव में अतिरिक्त सुरक्षा जाल चाहते हैं, तो यह एक shoptदूर है;)
हेनिंग कोकरबेक

16

हाँ वहाँ है। यदि, उदाहरण के लिए, आप उस कमांड को निष्पादित करना चाहते हैं जिसके पास संख्या 1234 है, तो यह करें:

!1234

अन्य उपयोगी सामान:

  • यदि आप अंतिम कमांड को चलाना चाहते हैं, तो करें:

    !!
  • यदि आप अंतिम lsकमांड को चलाना चाहते हैं , तो करें:

    !ls
  • यदि आप बस दौड़े ls /some/long/path, और आप cdइसे करना चाहते हैं , तो:

    cd !$

अधिक जानकारी के लिए:


6

कुंजी संयोजन का उपयोग करें Ctrl- r, आप बैश इतिहास को खोजने के लिए कीवर्ड का उपयोग करने में सक्षम होंगे।

एक त्वरित बैश कुंजी बाध्यकारी संदर्भ: http://ss64.com/bash/syntax-keyboard.html


3

यदि आपको किसी कमांड का इतिहास नंबर मिल गया है और आप उसे फिर से निष्पादित करना चाहते हैं, !तो नंबर के बाद टाइप करें , जैसे !1234और दबाएं Enter। यह इतिहास विस्तार का हिस्सा है ; आप हमले कर सकते हैं संशोधक यह पर।

यदि आप इसे चलाने से पहले कमांड को संपादित करना चाहते हैं, तो fc 1234बाहरी संपादक को आमंत्रित करता है।

लेकिन जैसा कि टेरी वांग ने पहले ही उल्लेख किया है कि आमतौर पर इतिहास में अपने इतिहास की संख्या निर्धारित करने की तुलना में एक कमांड का पता लगाने के तेज़ तरीके हैं, जिसमें वृद्धिशील खोज को शामिल करना Ctrl+ R(प्रेस Enterजब आपको वह कमांड मिला है जिसे आप निष्पादित करना चाहते हैं), या fc PREFIXपिछले निष्पादित करने के लिए। के साथ शुरुआत PREFIX


1

historyआदेश सभी आदेशों और उनके संबद्ध संख्या दिखाएगा। यदि आप कमांड लाइन निष्पादित करने से पहले सिर्फ एक त्वरित जांच करना चाहते हैं तो # 135 आप टाइप कर सकते हैं:

echo !135

यह आपको दिखाएगा कि क्या निष्पादित होने जा रहा है।

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