Mar*_*cos 5 bash prompt command-history readline
类似于5000线的限制问题时的第一件事.bashrc中我
export HISTSIZE=10001
和
export 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)
我可能对此有一个可行的理论。
以前我有
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 个历史命令。