2012-02-26 69 views
186

我希望我的.bash_history文件無限制。例如因此,我總是可以回頭看看我是如何構建/配置某些東西的,或者那些漂亮的命令是什麼,或者幾周前某些命令是如何破壞的。我如何更改此設置?無限制Bash歷史

+4

http://超級用戶。com/questions/137438/how-to-unlimited-bash-shell-history – tekknolagi 2012-02-26 21:17:28

+2

我建議將@fotinakis的答案標記爲公認的答案,因爲它更全面,涵蓋了許多奇怪的陷阱。 – 2016-09-10 23:29:05

回答

154

HISTSIZEHISTFILESIZE爲空字符串:

HISTSIZE= HISTFILESIZE= 

bash 4.3 and later你也可以使用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). 
+0

我可以將此設置全局放入全局bashrc中,以覆蓋所有用戶的設置嗎? – 2014-03-14 22:06:06

+7

(export PROMPT_COMMAND ='history -a')可以立即刷新命令以打擊歷史記錄。 – cruelcage 2014-09-11 13:49:15

+1

設置''HISTSIZE = HISTFILESIZE =''導致完全禁用bash歷史記錄,至少對我而言。 – 2017-02-27 07:53:32

18

有(至少)兩個相關的ENV瓦爾這裏:

  • HISTSIZE:在歷史文件中的條目數
  • HISTFILESIZE:線在歷史文件數

我認爲我們可以同意,無限制通常與相同很大(或者您是否擁有無限制的文件存儲?)。所以只需設置非常大的值。

+14

「應該指出的是,對於非常小的無窮大值,1000000000只等於無窮大。 - sepp2k」lol。是的,我滿足於無限的小值(比如說頻繁使用終端的月份)。 – 2012-02-28 03:25:44

+3

頻繁使用終端的月份是無窮無盡的一小部分。我會說終身使用頻繁的終身等同於非常非常非常小的無限價值。但終身使用頻繁的終身足以滿足我的shell歷史。 ;) – iconoclast 2014-07-14 14:36:58

+1

如果將HISTSIZE和/或HISTFILESIZE設置得太大,zsh的舊版本至少會崩潰,因爲它會嘗試預先分配足夠的內存。這在運行使用zsh作爲其shell的工具(例如dbx)時變得相關。 – 2017-10-09 19:09:55

30

正如JörgBeyer上面提到的,HISTSIZEHISTFILESIZE是關鍵。

此外,你應該肯定退房環境變量HISTCONTROL,它可以讓你不喜歡不存儲重複歷史命令很酷的事情(HISTCONTROL=erasedups)。如果您需要瀏覽數百行cd ..或類似內容,則無限歷史毫無意義。

鏈接:here和​​。 bash變量常見問題也是worth browsing

+0

我grep它,但仍然,很高興知道。 – 2012-02-28 03:26:53

+5

這些cd的行給你發出命令的上下文。它們實際上非常有用。我無法理解爲什麼有人會想要刪除它們,除非你使用歷史的唯一方法是通過一次一個命令分頁。 – iconoclast 2014-07-14 14:38:29

+0

@simont我也在HISTCONTROL中使用了ignorespace選項,然後用它來做任何我不想寫入歷史的東西,比如密碼。 – bigtunacan 2015-11-06 15:09:26

272

許多大型的,醜陋的迭代和怪異的邊緣情況,多年來,我現在有一個致力於此的簡潔部分my .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 %%」,你需要手動刪除它。

還要注意,每個bash命令將加載在內存中的全部歷史文件,但即使你的歷史文件增長到10MB(這將需要一個很長很長的時間),你不會注意到太多的效果你的bash啓動時間。

+0

我能在全球.bashrc中把這個設置使全球它覆蓋所有用戶的設置? – 2014-03-14 22:05:09

+0

@ user01,我想是的,你可以,我只會設置一個很大的限制。只是要確定。 – freedev 2014-06-09 09:18:40

+0

我做了所有這些和我的日誌不斷被封頂在2000 :(可以我的版本被竊聽嗎?任何其他技巧?ubuntu 14.04,bash 4.3.11,HISTFILE =〜/ .bash_eternal_history,HISTFILESIZE = -1,HISTSIZE = -1 ,HISTTIMEFORMAT ='[%F%T]'(而不是'-1'我試過這個空選項也無濟於事。) – 2014-06-13 22:21:47