bash 中的历史列表在新登录时总是被截断为 5000 行

Mar*_*cos 5 bash prompt command-history readline

类似于5000线的限制问题时的第一件事.bashrc中export HISTSIZE=10001export HISTFILESIZE=$HISTSIZE

我的用户没有~/.inputrc文件,并且系统范围的/etc/inputrc文件(Ubuntu 11.10 的默认值未更改)没有任何history-size定义。readline手册页也没有显示任何默认值,除非暗示(0)或无限制。

然而,每次我登录时,我的提示都显示我只有 5000 个,尽管在上次会话期间添加了更多独特的命令行,或者在history -w没有注销的情况下保存。

这个限制在哪里设置,我该如何覆盖它?

我的提示和来自~/.bashrc或其来源的文件的其他可能有趣的设置:

PS1='\u@\h\w \d,\t\$ (\!) '
HISTCONTROL=erasedups:ignorespace
HISTSIZE=10001
export HISTIGNORE="[   ]*:&:bg:fg:exit"
export HISTFILESIZE=$HISTSIZE
export PROMPT_COMMAND="history -a"  
shopt -s histappend
HISTTIMEFORMAT="%Y-%m-%d_%H-%M-%S " 
shopt -s histreedit
Run Code Online (Sandbox Code Playgroud)

示例提示:

master@quant~/dev Mon Feb 27,10:08:29$ (5721)
Run Code Online (Sandbox Code Playgroud)

回答一些评论:

# to unpollute from other concurrent sessions, which previously already truncated file to 5000 at login:
master@ventana~ Mon Feb 27,18:47:35$ (9220) history -w  

master@ventana~ Mon Feb 27,18:51:34$ (9220) history |wc
   9219   69109  795143
master@ventana~ Mon Feb 27,18:51:51$ (9220) wc -l ~/.bash_history
18442 /home/master/.bash_history

# ignoring timestamps, nominally every other line like #1328201645
master@ventana~ Mon Feb 27,18:51:58$ (9220) grep -vc "^#[0-9]\{10\}$" .bash_history
9222
Run Code Online (Sandbox Code Playgroud)

Mar*_*cos 2

我可能对此有一个可行的理论。

以前我有

HISTSIZE=10001
Run Code Online (Sandbox Code Playgroud)

然而 ~/.bash_history 中的实际行看起来像

#1341908063
w;df
#1341908291
wizmo reboot!
#1341909327
sc stop uxsms; sleep 1; sc start UxSms
Run Code Online (Sandbox Code Playgroud)

换句话说,由于我的HISTTIMEFORMAT="%Y-%m-%d_%H-%M-%S "shell 环境设置,每隔一行都是一个时间戳。

因此,对于 5000 个命令的历史记录,文件中需要 10000 行。

现在我将限制设置为 HISTSIZE=20001

最后看到我的提示在全新登录后保留了超过 5000 个历史命令。