क्या मैं बैश में इतिहास खोज सकता हूं और परिणाम चला सकता हूं?
क्या मैं बैश में इतिहास खोज सकता हूं और परिणाम चला सकता हूं?
जवाबों:
टाइप Ctrl Rआदेश पंक्ति पर और पिछला आदेश लिखना प्रारंभ करें। एक बार परिणाम दिखाई Ctrl Rदेने के बाद अन्य मैच देखने के लिए रुकें। जब आप जो आदेश चाहते हैं वह प्रकट होता है, बस दबाएँEnter
ध्यान दें कि Ctrl Rडिफ़ॉल्ट होने पर, यदि आप चाहते थे कि कमांड ( reverse-search-history
) आपके लिए बाध्य हो Ctrl Tतो निम्नलिखित के साथ कॉन्फ़िगर कर सकते हैं:
बाइंड "" \ "सीटी: रिवर्स-सर्च-हिस्ट्री '
अन्य रीडलाइन बाइंडेबल कमांड्स की एक पूरी मेजबानी है जो आपके लिए भी उपलब्ध हैं। bash
मैन पेज पर एक नजर डालें ।
बैश के पास इंटरेक्टिव कमांड हिस्ट्री को खोजने और एक्सेस करने के लिए कई सुविधाएं हैं। जिनमें से सबसे बुनियादी history
बिलिन है। टाइपिंग बस:
$ इतिहास
न्यूमेरिक इंडेक्स के साथ कमांड्स की एक सूची प्रिंट करेंगे, जैसे:
$ इतिहास 1 स्पष्ट 2 एलएस -लाल 3 vim ~ / somefile.txt 4 इतिहास $
फिर आप इनमें से किसी भी कमांड को उनके संख्यात्मक सूचकांक का उपयोग करके इंडेक्स को एकल के साथ जोड़कर निष्पादित कर सकते हैं !
, जैसा कि मिच ने बताया:
$ 1
clear
आज्ञा का पालन करेंगे । इतिहास निर्मित में कई विशेषताएं हैं, आप अधिक bash
और history
मैन पेजों में देख सकते हैं ।
आप !
डिज़ाइनर का उपयोग करते समय सापेक्ष नकारात्मक ऑफसेट भी निर्दिष्ट कर सकते हैं , इसलिए ऊपर हमारी इतिहास सूची का उपयोग करते हुए, यदि हम vim
फिर से निष्पादित करना चाहते हैं, तो हम कर सकते हैं:
$ -2
जो मूल रूप से आपको "दो कमांड्स" चलाए गए कमांड को निष्पादित करने के लिए बैश बता रहा है। इतिहास सूची में पिछली कमांड को चलाने के लिए, हम बस उपयोग कर सकते हैं !!
(जो कि केवल शॉर्टहैंड है !-1
)।
!
डेसिग्नेटर आप संख्यानुसार निर्दिष्ट करना जो चलाने के लिए आदेश को सीमित नहीं करता। hayalci से पता चला कि आप bash
कमांड का उपयोग ( !
या) के साथ शुरू होने वाले पाठ के आधार पर कर सकते हैं !?
। फिर, ऊपर हमारी उदाहरण इतिहास सूची का उपयोग करते हुए, यदि हम clear
फिर से निष्पादित करना चाहते हैं, तो हमें बस इतना करना है:
$! cl
और दबाएँ Enter। और किस बारे में vim
? यह उतना ही सरल है:
$! कुछ
हैलसी की प्रतिक्रिया से सबसे महत्वपूर्ण बिंदु बिलिन के लिए कॉल है shopt
:
$ दुकान -s हिस्टिविरीज़
ताकि यह इतिहास सत्यापन सक्षम हो जाएगा आदेशों से मिलान किया जाता है !
, !!
और !?
designators आँख बंद करके मार डाला नहीं कर रहे हैं, लेकिन इसके बजाय कमांड लाइन पर भरे गए हैं ताकि आप सुनिश्चित कर सकते हैं कि वे उन्हें क्रियान्वित करने से पहले कोई बुराई करेंगे। यह तब और भी महत्वपूर्ण है जब आप कमांड को रूट उपयोगकर्ता के रूप में निष्पादित कर रहे हैं। यह विकल्प आपकी .bashrc
स्टार्टअप फ़ाइल में सेट किया जा सकता है ताकि जब भी आप लॉग इन करें तो यह सेट हो जाए।
जैसा कि पहले ही बताया जा चुका है, इस सभी सूचनाओं को bash
मैन पेज से चमकाया जा सकता है । के लिए?, !!, और!? रचनाकार, खंड 9.3 इतिहास विस्तार पर एक नज़र डालें ।
shopt
bashrc में जाता है, bash_profile नहीं (या यह गोले के लिए सक्षम नहीं होगा जो लॉगिन गोले नहीं हैं)।
एक विकल्प के रूप में crtl+R, आप टाइप करके इतिहास खोज सकते हैं
!text
यह हाल ही में आदेश के लिए इतिहास खोज करेंगे शुरुआत 'पाठ' के साथ।
लेकिन मेरा सुझाव है कि आप गलत कमांड के निष्पादन को रोकने के लिए इसे अपने .bashrc में डालें।
shopt -s histverify
यह इस तरह के बैश का निर्देश देता है, जैसे किसी भी इतिहास कार्रवाई (जैसे !!:s/prev_text/after_text
) के बाद, यह परिणामी लाइन को कमांड प्रॉम्प्ट पर रखता है। फिर आप कमांड की समीक्षा या संपादन कर सकते हैं, और बाद में एंटर दबा सकते हैं।
मैं रिवर्स-सर्च-हिस्ट्री पर इतिहास-खोज-बैकवर्ड का उपयोग करना पसंद करता हूं। पूर्व आपको कमांड के कुछ अक्षर टाइप करने देता है, फिर खोज कुंजी दबाएं, पहले खोज कुंजी को हिट करने का विरोध करें फिर खोज स्ट्रिंग टाइप करें।
मेरे सिस्टम पर डिफ़ॉल्ट रूप से, Mp और Mn समान कार्य करते हैं, लेकिन मैं तीर कुंजी को बांधना पसंद करता हूं:
bind '"\e[A":history-search-backward'
bind '"\e[B":history-search-forward'
मेरे पास वास्तव में एक महान उपनाम है, ज। यह वास्तव में सिर्फ "इतिहास | grep" है, लेकिन मैं "grep -E -vv" के साथ पिछली "h कमांड" प्रविष्टियों को फ़िल्टर करता हूं।
alias h="history | grep -E -v '^ *[0-9]+ *h ' | grep "
की तरह इस्तेमाल किया
h aliases
2003 less .bash_aliases
HISTIGNORE
।
बेहतरीन राइटअप, सीन! मैं यह एक टिप्पणी में डाल दिया था, लेकिन मैं कुछ प्रतिष्ठा अंक शर्मिंदा हूँ। :-)
एक अन्य संबंधित और उपयोगी तकनीक एक शब्द को बदलते हुए पिछली कमांड को चलाने की क्षमता है। आप निर्देशिका नाम टाइप करते हैं, या फ़ाइल नाम बदलना चाहते हैं:
$ गूंज मेरा नाम बॉब है मेरा नाम बॉब है $ ^ बॉब ^ जोर्डन echo मेरा नाम जोर्डन है मेरा नाम जोर्डन है
ध्यान दें कि कमांड चलने से पहले कमांड को विस्तारित, प्रतिस्थापित और आउटपुट किया जाता है, इसलिए यदि गलत कमांड चलाया जाता है तो आप देख सकते हैं कि यह क्या सोच रहा था।
Ctrl-r का उपयोग करके इतिहास के माध्यम से नेविगेशन के रूप में IMO बोझिल है, आप hh पर विचार करना चाह सकते हैं :
https://github.com/dvorka/hstr
जो नेविगेशन को बहुत सरल, सीधा और कुशल बनाता है - जिसमें कमांड चलाना शामिल है:
ctrl + r
अब डिफ़ॉल्ट रूप से बांधता है
यदि आपके पास vi
कुंजी बाइंडिंग ( set -o vi
या होने set editing-mode vi
में $HOME/.inputrc
) का उपयोग करने के लिए आपका शेल कॉन्फ़िगर किया गया है , तो आप कमांड लाइन के इतिहास के माध्यम से साइकिल चलाने के लिए <Esc>/some-command<Return>
हिट n
(अगला) या Shift-n
(पिछला) के साथ खोजें।
मुझे HSTR पसंद है लेकिन मैं कभी-कभी इसे स्थापित करने में सक्षम नहीं हो सकता। इसलिए मैंने fzf का उपयोग करते हुए एक उपनाम लिखा जो उसके व्यवहार की नकल करता है ( hx
, "इतिहास के निष्पादन के लिए")
alias hx='eval $(history | sed "s/^ *[0-9]* *//g" | fzf --tac --tiebreak=index --height=10)'
history
: अच्छा, इतिहास मिलता हैsed
: सूची से नंबर कॉलम निकालें (POSIX)fzf
: यहाँ जादू है, आप फजी खोज-सूची को अंतःक्रियात्मक रूप से खोज सकते हैं, या इसके साथ आगे बढ़ सकते हैं, C-J
और C-K
फिर एक कमांड निष्पादित कर सकते हैं Enter
।--height
: दिखाई गई लाइनों की संख्या निर्धारित करें।--tac
: वापस सूची (एक इतिहास के लिए अधिक तार्किक)--tiebreak=index
: जब fzf परिणामों को अद्यतन करता है तो इतिहास क्रम रखें