बैश का एक समृद्ध इतिहास रहा है। यानी, यह एक पुराना खोल है जिसमें और भी पुराने पूर्वज (बॉर्न शेल) हैं, लेकिन इसका history
भी बहुत अच्छा है कमांड जो इसकी सुविधाओं की संख्या के आधार पर अन्य सभी शेल इतिहास इंटरफेस को पार करता है। history
. का बैश संस्करण रिवर्स सर्च, क्विक रिकॉल, रीराइटिंग हिस्ट्री, और बहुत कुछ की अनुमति देता है।
history
कमांड कई अन्य कमांड की तरह नहीं है। /usr/bin
जैसे सामान्य सिस्टम-स्तरीय स्थानों में रखी जाने वाली निष्पादन योग्य फ़ाइलें होने के कारण आपको कमांड की आदत हो सकती है , /usr/local/bin
, या ~/bin
. अंतर्निहित history
कमांड आपके PATH
में नहीं है और उसका कोई भौतिक स्थान नहीं है:
$ which history
which: no history in [PATH]
इसके बजाय, history
शेल का एक अंतर्निहित कार्य है:
$ type history
history is a shell builtin
$ help history
history: history [-c] [-d offset] [n] or
history -anrw [filename] or
history -ps arg [arg...]
Display or manipulate the history list.
[...]
उस कारण से, प्रत्येक शेल में इतिहास फ़ंक्शन अद्वितीय है, इसलिए आप जो बैश में उपयोग करते हैं वह Tcsh या फिश या डैश में काम नहीं कर सकता है, और आप जो उपयोग करते हैं वह बैश में काम नहीं कर सकता है। कुछ मामलों में, यह जानना कि बैश क्या कर सकता है, अन्य शेल के उपयोगकर्ताओं को बैश व्यवहार को क्लोन करने के लिए दिलचस्प हैक बनाने के लिए प्रेरित कर सकता है, और यह बैश सुविधाओं को अनलॉक कर सकता है जिन्हें आप कभी नहीं जानते थे।
अपना बैश इतिहास देखें
history
. का सबसे बुनियादी और बारंबार उपयोग कमांड आपके शेल सत्र का इतिहास देखने के लिए है:
$ echo "hello"
hello
$ echo "world"
world
$ history
1 echo "hello"
2 echo "world"
3 history
इवेंट डिज़ाइनर
ईवेंट डिज़ाइनर आपके इतिहास को ईवेंट द्वारा खोजते हैं। एक ईवेंट इस संदर्भ में आपके इतिहास में लॉग इन किया गया एक कमांड है, जिसे एक न्यूलाइन कैरेक्टर द्वारा चित्रित किया गया है। दूसरे शब्दों में, यह एक पंक्ति है, जो संदर्भ के लिए एक सूचकांक संख्या द्वारा चिह्नित है।
इवेंट डिज़ाइनर ज्यादातर विस्मयादिबोधक बिंदु से शुरू होते हैं, जिसे कभी-कभी बैंग . भी कहा जाता है (!
)।
अपने इतिहास से किसी आदेश को फिर से चलाने के लिए, इच्छित आदेश की अनुक्रमणिका संख्या के तुरंत बाद विस्मयादिबोधक बिंदु (कोई रिक्त स्थान नहीं) का उपयोग करें। उदाहरण के लिए, मान लें कि पंक्ति 1 में कमांड है echo "hello"
, और आप इसे फिर से चलाना चाहते हैं:
$ !1
echo "hello"
hello
आप इतिहास में अपनी वर्तमान स्थिति से ऋणात्मक संख्या में रेखाएँ प्रदान करके सापेक्ष स्थिति का उपयोग कर सकते हैं। उदाहरण के लिए, इतिहास में तीन प्रविष्टियां वापस जाने के लिए:
$ echo "foo"
foo
$ echo "bar"
bar
$ echo "baz"
baz
$ !-3
echo "foo"
foo
अगर आप सिर्फ एक लाइन पीछे जा रहे हैं, तो आप शॉर्टहैंड !!
. का इस्तेमाल कर सकते हैं !-1
. के बजाय . यह एक पूरे कीस्ट्रोक की बचत है!
$ echo "foo"
$ !!
echo "foo"
foo
स्ट्रिंग खोज
आप कमांड चलाने के लिए, रिवर्स में, प्रविष्टियों के माध्यम से एक विशिष्ट स्ट्रिंग की खोज कर सकते हैं। आरंभ करने . आदेश खोजने के लिए एक विशिष्ट स्ट्रिंग के साथ, जिस स्ट्रिंग को आप खोजना चाहते हैं, उसके तुरंत बाद एक विस्मयादिबोधक बिंदु का उपयोग करें (कोई स्थान नहीं):
$ echo "foo"
$ true
$ false
$ !echo
echo "foo"
foo
आप किसी भी स्थिति में एक स्ट्रिंग युक्त कमांड की खोज कर सकते हैं (न केवल शुरुआत में)। ऐसा करने के लिए, !
. का उपयोग करें साथ ही वह स्ट्रिंग जिसे आप हमेशा की तरह खोज रहे हैं, लेकिन स्ट्रिंग के दोनों ओर प्रश्नवाचक चिह्न लगाएं। आप अनुगामी प्रश्न चिह्न को छोड़ सकते हैं यदि आप जानते हैं कि स्ट्रिंग के तुरंत बाद एक न्यूलाइन वर्ण आता है (अर्थात रिटर्न दबाने से पहले यह आखिरी चीज है जिसे आपने टाइप किया था ):
$ echo "foo"
$ true
$ false
$ !?foo?
echo "foo"
foo
स्ट्रिंग प्रतिस्थापन
एक पंक्ति की शुरुआत में स्ट्रिंग्स की खोज के समान, आप एक स्ट्रिंग की खोज कर सकते हैं और इसे एक नई स्ट्रिंग के साथ बदल सकते हैं, कमांड को बदल सकते हैं:
$ echo "hello"
hello
$ echo "world"
world
$ ^hello^foo
echo "foo"
foo
इतिहास को उपयोगी बनाएं
बैश में, इतिहास कमांड यहां जो कवर किया गया है, उससे कहीं अधिक सक्षम है, लेकिन यह उपयोग के अभ्यस्त होने के लिए एक अच्छी शुरुआत है। अपने इतिहास को सिर्फ एक संदर्भ के रूप में मानने के बजाय। history
का उपयोग करें अक्सर कमांड करें, और देखें कि आप कमांड टाइप किए बिना कितना कुछ कर सकते हैं। आप खुद को हैरान कर सकते हैं!