बैश इतिहास के व्यवहार को समझने के लिए सबसे पहले आपको निम्नलिखित बातों को जानना होगा:
- इतिहास फ़ाइल में इतिहास है।
- बैश प्रक्रिया की याद में इतिहास है।
- एक बैश प्रक्रिया की स्मृति में इतिहास किसी अन्य बैश प्रक्रिया की स्मृति में इतिहास के साथ समन्वयित नहीं होता है।
- बैश प्रक्रिया की स्मृति में इतिहास फ़ाइल में इतिहास के साथ समन्वयित नहीं किया जाता है, जब तक कि स्पष्ट रूप से या किसी विशिष्ट घटना के दौरान (नीचे देखें) नहीं पूछा जाता है।
डिफ़ॉल्ट सेटिंग्स का उपयोग करते हुए, इतिहास के संबंध में एक बैश सत्र का जीवनचक्र इस प्रकार है:
- स्टार्टअप बैश के दौरान इतिहास फ़ाइल पढ़ेगा। इतिहास फ़ाइल की सामग्री अब बैश प्रक्रिया की स्मृति में है।
- सामान्य उपयोग के दौरान केवल स्मृति में इतिहास को हेरफेर किया जाता है।
- शटडाउन के दौरान मेमोरी में इतिहास को इतिहास फ़ाइल में लिखा जाता है, इतिहास फ़ाइल की किसी भी पिछली सामग्री को अधिलेखित करना।
आपके द्वारा देखा गया प्रतीत होता है कि अप्रस्तुत व्यवहार ज्यादातर इसलिए है क्योंकि इतिहास फ़ाइल की सामग्री हमेशा अंतिम बंद बैश सत्र का इतिहास होती है, और बैश केवल स्टार्टअप के दौरान इतिहास फ़ाइल पढ़ता है।
स्टार्टअप और शटडाउन प्रक्रिया के अधिक विस्तृत विवरण के लिए बैश मैनुअल पढ़ें ।
ध्यान दें कि डिफ़ॉल्ट सेटिंग्स के साथ मेरा मतलब है कि bash से डिफ़ॉल्ट सेटिंग्स। आपके वितरण ने एक .bashrc
(या /etc/bash.bashrc
) प्रदान किया है जो इस व्यवहार को बदल देता है।
शेल विकल्प को सक्षम करके histappend
आप इतिहास फ़ाइल को अधिलेखित करने के बजाय एपेंड को बता सकते हैं। आप histappend
कमांड का उपयोग करके सक्षम कर सकते हैं shopt -s histappend
। इस विकल्प को हमेशा सक्षम करने के लिए आपको कमांड को अपनी .bashrc
(या अन्य इनिशियलाइज़ेशन फ़ाइल) में रखना होगा । बैश मैनुअलshopt
में कमांड के बारे में और पढ़ें
ध्यान दें कि सक्षम करने histappend
से बहुत प्रतीत नहीं होता है कि निंदनीय व्यवहार कम हो जाएगा। ऐसा इसलिए है क्योंकि प्रत्येक बैश सत्र में अभी भी स्मृति में अपना इतिहास है। यह संभव है कि ज्यादातर सिंक्रनाइज़ बैश इतिहास हो। एक गाइड है कि स्टैक ओवरफ्लो पर एक थ्रेड में ज्यादातर सिंक किए गए इतिहास के लिए हर बैश प्रक्रिया को कैसे प्राप्त किया जाए ।
अंतर्निहित कमांड का उपयोग करके history
आप स्पष्ट रूप से इतिहास को फ़ाइल से मेमोरी तक, या मेमोरी से फ़ाइल में लिखने के लिए पढ़ सकते हैं। उदाहरण के लिए: history -r
फ़ाइल की सामग्री को पढ़ेंगे और इसे मेमोरी में इतिहास में जोड़ देंगे। history -w
पिछली सामग्री को अधिलेखित करने के लिए मेमोरी से फ़ाइल में वर्तमान इतिहास लिखेंगे। यह मूल रूप से बंद के दौरान क्या होता है। बैश मैनुअलhistory
में कमांड के बारे में और पढ़ें
पूर्णता के लिए यहां आंतरिक चर की एक सूची है जो इतिहास व्यवहार को संशोधित करती है:
HISTFILE
: से पढ़ने के लिए और इतिहास लिखने के लिए फ़ाइल।
HISTFILESIZE
: इतिहास फ़ाइल के लिए अधिकतम पंक्ति गणना।
HISTSIZE
: स्मृति में इतिहास के लिए अधिकतम पंक्ति गणना।
HISTCONTROL
, HISTIGNORE
, HISTTIMEFORMAT
: इस चर्चा के लिए प्रासंगिक नहीं। विवरण के लिए बैश मैनुअल पढ़ें ।