असीमित बैश इतिहास [बंद]


350

मैं चाहता हूं कि मेरी .bash_historyफ़ाइल असीमित हो। उदा। इसलिए मैं हमेशा वापस जा सकता हूं और देख सकता हूं कि मैंने कुछ कैसे बनाया / कॉन्फ़िगर किया है, या वह निफ्टी कमांड क्या था, या कुछ हफ्ते पहले कैसे कुछ कमांड टूट गया। मैं इस सेटिंग को कैसे बदलूं?



1
बैश एक प्रोग्रामिंग भाषा है और यह प्रोग्रामिंग के बारे में नहीं है?
नील

जवाबों:


307

सेट करें HISTSIZEऔर HISTFILESIZEएक खाली स्ट्रिंग में .bashrc:

HISTSIZE= 
HISTFILESIZE=

में बैश 4.3 या उच्चतर आप भी उपयोग कर सकते हैं HISTSIZE=-1 HISTFILESIZE=-1:

n.  Setting HISTSIZE to a value less than zero causes the history list to be
    unlimited (setting it 0 zero disables the history list).

o.  Setting HISTFILESIZE to a value less than zero causes the history file size
    to be unlimited (setting it to 0 causes the history file to be truncated
    to zero size).

12
(निर्यात PROMPT_COMMAND = 'history -a') इतिहास को तुरंत काटने के लिए आदेश फ्लश कर सकता है।
क्रूर

3
HISTSIZE= HISTFILESIZE=बैश इतिहास को पूरी तरह से अक्षम करने में परिणाम सेट करना , कम से कम मेरे लिए।
फिलिप लुडविग

5
@PhilippLudwig सेटिंग ने HISTSIZE=-1 HISTFILESIZE=-1मेरे इतिहास को अक्षम कर दिया, जबकि HISTSIZE= HISTFILESIZE=यह ट्रिक थी। यहाँ CentOS 7।
सीथर

1
@PhilippLudwig मुझे लगता है कि बजाय HISTSIZE= HISTFILESIZE=आपको चाहिएexport HISTSIZE= export HISTFILESIZE=
Matzz

3
@ सेटर जवाब में स्पष्ट रूप से कहा गया है "बैश 4.3 और बाद में ..."। सेंटोस 7 में बैश 4.2.x है।
विलाप

426

वर्षों में कई बड़े, बदसूरत पुनरावृत्तियों और अजीब बढ़त के मामलों के बाद, अब मेरे पास अपने .bashrc का एक संक्षिप्त खंड है जो इसे समर्पित है।

सबसे पहले, आपको अपने .bashrc (Ubuntu के लिए डिफ़ॉल्ट) के इस अनुभाग को टिप्पणी या हटाना होगा । यदि आप नहीं करते हैं, तो कुछ वातावरण (जैसे screenसत्र चलाना ) अभी भी आपके इतिहास को तोड़ देगा:

# for setting history length see HISTSIZE and HISTFILESIZE in bash(1)
# HISTSIZE=1000
# HISTFILESIZE=2000

दूसरा, इसे अपने .bashrc के नीचे जोड़ें :

# Eternal bash history.
# ---------------------
# Undocumented feature which sets the size to "unlimited".
# http://stackoverflow.com/questions/9457233/unlimited-bash-history
export HISTFILESIZE=
export HISTSIZE=
export HISTTIMEFORMAT="[%F %T] "
# Change the file location because certain bash sessions truncate .bash_history file upon close.
# http://superuser.com/questions/575479/bash-history-truncated-to-500-lines-on-each-login
export HISTFILE=~/.bash_eternal_history
# Force prompt to write history after every command.
# http://superuser.com/questions/20900/bash-history-loss
PROMPT_COMMAND="history -a; $PROMPT_COMMAND"

नोट: प्रत्येक कमांड को चलाने के तुरंत बाद लिखा जाता है, इसलिए यदि आप गलती से एक पासवर्ड पेस्ट करते हैं, तो आप इतिहास लिखने से बचने के लिए सिर्फ "किल -9 %%" नहीं कर सकते, आपको इसे मैन्युअल रूप से निकालना होगा।

यह भी ध्यान दें कि प्रत्येक बैश सत्र पूर्ण इतिहास फ़ाइल को मेमोरी में लोड करेगा, लेकिन भले ही आपकी इतिहास फ़ाइल 10MB तक बढ़ जाए (जिसमें लंबा, लंबा समय लगेगा) आप अपने बैश स्टार्टअप समय पर बहुत अधिक प्रभाव नहीं देखेंगे।


1
@AquariusPower - कोशिश करें कि ऊपर जो है, उसे -1 के बजाय खाली HISTFILESIZE=और HISTSIZE=खाली करें, और सुनिश्चित करें कि आपके पास .bashrc या .bash_profile या .profile में उन params की कोई अन्य घोषणा नहीं है।
फोटिनकिस

2
अपराधी .bashrc, मेरे पास उस सेटअप के बाद .bashrc ... द्वारा लोड की गई एक और फ़ाइल है, जो अब काम कर रही है! धन्यवाद!
कुंभ राशि

10
इसे मेरे मानक बैश सिस्टम में जोड़ें, और वर्तमान इतिहास को जोड़ना भी अच्छा है, इसलिए कॉन्फ़िगर करने के बाद, चलाएंcat ~/.bash_history >>~/.bash_eternal_history
बजे जीन-क्रिस्टोफ मीलाउड

2
इतिहास के इतिहास को बनाए रखने के लिए, इतिहास फ़ाइल को अपने वर्तमान इतिहास के साथ आरंभ करें।
आर्थर

3
बहुत धन्यवाद - तथ्य यह है कि सेटिंग HISTFILESIZE(और संभवतः HISTSIZE) तत्काल प्रभाव ले जाएगा overemphasized नहीं किया जा सकता है
Attie

37

जैसा कि जार्ज बेयर ने ऊपर उल्लेख किया है, HISTSIZEऔर HISTFILESIZEकुंजी है।

इसके अलावा, आपको निश्चित रूप से पर्यावरण चर की जांच करनी चाहिए HISTCONTROL, जो आपको डुप्लिकेट इतिहास कमांड ( HISTCONTROL=erasedups) को स्टोर न करने जैसी ठंडी चीजें करने देता है । असीमित इतिहास होने का कोई मतलब नहीं है यदि आपको सैकड़ों cd ..या उससे अधिक लाइनों के माध्यम से ब्राउज़ करना है ।

लिंक: यहां , और बैश इतिहास के साथ काम करना । बैश वेरिएबल एफएक्यू भी ब्राउजिंग के लायक है


14
सीडी की वे पंक्तियाँ आपको जारी किए गए आदेशों के लिए संदर्भ देती हैं। वे वास्तव में अविश्वसनीय रूप से उपयोगी हैं। मैं यह नहीं समझ सकता कि कोई भी कभी भी उन्हें हटाना क्यों नहीं चाहेगा, जब तक कि आपके द्वारा इतिहास का उपयोग करने का एकमात्र तरीका एक समय में एक कमांड के माध्यम से पेजिंग न हो।
आइकनोकॉस्ट

@simont मैं HISTCONTROL के साथ इग्नोरस्पेस विकल्प का भी उपयोग करता हूं, फिर कुछ भी मैं इतिहास के लिए नहीं लिखना चाहता हूं, जैसे कि पासवर्ड।
बिगटुनाकन 15

6
यदि आप आदेशों के अनुक्रम का पुन: उपयोग करते हैं तो लाइनों को क्रम में रखना बहुत उपयोगी है। जैसे Ctrl-rसोमेहर Ctrl-o Ctrl-o Ctrl-o Ctrl-o। इसलिए मैं इतिहास में दोहराव रखता हूं।
स्टीफन गौरिचोन

1
@ स्टीफन गॉरिचॉन किस Ctrl-oलिए?
सिप्रियन टॉमोयागै

4
@ CiprianTomoiagă Ctrl-oकमांड को प्रॉम्प्ट पर चलाता है और इतिहास में पिछले एक के तुरंत बाद कमांड को दिखाता है। एक लाभ यह है कि Ctrl-rएक पुरानी कमांड को खोजने के लिए उपयोग करने के बाद (संभवतः इतिहास में पड़ोसी आदेशों पर जाने के लिए ऊपर और नीचे तीर का उपयोग करके), यह Ctrlदबाए रखने के लिए पर्याप्त है और oकई बार फिर से कमांड की पिछली श्रृंखला को चलाने के लिए दबाएं , यहां तक ​​कि अनंत लूप में भी। अगर तुम चाहते हो। जीएनयू रीडलाइन - विकिपीडिया
स्टीफन गौरिचोन

22

यहां (कम से कम) दो प्रासंगिक एनवी संस्करण हैं:

  • इतिहास: इतिहास फ़ाइल में प्रविष्टियों की संख्या
  • HISTFILESIZE: इतिहास फ़ाइल में लाइनों की संख्या

मुझे लगता है कि हम इस बात से सहमत हो सकते हैं कि असीमित शब्द अक्सर बहुत बड़ा होता है (या क्या आपके पास असीमित फ़ाइल संग्रहण है?)। तो बस बहुत बड़ा मान सेट करें।


23
"यह ध्यान दिया जाना चाहिए कि 1000000000 केवल अनंत के बहुत छोटे मूल्यों के लिए अनंत के बराबर है। - sepp2k" योग्य। हां, मैं अनंत के छोटे मूल्यों के साथ संतुष्ट हूं (जैसे, लगातार टर्मिनल उपयोग का एक महीना)।
फ्रांसिस हैर्ट

6
लगातार टर्मिनल उपयोग का एक महीना अनंत का एक छोटा सा अंश है। मैं कहूंगा कि लगातार टर्मिनल का जीवनकाल अनंत के बहुत बहुत छोटे मूल्य के बराबर है । लेकिन मेरे शेल इतिहास के लिए लगातार टर्मिनल उपयोग का एक जीवनकाल काफी अच्छा है। ;)
आइकनोकॉस्ट

2
यदि आप HISTSIZE और / या HISTFILESIZE को बहुत बड़ा सेट करते हैं तो zsh के पुराने संस्करण कम से कम क्रैश हो जाएंगे क्योंकि यह पर्याप्त मेमोरी को प्री-आवंटित करने का प्रयास करता है। यह प्रासंगिक हो गया जब उपकरण चल रहे हैं जो zsh को अपने शेल (उदाहरण के लिए dbx) के रूप में उपयोग करते हैं।
ब्रायन वंडेनबर्ग
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.