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

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

类似于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

提示示例:

master@quant~/dev Mon Feb 27,10:08:29$ (5721)

回答一些评论:

# 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

答案1

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

以前我有

HISTSIZE=10001

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

#1341908063
w;df
#1341908291
wizmo reboot!
#1341909327
sc stop uxsms; sleep 1; sc start UxSms

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

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

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

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

相关内容