2012-02-26 76 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