बैश का एक समृद्ध इतिहास है। यानी, यह एक पुराना शेल है जिसका एक और भी पुराना पूर्वज (बोर्न शेल) है, लेकिन इसमें एक शानदार 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...]
इतिहास सूची को प्रदर्शित या हेरफेर करें।
[...]
इस कारण से, प्रत्येक शेल में इतिहास फंक्शन अद्वितीय है, इसलिए जो आप बैश में उपयोग करते हैं वह Tcsh या Fish या Dash में काम नहीं कर सकता है, और जो आप उनमें उपयोग करते हैं वह बैश में काम नहीं कर सकता है। कुछ मामलों में, यह जानना कि बैश क्या कर सकता है, अन्य शेल के उपयोगकर्ताओं को बैश व्यवहार को क्लोन करने के लिए दिलचस्प हैक्स बनाने के लिए प्रेरित कर सकता है, और यह उन बैश सुविधाओं को अनलॉक कर सकता है जिनके बारे में आप कभी नहीं जानते थे।
अपना बैश इतिहास देखें
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
आप किसी भी स्थिति में स्ट्रिंग युक्त कमांड को भी खोज सकते हैं (सिर्फ शुरुआत में नहीं)। ऐसा करने के लिए, हमेशा की तरह ! प्लस वह स्ट्रिंग उपयोग करें जिसे आप खोज रहे हैं, लेकिन स्ट्रिंग को दोनों छोरों पर प्रश्न चिह्नों से घेरें। आप अनुगामी प्रश्न चिह्न को छोड़ सकते हैं यदि आप जानते हैं कि स्ट्रिंग तुरंत एक न्यूलाइन कैरेक्टर द्वारा अनुसरण की जाती है (अर्थात यह आखिरी चीज है जिसे आपने Return दबाने से पहले टाइप किया था):
$ echo "foo"
$ true
$ false
$ !?foo?
echo "foo"
foo
स्ट्रिंग प्रतिस्थापन
एक लाइन की शुरुआत में स्ट्रिंग खोजने के समान, आप एक स्ट्रिंग खोज सकते हैं और इसे एक नई स्ट्रिंग से बदल सकते हैं, कमांड को बदलकर:
$ echo "hello"
hello
$ echo "world"
world
$ ^hello^foo
echo "foo"
foo
इतिहास को उपयोगी बनाएं
बैश में, history कमांड यहां कवर किए गए से बहुत अधिक करने में सक्षम है, लेकिन यह उपयोग करने के लिए अपने इतिहास का उपयोग करने के बजाय इसे केवल एक संदर्भ के रूप में मानने के लिए एक अच्छी शुरुआत है। history कमांड का अक्सर उपयोग करें, और देखें कि आप कमांड टाइप किए बिना कितना कर सकते हैं। आप खुद को आश्चर्यचकित कर सकते हैं!