我的中有以下内容~/.bashrc
HISTCONTROL=ignoreboth:erasedups
然而,我的历史记录包含许多重复项,例如我有 5 个条目sudo apt-get upgrade
。
我正在运行Raspbian
Jessie
并且主要通过 访问ssh
。
PS 我在写这篇文章时刚刚输入sudo apt-get upgrade
,现在只有一个条目。知道为什么吗?我该如何预防?
答案1
无需擦除,因为您已经忽略了两者。
Ignoreboth 将处理重复命令和空白命令。
尝试只忽略两者或删除重复项。
"HISTCONTROL=ignoreboth"
仅使用此并重新加载 bash 。谢谢。
答案2
唯一地记录每个新命令是很棘手的。首先您需要添加
~/.profile
或类似:
HISTCONTROL=erasedups
PROMPT_COMMAND='history -w'
然后你需要添加~/.bash_logout
:
history -a
history -w
答案3
有二命令列表:
- 在记忆中。
- 在文件中。
HISTCONTROL 的设置作用于内存列表。该列表可以通过不带选项的命令查看 history
。如果您键入命令,它将被附加到列表中。如果要添加的命令等于列表中的最后一个命令并且ignoredups
设置了该选项,或者erasedups
设置了该选项,则该命令将被丢弃。在这种情况下,两个选项都有一些相似之处。
如果erasedups
设置了该选项,则该命令之前出现的所有内容都将从内存列表中删除(但不会从文件中删除)。此次删除将仅有的发生新的重复命令。也就是说:重复的命令将保留,直到将新命令追加到列表中为止。
要将内存列表写入文件,可以使用以下命令history -w
(该命令将用新副本替换整个文件)。文件中的列表在写入之前不会更新。或附加history -a
(这将仅附加之前未附加的新行,并且可能会在文件中留下旧的重复命令)。当 bash 退出时,该选项histappend
将选择替换或附加到文件。追加可能会使重复的命令保持不变。
清理文件列表(保留命令的最后一次出现)的一种方法是:
$ history | sort -urk2 | sort -n | sed 's/^ \+[0-9]\+ \+//' >~/.bash_history
history -w
将每个命令附加到文件的一种方法是使用提示命令 bash 变量在每个新命令行上执行:
$ PROMPT_COMMAND='history -w'
要使其自动执行,应将以下所有命令添加到~/.bashrc
(通常在 linux 中)或~/.profile
(通常在 mac 中):
HISTFILE=${HISTFILE:-~/.bash_history}
HISTCONTROL=ignoreboth:erasedups
PROMPT_COMMAND='history -w'
nl "$HISTFILE"|sort -k2 -k 1,1nr|uniq -f1|sort -n|cut -f2- >"${HISTFILE}.temp" && mv "$HISTFILE"{.temp,}
history -c; history -r