जवाबों:
इसे अपने .bashrc
(Linux) या .bash_profile
(MacOS) में जोड़ें:
export HISTFILESIZE=
export HISTSIZE=
वहाँ तुम जाओ, असीमित इतिहास। वर्तमान में मेरे पास 27000 प्रविष्टियाँ हैं :)
से man bash
:
यदि
HISTFILESIZE
सेट नहीं किया जाता है, तो कोई छंटनी नहीं की जाती है।
इसका मतलब यह है .bash_history
कि कभी नहीं काट दिया
इसके साथ ही वही लागू होता है HISTSIZE
, हालाँकि मुझे वह दस्तावेज नहीं मिला।
एक और साफ सुविधा जो मैं आजमाने जा रहा हूँ वह है:
यदि
HISTTIMEFORMAT
वैरिएबल सेट किया गया है, तो समय स्टैम्प्स को इतिहास फ़ाइल में लिखा जाता है, जो इतिहास टिप्पणी चरित्र के साथ चिह्नित है, इसलिए उन्हें शेल सत्रों में संरक्षित किया जा सकता है, जैसे कि निम्नलिखित:
export HISTTIMEFORMAT="%F %T "
मुझे पता है अगर तुम कोशिश की है कि पहले से ही ...
gdb
; यदि आप एक HISTSIZE
चर सेट करते हैं, तो इसे 0 के रूप में ले जाएगा, इस प्रकार पूरी तरह से इतिहास आकार को अक्षम कर देगा।
export
, HISTFILESIZE
लाइनों की संख्या में है (बाइट्स नहीं), और इतिहास फ़ाइल ट्रंकटिंग तब होती है जब आप चर सेट करते हैं HISTFILESIZE
(और जब शेल बाहर निकलता है)। इसलिए इसे अलग-अलग मानों के साथ अपनी कॉन्फ़िग फ़ाइल में दो बार सेट न करें ...
( https://stackoverflow.com/a/19533853/128597 से मेरे उत्तर को रद्द करना )
वर्षों में कई बड़े, बदसूरत पुनरावृत्तियों और अजीब बढ़त के मामलों के बाद, अब मेरे पास अपने .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".
# https://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 तक बढ़ जाए (जिसमें लंबा, लंबा समय लगेगा) आप अपने बैश स्टार्टअप समय पर बहुत अधिक प्रभाव नहीं देखेंगे।
HISTFILESIZE
, तो इतिहास फ़ाइल को छोटा कर दिया जाता है , यही कारण है कि आपको इस तरह की किसी भी घटना को दूर करना चाहिए, जिसको आप चाहते हैं। इसे शेल एग्जिट पर भी काट दिया जाएगा (लेकिन यह अपेक्षित है)। और आप की जरूरत नहीं होनी चाहिए export
।
bash --norc
करना इतिहास को फिर से काट देगा।
export HISTFILE="/home/$USER/hist/`uname -n``tty | tr '/' '-'`"
शेल इतिहास को प्रति सत्र (hostname और tty नाम के आधार पर) अलग रखने के लिए उपयोग करता हूं । बेशक मुझे पहले ~ / हिस्ट डायरेक्टरी बनानी होगी।
PROMPT_COMMAND="${PROMPT_COMMAND:+${PROMPT_COMMAND} ;}history -a";
~ / .Bashrc में शामिल करें :
# append a session's history on shell exit
shopt -s histappend
export HISTFILESIZE=
export HISTSIZE=
यह उत्तर निम्न मानदंडों को पूरा करता है:
एक अलग मास्टर इतिहास (कोई सत्र आपके इतिहास को बाधित नहीं कर सकता)
स्वचालित इतिहास लेखन (कोई हॉटकी नहीं)
अनंतिम लिखते हैं (प्रत्येक आदेश के बाद कोई जोड़ नहीं)
इंटरएक्टिव स्टार्टअप पर, यदि $HISTFILESIZE
किसी नंबर पर सेट किया गया है , तो $HISTFILE
उस नंबर पर ट्रैश करें। इंटरेक्टिव क्लोज़ पर, यदि शेल विकल्प histappend
सेट है, तो बैश $HISTSIZE
लाइन को जोड़ देता है $HISTFILE
, अन्यथा यह ओवरराइट हो जाता है $HISTFILE
।
हर बार टर्मिनल में एक टैब बनाया ~/.bash_profile
जाता है, पढ़ा जाता है, जिसका अर्थ है कि बैश आपके पढ़ने के लिए नहीं जाता है ~/.bashrc
। निम्न पंक्ति को अपने में जोड़ें ~/etc/bash_profile
:
# if bashrc has content, source it
[[ -s ~/.bashrc ]] && . ~/.bashrc
यदि आप स्क्रीन का उपयोग करते हैं, तो आपकी कॉन्फ़िगरेशन फ़ाइल ~ / .screenrc है। यदि आप इतिहास रिकॉर्ड करने के लिए स्क्रीन चाहते हैं, तो आपको बस एक लॉगिन शेल का उपयोग करने के लिए इसे सेट करने की आवश्यकता है जो आपकी बैश स्टार्टअप फ़ाइलों को स्रोत बनाएगा (और आपके इतिहास को रिकॉर्ड करें)।
# use bash, make it a login shell
defshell -bash
एक अलग अवधारणा (लागू नहीं हो सकती है) लेकिन शेल-सिंकunlimited
का उपयोग करते समय आपके पास इतिहास हो सकता है ।