历史-a vs历史-w在BASH

时间:2011-09-08 07:14:40

标签: bash terminal gnome-terminal

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

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

3 个答案:

答案 0 :(得分:19)

你说了两个问题:

  

history -ahistory -w之间的区别是什么?

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

history -w替换历史文件的内容与您当前的会话历史记录。

  

哪一个避免了更多重复?

理论上也不是。 -a-w都不会检查重复项。实际上-w避免了更多的重复,因为它取代了历史文件的内容。文件中的任何可能的重复条目以及文件中的任何其他内容都将被删除。

详细了解bash手册中的history command


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

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

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

详细了解bash手册中的special variable HISTCONTROL

答案 1 :(得分:0)

您可以使用此

来避免重复
export HISTCONTROL=ignoredups

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

http://stefaanlippens.net/bashduplicates

答案 2 :(得分:0)

使用BASH变量PROMPT_COMMAND和历史记录并使用sort和uniq命令: $> 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“ 有了这个你不需要设置shopt -s histappend并导出HISTCONTROL = erasedups。 这将使您的历史记录和历史记录文件在运行时不会重复。您可以按顺序命令保存历史记录(提示:使用历史记录中的行号,从特定行开始位置排序,删除重复项后,再次使用行号排序)。