bash 历史记录中的重复项

bash 历史记录中的重复项

我的中有以下内容~/.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

相关内容