हिस्टापेंड का उपयोग करते समय इतिहास की हानि


18

मुझे बहुत सारे इतिहास रखना पसंद है, इसलिए मैंने अपने में histappendसेट किया है .bashrc। अधिकांश समय सब कुछ ठीक काम करता है, कई गोले जोड़कर बनाए गए इतिहास के साथ। हालाँकि, हर एक और कुछ समय बाद, मैं एक नया शेल शुरू करूँगा और यह पाऊंगा कि मैंने पूरा इतिहास खो दिया है - और इसमें अक्सर अंतिम शेल से बाहर निकलने के कुछ कमांड होते हैं (यानी यह केवल लिखने की बजाय ओवरराइटिंग नहीं है। )। इस वजह से, मुझे संदेह है कि यह शेल एग्जिट पर हो रहा है, बजाय किसी अन्य प्रक्रिया के जो .bash_historyफ़ाइल को मार रहा है। इस निष्कर्ष का समर्थन करते हुए, मेरे पास अपने संकेत में इतिहास कमांड नंबर हैं, और मैंने उन्हें कभी भी नीचे कूदते नहीं देखा है।

किसी को भी कभी इसी तरह की समस्या में भाग? या यहां तक ​​कि सिर्फ सुझाव है कि समस्या को कैसे ट्रैक किया जाए?


जवाबों:


13

मेरे अपने प्रश्न का उत्तर देने के लिए क्षमा करें, लेकिन वास्तव में कोई भी अन्य समस्या का समाधान नहीं करता है।

मैंने अंत में यह पता लगा लिया है कि यह केवल तब होता है जब gnome-terminalखुद को बंद करना (यानी फ़ाइल> निकास, 'x' बटन, alt + F4), और फिर भी आम तौर पर केवल तब होता है जब त्वरित उत्तराधिकार में कई टर्मिनलों को बंद कर दिया जाता है। यह कभी नहीं होता है जब ctrl-D का उपयोग शेल को बंद करने के लिए किया जाता है, जिससे टर्मिनल का अनुसरण होता है।

अगर मैं इसे अच्छी तरह से पिन कर सकता हूं, तो मैं एक गनोम-टर्मिनल बग रिपोर्ट दर्ज करूंगा। इस बीच, शायद यह कुछ अन्य लोगों की मदद करेगा जो Google से यहां आते हैं!


10

पता नहीं कि ऐसा क्यों होता है, लेकिन हो सकता है कि आप समस्या के समाधान के लिए अपनी इतिहास फ़ाइल को लिखने के लिए बैश को मजबूर कर सकते हैं, जो हर बार एक संकेत दिखाता है:

PROMPT_COMMAND="history -a; history -n"

यह (-a) लिखेगा और फिर हिस्ट्री फाइल करेगा (हिस्टरी फाइल) हर बार अगले कमांड के लिए बैश प्रॉम्प्ट। अतिरिक्त लाभ: आपको शेल 2 के इतिहास में शेल 1 में कमांड एक्स मिलेगा।


GNU बैश पर काम नहीं करता है, संस्करण 3.00.15 (1) -release (i686-redhat-linux-gnu)
डेविड मैकिनटोश

2
क्या आप बता सकते हैं कि "काम नहीं करता" का क्या मतलब है?
इन्नाएम

3
आपके द्वारा उद्धृत अतिरिक्त लाभ कई मामलों में एक नकारात्मक पहलू है। यह वह व्यवहार नहीं है जिसकी मुझे तलाश है, क्योंकि मैं अलग-अलग गोले में दो पूरी तरह से अलग-अलग कार्य कर रहा हूं, और मेरे इतिहास को आपस में जोड़ना नहीं चाहते हैं। यह भी कुछ भी मदद नहीं करेगा। जब इतिहास गायब हो जाता है, तो यह .bash_history की सामग्री को हटा रहा है - मुझे उम्मीद नहीं है कि यह कोई फर्क नहीं पड़ेगा कि क्या वे शेल से बाहर निकलें या PROMPT_COMMAND द्वारा लिखे गए हैं।
कैस्केबेल

5
history -nपरतदार है। यह करना अधिक विश्वसनीय है history -a; history -c; history -r। यह समझाने के लिए, मैं सबसे पहले ध्यान दूंगा कि history -aयह सही काम करता है - आपके पास आपके .bash_historyसभी कमांड होंगे जो आपने टाइप किए थे, इस क्रम में कि आपने उन्हें टाइप किया था - यह मानते हुए कि आप history -aहर कमांड के बाद चलते हैं । शेल के इतिहास के विचार को .bash_history फ़ाइल के साथ समन्वयित रखने की चुनौती है। यह आसान है -cऔर -r, समस्या यह है कि अगर यह बड़ा है तो यह धीमा हो सकता है। -nटूट सकता है क्योंकि यह गलत तरीके से पहचानता है कि कौन सी लाइनें नई हैं। (मैं यहाँ अंतरिक्ष से बाहर चला रहा हूँ!)
हारून मैकडैड

4
(... यदि आप उपयोग करते हैं -n) कल्पना कीजिए कि आप शेल 1 में एक कमांड निष्पादित करते हैं ls:। फिर दूसरे शेल में, शेल टू, आप निष्पादित करते हैं cd। अब, .bash_history का इतिहास history -aआपके कारण सही है PROMPT_COMMAND- इसमें यह शामिल होगा ls \n cd \n। इसके बाद, आप शेल वन में जाएं और टाइप करें pwd। शेल वन का मानना ​​है कि इतिहास ( ls) में केवल कमांड एन था । अब यह सोचता है कि इतिहास में दो आज्ञाएँ ( lsऔर pwd) हैं। जब आप ऐसा -nसोचते हैं (मेरे इतिहास में मेरी दो कमांड हैं, और .bash_history में दो कमांड हैं, इसलिए मैं अद्यतित हूं।)
हारून मैकडैड

3

मेरा अनुभव यह था कि शेल ने निकास समय पर इतिहास फ़ाइल को अपडेट किया। इसलिए एक शेल का प्रारंभिक "इतिहास" इतिहास के सबसे हाल ही में बाहर किए गए शेल के दृश्य पर निर्भर करता है।

इसका परिणाम यह है कि आप इतिहास से आने और जाने की आज्ञा प्राप्त कर सकते हैं, यह इस बात पर निर्भर करता है कि अन्य गोले कैसे शुरू और बंद हुए।


2
मैं बहुत अच्छी तरह से समझता हूं कि इतिहास फ़ाइल कैसे लिखी जाती है - यही कारण है कि मैंने अपने प्रश्न में निर्दिष्ट किया है जो मैं उपयोग कर रहा हूं histappend। समस्या अप्रत्याशित सामग्री नहीं है, लेकिन पहले संग्रहीत सामग्री का कुल नुकसान है।
Cascabel

यह बताता है कि मैं अपना इतिहास क्यों खो रहा था ...
बी सेवन

1

मैंने ऐसा पहले भी देखा है लेकिन यह डिस्क त्रुटियों के साथ एक समस्या थी जो बढ़ती आवृत्ति में हो रही थी। मैं ड्राइव पर स्कैन चलाऊंगा। यदि यह पता चला है कि ड्राइव ठीक है, तो मैं यह देखने के लिए जांच करूंगा कि क्या यह फ़ाइल एक मनमाने ढंग से शेल इतिहास की सीमा को पार नहीं कर रही है।

कुछ ऐसा हो सकता है जो ऐसा करने में सक्षम हो सकता है कि फ़ाइल को 80 लाइनों तक वापस रखना होगा या फिर कई कमांड्स जो आप इतिहास बनना चाहते हैं।


मेरे पास मशीन पर रूट एक्सेस नहीं है जो यह हो रहा है, लेकिन मुझे विश्वास है कि ड्राइव ठीक है। मेरी होम डायरेक्टरी हमारी लैब में एक सर्वर पर संग्रहीत है (बहुत सारे RAID, मुझे विश्वास है) और एनएफ़एस-माउंटेड। "मनमाना खोल इतिहास सीमा" से आपका क्या अभिप्राय है? यह सब HISTSIZE और HISTFILESIZE के नीचे अच्छी तरह से हो रहा है, और हालांकि, मैंने दोनों को बड़े सेट किया है, वे intबैश के नीचे अच्छी तरह से उन्हें स्टोर करते हैं।
कैस्केबेल

मुझे कहना होगा कि डेविड मैकिनटोश की एंट्री शायद यही हो रही है।
axxmasterr

1
मुझे पूरा यकीन है कि यह नहीं है। मैं चाहिए कभी नहीं अपने इतिहास में केवल दो आदेशों के साथ अंत में, जब बाहर निकलने के लिए पिछले खोल एक दर्जन आदेशों था, इतिहास फ़ाइल कई सौ, और HISTSIZE / HISTFILESIZE 10000 की तैयारी में हैं किया था
Cascabel
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.