सवाल मैं बैश इतिहास कैसे खोज सकता हूं और एक आदेश फिर से शुरू कर सकता हूं?


क्या मैं बैश में इतिहास खोज सकता हूं और परिणाम चला सकता हूं?


277
2017-07-17 19:23


मूल




जवाब:


प्रकार Ctrl  आर कमांड लाइन पर और पिछले कमांड टाइप करना शुरू करें। एक बार परिणाम एक बार मारता रहता है Ctrl  आर अन्य मैचों को देखने के लिए। जब आप जिस आदेश को प्रकट करना चाहते हैं, तो बस दबाएं दर्ज

ध्यान दें कि जबकि Ctrl  आर डिफ़ॉल्ट है, अगर आप आदेश चाहते थे (reverse-search-history) करने के लिए बाध्य करना Ctrl  टी आप इसे निम्न के साथ कॉन्फ़िगर कर सकते हैं:

बाध्य '' \ सी-टी ": रिवर्स-सर्च-हिस्ट्री '

अन्य रीडलाइन बाइंडेबल कमांड्स की एक पूरी मेजबानी भी है जो आपके लिए भी उपलब्ध हैं। पर एक नज़र डालें bash मैन पेज

इंटरैक्टिव कमांड इतिहास को खोजने और एक्सेस करने के लिए बैश में कई सुविधाएं हैं। जिनमें से सबसे बुनियादी है history builtin। टाइपिंग बस:

$ इतिहास

एक संख्यात्मक सूचकांक के साथ आदेशों की एक सूची मुद्रित करेंगे, जैसे:

$ इतिहास
1 स्पष्ट
2 एलएस -ल
3 vim ~ / somefile.txt
4 इतिहास
$

इसके बाद आप इंडेक्स को प्रीफर करने के द्वारा इन संख्याओं में से किसी एक को अपने न्यूमेरिक इंडेक्स का उपयोग करके निष्पादित कर सकते हैं !, जैसा मिच बताया:

$ 1

निष्पादित करेगा clear आदेश। निर्मित इतिहास में कई विशेषताएं हैं, आप इसमें और देख सकते हैं bash तथा history मैन पेज

आप इसका उपयोग करते समय सापेक्ष नकारात्मक ऑफ़सेट भी निर्दिष्ट कर सकते हैं ! डिज़ाइनर, इसलिए उपरोक्त हमारी इतिहास सूची का उपयोग करके, अगर हम निष्पादित करना चाहते हैं vim फिर, हम कर सकते थे:

$! -2

जो मूल रूप से "दो आदेश पहले" चलाए गए आदेश को निष्पादित करने के लिए बाश को बता रहा है। इतिहास सूची में पिछले आदेश को चलाने के लिए, हम बस उपयोग कर सकते हैं !! (जो सिर्फ के लिए शॉर्टेंड है !-1)।

! डिज़ाइनर आपको संख्यात्मक रूप से निर्दिष्ट करने के लिए सीमित नहीं करता है कि कौन सा आदेश चलाना है। hayalci दिखाया गया है कि आप निर्देश दे सकते हैं bash जिस पाठ के साथ शुरू होता है उसके आधार पर कमांड निष्पादित करने के लिए (उपयोग करें !) या कमांड के भीतर पाठ (उपयोग कर रहा है !?)। फिर, अगर हम निष्पादित करना चाहते हैं, तो ऊपर दी गई हमारी उदाहरण इतिहास सूची का उपयोग करना clear फिर, हमें बस इतना करना है कि टाइप करें:

$! सीएल

और दबाएं दर्ज। और क्या इस बारे में vim? यह उतना आसान है जितना:

$!? कुछ

से सबसे महत्वपूर्ण बिंदु hayalciप्रतिक्रिया है कॉल करने के लिए shopt निर्मित:

$ shopt -s histverify

इससे इतिहास सत्यापन सक्षम हो जाएगा ताकि आदेशों का मिलान किया जा सके !, !!, तथा !? डिजाइनरों को अंधाधुंध निष्पादित नहीं किया जाता है, बल्कि कमांड लाइन पर भर दिया जाता है ताकि आप सुनिश्चित कर सकें कि वे उन्हें निष्पादित करने से पहले कोई बुराई नहीं करेंगे। जब आप रूट उपयोगकर्ता के रूप में आदेश निष्पादित कर रहे हैं तो यह और भी महत्वपूर्ण है। यह विकल्प आपके में सेट किया जा सकता है .bashrc स्टार्टअप फ़ाइल ताकि जब भी आप लॉग इन करते हैं तो यह सेट हो।

जैसा कि पहले से ही बताया गया है, इस सारी जानकारी को से प्राप्त किया जा सकता है bash मैन पेज। के लिए!, !!, और! डिजाइनर, खंड पर एक नज़र डालें 9.3 इतिहास विस्तार


399
2017-07-17 19:25



+1 मैं सभी प्रणालियों के लिए 12 से अधिक वर्षों के लिए लिनक्स का उपयोग कर रहा हूं। मुझे नहीं पता था कि अस्तित्व में है। इच्छा है कि मैं +10 कर सकता था मुझे यह कैसे याद आया ?? - Aiden Bell
जब तक मैंने नियमित रूप से emacs का उपयोग शुरू नहीं किया तब तक मैंने इसे खोज नहीं लिया। तब मैंने गलती से इसे एक दिन में बांध दिया (सोच रहा था कि मैं emacs में था)। - Sean Bright
कई प्रणालियों पर, ऊपर तीर दबाकर वही होता है। - mas
मेरे लिए ऊपर तीर बस पिछले कमांड पर जाता है। लेकिन हाँ, यह सब कुछ जो आप चाहते हैं के लिए बाध्यकारी है। - Sean Bright
CTRL + R दबाए जाने के बाद भी आप पिछली कमांड पर वापस जाने के लिए CTRL + SHIFT + R कई बार उपयोग कर सकते हैं - Gal Bracha


एक विकल्प के रूप में Crtl + आर, आप टाइप करके इतिहास खोज सकते हैं

!text

यह सबसे हालिया कमांड के लिए इतिहास की खोज करेगा शुरू 'पाठ' के साथ।

लेकिन मेरा सुझाव है कि आप गलत आदेश के निष्पादन को रोकने के लिए इसे अपने .bashrc में रखें।

shopt -s histverify

यह इस तरह के बाश निर्देश देता है, के बाद कोई भी इतिहास क्रियाएं (जैसे !!:s/prev_text/after_text), यह परिणामी रेखा को कमांड प्रॉम्प्ट पर रखता है। फिर आप कमांड की समीक्षा या संपादन कर सकते हैं, और बाद में एंटर दबा सकते हैं।


35
2017-07-17 20:40



सबसे हालिया कमांड को पुनः निष्पादित करने के लिए! "टेक्स्ट का उपयोग करें (जैसा कि" पाठ के साथ शुरू होता है)। - mark4o
अगर किसी को '!', '!!', '!?', 'History | को समेकित करना था grep ', और' ctrl-r 'एक व्यापक उत्तर में, मैं इसे चुनूंगा। - Richard Hoskins


आप यह भी कर सकते हैं:

history | grep "stuff"

यह कुछ वापस लौटाएगा

num stuff

तो आप टाइप कर सकते हैं

!num

28
2017-07-17 20:21





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

डिफ़ॉल्ट रूप से मेरे सिस्टम पर, एम-पी और एम-एन समान कार्यों से जुड़ते हैं लेकिन मैं तीर कुंजियों को बाध्य करना पसंद करता हूं:

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

14
2018-02-02 20:32





उत्कृष्ट लेखन, शॉन! मैं इसे एक टिप्पणी में डालूंगा, लेकिन मैं कुछ प्रतिष्ठा अंक शर्मीली हूँ। :-)

एक और संबंधित और उपयोगी तकनीक एक शब्द बदलने के दौरान पिछले कमांड चलाने की क्षमता है। मान लें कि आपने निर्देशिका का नाम टाइप किया है, या फ़ाइल का नाम बदलना चाहते हैं:

$ मेरा नाम गूंज बॉब है
मेरा नाम बॉब है
$ ^ बॉब ^ जोर्डन
मेरा नाम गूंज जॉर्डन है
मेरा नाम जोर्डन है

ध्यान दें कि कमांड चलाने से पहले आदेश को विस्तारित, प्रतिस्थापित और आउटपुट किया जाता है, इसलिए यदि गलत आदेश चलाया जाता है तो आप देख सकते हैं कि यह क्या सोच रहा था।


12
2017-09-10 14:23





मेरे पास वास्तव में बहुत अच्छा उपनाम है, एच। यह वास्तव में सिर्फ "इतिहास | grep" है, लेकिन मैं "grep -E -v" के साथ पिछले "एच कमांड" प्रविष्टियों को फ़िल्टर करता हूं

alias h="history | grep -E -v '^ *[0-9]+ *h ' | grep "

इस्तेमाल किया

h aliases
2003  less .bash_aliases

12
2017-09-25 16:45



इसे कमांड जोड़कर भी पूरा किया जा सकता है HISTIGNORE। - tanenbring


चूंकि Ctrl-r का उपयोग करके इतिहास के माध्यम से नेविगेशन आईएमओ बोझिल है, तो आप विचार करना चाहेंगे hh:

https://github.com/dvorka/hstr

जो नेविगेशन को बहुत आसान, सीधा और कुशल बनाता है - कमांड चलाने सहित:

enter image description here


5
2017-12-18 16:37



इसे कैसे उपयोग करे? इस तस्वीर को देखने के लिए कौन सी कुंजी दबाएं? - Nakilon
एक बार जब आप एचएच इंस्टॉल कर लेंगे तो आप या तो एचएच कमांड का उपयोग कर सकते हैं या दस्तावेज में वर्णित किसी भी कीबोर्ड शॉर्टकट (आमतौर पर Ctrl-r) में बाध्य कर सकते हैं। - Martin Dvorak
यह बांधता है ctrl + r डिफ़ॉल्ट रूप से अब - Alleo


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

खोज शुरू करने के बाद, आप अगले मिलान कमांड पर जाने के लिए फिर से नियंत्रण-आर टाइप कर सकते हैं।


3
2017-09-04 04:55





यदि आपके पास अपना खोल उपयोग करने के लिए कॉन्फ़िगर किया गया है vi कुंजी बाइंडिंग (set -o vi या हो रहा है set editing-mode vi में $HOME/.inputrc), तो आप के साथ खोज करते हैं <Esc>/some-command<Return> और मारा n (अगला) या Shift-n (पिछला) कमांड लाइन इतिहास के माध्यम से चक्र के लिए।


3
2017-11-22 15:21



यह उपयोगकर्ताओं के सबसे निकटतम है। - Gabor Marton


CTRL+आर @ John1024 जैसा सुझाव दिया गया है, ठीक है, लेकिन कुछ हद तक कठिन है यदि आपके हालिया आदेशों में से कई समान हैं और आप उन्हें स्कैन करने का एक त्वरित तरीका चाहते हैं। एक विकल्प का उपयोग करना होगा history:

$ history | grep keyword

2
2017-09-04 05:11