किसी कारण से, मैं रिबूट के बाद अपना BASH इतिहास रखने के लिए अपना सिस्टम प्राप्त नहीं कर सकता। यहाँ मेरे संबंधित अनुभाग हैं ~/.bashrc
:
shopt -s histappend
PROMPT_COMMAND='history -a; updateWindowTitle'
export HISTCONTROL=ignoredups
export HISTSIZE=9999
export HISTFILESIZE=999999
export HISTFILE="$HOME/.bash_history"
जहां तक मैं बता सकता हूं कि वे सभी आवश्यक विकल्प हैं (मुझे पता है कि मैं अतीत में इन सभी के बिना कई रिबूट के पार इतिहास रखने में सक्षम था)। हालाँकि, इन विकल्पों को कई रिबूट से पहले जोड़ने के बावजूद, मैंने रिबूट के बाद अभी भी अपने अधिकांश इतिहास को ढीला कर दिया है। यह खाली नहीं है, लेकिन इसमें 9999 लाइनें नहीं हैं जो मैंने रिबूट करने से पहले की थीं।
इससे पहले कि कोई शिकायत करे, हाँ मैंने इन सवालों को पढ़ा है। मैंने उनके कुछ सुझावों को ऊपर सूचीबद्ध के रूप में लागू किया है, बाकी या तो अनपेक्षित थे या प्रासंगिक नहीं थे:
- हिस्टापेंड का उपयोग करते समय इतिहास की हानि
- इतिहास को बदलने से कैसे रोकें बैश?
- क्या निर्धारित करता है कि बैश इतिहास कमांड में क्या दिखाई देता है?
- मैं अपने बैश इतिहास को सत्रों में कैसे रखूं?
- बैश इतिहास को बचाएं, नियमित रूप से
इस बंद मौके पर कि वहाँ अन्य प्रासंगिक आदेश हो सकते हैं, आप ~/.bashrc
यहाँ मेरा पूरा देख सकते हैं ।
तो मुझे क्या याद आ रही है? मेरा इतिहास क्यों नहीं बचा? अगर किसी को लगता है कि एक और फाइल प्रासंगिक हो सकती है तो मुझे बताएं और मैं इसे पोस्ट करूंगा। मैंने grep -i hist \.*
अपने में चलाकर जाँच की $HOME
जिसमें पता चला कि .
स्ट्रिंग वाली एकमात्र प्रासंगिक फाइल थी hist
या HIST
थी .bashrc
।
मैं लिनक्स मिंट डेबियन संस्करण, GNU बैश, संस्करण 4.2.36 (1) -release (x86_64-pc-linux-gnu) और मेरा पसंदीदा टर्मिनल एमुलेटर (प्रासंगिक होने के मामले में) चला रहा हूं terminator
।
अपडेट करें:
टिप्पणियों में @ mpy के सुझाव के बाद, मैंने डिफ़ॉल्ट के विपरीत ~/.bashrc
सेट करने के लिए अपना नाम बदल दिया और यह इंटरैक्टिव गोले के लिए समस्या को हल करने के लिए लगता है । लॉगिन गोले अभी भी उसी व्यवहार को प्रदर्शित करते हैं, जिसके तर्ज पर इतिहास को काट दिया गया है। हालाँकि, संबंधित फ़ाइलों में कोई संबंधित चर सेट नहीं हैं :HISTFILE=~/bash_history
~/.bash_history
500
HIST
$ for f in /etc/profile ~/.profile ~/.bash_profile ~/.bash_login; do \
echo -ne "$f :"; echo `grep HIST $f`; \
done
/etc/profile :
/home/terdon/.profile :grep: /home/terdon/.profile: No such file or directory
/home/terdon/.bash_profile :grep: /home/terdon/.bash_profile: No such file or directory
/home/terdon/.bash_login :grep: /home/terdon/.bash_login: No such file or directory
$ grep -r HIST /etc/profile.d/ <-- returns nothing
तो, क्यों स्थापित कर रही है HISTSIZE
और HISTFILESIZE
में ~/.bashrc
पर्याप्त नहीं है जब तक कि मैं स्पष्ट रूप से सेट $HISTFILE
डिफ़ॉल्ट के अलावा कुछ करने के लिए ~/.bash_history
?
history
कमांड निष्पादित करते हैं , तो आपके द्वारा देखा जाने वाला आउटपुट cat .bash_history
लाइन नंबरों के अलावा, आपके द्वारा देखे जाने, चलाने के समान है ? मेरा मतलब है कि history
कमांड सूची समय टिकटों या अन्य जानकारी? मैं जो कारण पूछ रहा हूं, यदि आप इन गूढ़ सामग्रियों को देखते हैं, तो इसका मतलब है, एक अन्य मॉड्यूल / फ़ंक्शन / प्रोग्राम है, जो शेल इतिहास के साथ खिलवाड़ कर रहा है और जो कुछ भी है, उसका एक गलत या छोटी गाड़ी संस्करण है, जिससे आपको दुःख हो सकता है। ।
;)
: HISTFILE के रूप में एक और फ़ाइल आज़माएं, डिफ़ॉल्ट नहीं ~/.bash_history
। बहुत समझाई गई व्याख्या: मुझे लगता है कि बैश आपका डिफ़ॉल्ट शेल है, इसलिए सिस्टम शुरू होने पर एक गैर-संवादात्मक शेल आपके एक्स सत्र का माता-पिता है (मैं यह भी मानता हूं कि आप एक्स का उपयोग करते हैं), जो हिस्टैपेंड विकल्प के बारे में कुछ भी नहीं जानता होगा (जैसा कि .bashrc केवल है। इंटरैक्टिव गोले द्वारा पढ़ा जाता है), इसलिए जब तक यह मूल खोल सब कुछ ठीक चलता है, लेकिन समाप्ति (यानी सिस्टम रुकावट) पर यह ओवरराइड करेगा ~/.bash_history
(जो डिफ़ॉल्ट है) और आपके इतिहास को गड़बड़ कर देता है ...