19

我正在写我的PROMPT_COMMAND="history -a;$PROMPT_COMMAND",但我仍然从不同的终端会话中得到一些重复。看来我仍然会得到一些重复,但使用命令得到的更少PROMPT_COMMAND="history -w;$PROMPT_COMMAND"

我知道我可以做到,history -a;history -c; history -r但我不希望它们全部同步。我只希望在调用 history -n 时发生这种情况。我基本上只能使用 history -a 或 history -w 但我似乎无法找到两者之间的区别。哪一个会更好,以避免尽可能多的重复。

4

3 回答 3

28

你提出了两个问题:

history -a和 和有什么不一样history -w

history -a会将您当前的会话历史记录附加历史记录文件的内容中。

history -w会将历史文件的内容替换为您当前的会话历史

哪一个可以避免更多重复?

理论上都不是。既不-a也不-w检查重复项。实际上-w避免了更多重复,因为它替换了历史文件的内容。文件中任何潜在的重复条目以及文件中的任何其他内容都将被消除。

在 bash 手册中阅读有关该history命令的更多信息。


有关杀死重复项的其他可能性的更多信息:

特殊的 bash 变量HISTCONTROL=ignoredups在这里没有多大帮助,因为它只会消除在运行 shell 中输入的重复项。它不会阻止当前历史记录或历史记录文件中的现有重复项。此外ignoredups,仅忽略与先前命令重复的命令,而不是与历史中先前的任何命令重复的命令。

不幸的是,即使是很有希望HISTCONTROL=erasedups的东西在这里也没有多大帮助。erasedups删除与当前输入的命令匹配的任何历史条目。可悲的是,它只在当前会话历史记录中这样做。它不会在历史文件中搜索重复项。它也不会阻止重复项在使用history -n.

在 bash 手册中阅读有关特殊变量的更多信息。HISTCONTROL

于 2011-09-08T08:04:31.430 回答
0

你可以通过使用这个来避免重复

export HISTCONTROL=ignoredups

您可以查看此以获取更多信息:

http://stefaanlippens.net/bashduplicates

于 2011-09-08T07:19:34.783 回答
0

Use BASH variable PROMPT_COMMAND with history and using sort and uniq commands:

$> export PROMPT_COMMAND="history -a && history -c && sort ~/.bash_history | uniq > ~/.bash_history_new && rm ~/.bash_history && mv ~/.bash_history_new ~/.bash_history && history -r"

With this you don't need to set shopt -s histappend and do export HISTCONTROL=erasedups.

This will keep your history and history file without duplicates on-the-fly. You can play with keeping history in order commands has been typed (hint: use line numbers in history, sort from specific line start position and after removing duplicates do sort again with line numbers).

于 2016-01-10T11:24:09.853 回答