如何从Bash历史记录文件中删除重复的命令?

欧根·康科夫(Eugen Konkov)

我已经配置好了自己的 .bash_myhistory

export HISTFILESIZE=
export HISTSIZE=
export HISTTIMEFORMAT="[%F %T] "

export HISTFILE=~/.bash_myhistory
PROMPT_COMMAND="history -a; history -r; $PROMPT_COMMAND"

当我运行时,history它向我展示了许多重复的输出:

 $ history | grep 'git rebase'
   75  [2018-05-23 16:39:39] git rebase -p dev_hypermouse 
  168  [2018-05-23 19:27:39] man git rebase 
  547  [2018-05-25 19:01:44] git rebase master 
  639  [2018-05-25 20:24:52] git rebase master 
  869  [2018-05-28 14:07:33] git rebase xxx
  921  [2018-05-28 16:12:20] git rebase dash_v2 
  922  [2018-05-28 16:12:33] man git rebase
  925  [2018-05-28 16:13:21] man git rebase
  927  [2018-05-28 16:15:42] git rebase xxx dash_v2 
  937  [2018-05-28 16:17:46] git rebase --onto dash_v2 xxx 296-ToS-component 
 2177  [2018-05-23 16:39:39] git rebase -p dev_hypermouse 
 2270  [2018-05-23 19:27:39] man git rebase 
 2649  [2018-05-25 19:01:44] git rebase master 
 2741  [2018-05-25 20:24:52] git rebase master 
 2971  [2018-05-28 14:07:33] git rebase xxx
 3023  [2018-05-28 16:12:20] git rebase dash_v2 
 3024  [2018-05-28 16:12:33] man git rebase
 3027  [2018-05-28 16:13:21] man git rebase
 3029  [2018-05-28 16:15:42] git rebase xxx dash_v2 
 3039  [2018-05-28 16:17:46] git rebase --onto dash_v2 xxx 296-ToS-component 
 4239  [2018-05-23 19:27:39] man git rebase 
 4618  [2018-05-25 19:01:44] git rebase master 
 4710  [2018-05-25 20:24:52] git rebase master 
 4940  [2018-05-28 14:07:33] git rebase xxx
 4992  [2018-05-28 16:12:20] git rebase dash_v2 
 4993  [2018-05-28 16:12:33] man git rebase
 4996  [2018-05-28 16:13:21] man git rebase
 4998  [2018-05-28 16:15:42] git rebase xxx dash_v2 
 5008  [2018-05-28 16:17:46] git rebase --onto dash_v2 xxx 296-ToS-component 
 ...

$ cat ~/.bash_myhistory | grep 'git rebase'不:

man git rebase 
git rebase master 
git rebase master 
git rebase xxx
git rebase dash_v2 
man git rebase
man git rebase
git rebase xxx dash_v2 
git rebase --onto dash_v2 xxx 296-ToS-component 
man git rebase
man git rebase
history | grep git rebase
history | grep 'git rebase'

如何修复来自的重复输出history

UPD

export HISTCONTROL=ignoreboth:erasedups历史看起来好多了,但复制仍然存在:

$ history | grep 'git rebase'
   34  [2018-05-23 19:27:39] man git rebase 
  413  [2018-05-25 19:01:44] git rebase master 
  505  [2018-05-25 20:24:52] git rebase master 
  735  [2018-05-28 14:07:33] git rebase xxx
  787  [2018-05-28 16:12:20] git rebase dash_v2 
  788  [2018-05-28 16:12:33] man git rebase
  791  [2018-05-28 16:13:21] man git rebase
  793  [2018-05-28 16:15:42] git rebase xxx dash_v2 
  803  [2018-05-28 16:17:46] git rebase --onto dash_v2 xxx 296-ToS-component 
 2038  [2018-06-02 14:49:31] man git rebase
 2058  [2018-06-02 14:52:33] man git rebase
 2060  [2018-06-02 15:11:08] history | grep git rebase
 2061  [2018-06-02 15:11:13] history | grep 'git rebase'
 2063  [2018-06-02 15:12:45] cat .bash_myhistory | grep 'git rebase'
 2064  [2018-06-02 15:09:58] man git rebase
 2077  [2018-06-02 15:35:41] history | grep 'git rebase'
 2111  [2018-05-23 19:27:39] man git rebase 
 2490  [2018-05-25 19:01:44] git rebase master 
 2582  [2018-05-25 20:24:52] git rebase master 
 2812  [2018-05-28 14:07:33] git rebase xxx
 2864  [2018-05-28 16:12:20] git rebase dash_v2 
 2865  [2018-05-28 16:12:33] man git rebase
 2868  [2018-05-28 16:13:21] man git rebase
 2870  [2018-05-28 16:15:42] git rebase xxx dash_v2 
 2880  [2018-05-28 16:17:46] git rebase --onto dash_v2 xxx 296-ToS-component 
 4115  [2018-06-02 14:49:31] man git rebase
 4135  [2018-06-02 14:52:33] man git rebase
 4137  [2018-06-02 15:11:08] history | grep git rebase
 4138  [2018-06-02 15:11:13] history | grep 'git rebase'
 4140  [2018-06-02 15:12:45] cat .bash_myhistory | grep 'git rebase'
 4141  [2018-06-02 15:09:58] man git rebase
 4154  [2018-06-02 15:35:41] history | grep 'git rebase'

UPD
即使添加export HISTCONTROL=ignoreboth:erasedups历史记录也如下所示:

25988  [2018-07-26 17:13:19] gd 1
25989  [2018-07-26 15:45:47] mc
25990  [2018-07-26 13:57:46] mc
25991  [2018-07-26 09:23:28] mc

我也注意到一些命令从历史=(

验证
export HISTCONTROL=ignoreboth:erasedups

从bash手册页:

历史控制

用冒号分隔的值列表,用于控制如何在历史记录列表中保存命令。如果值列表包含ignorespace,则以空格字符开头的行不会保存在历史记录列表中。忽略的值将导致不保存与上一个历史记录条目匹配的行。ignoreboth的值是ignorespace和ignoreups的简写。擦除值的值导致在保存该行之前,将与当前行匹配的所有先前行从历史记录列表中删除。不在上面列表中的任何值都将被忽略。如果未设置HISTCONTROL或不包含有效值,则由外壳解析器读取的所有行都将存储在历史记录列表中,但要遵循HISTIGNORE的值。多行复合命令的第二行和后续行未经测试,并且无论HISTCONTROL的值如何都添加到历史记录中。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何从irb历史记录中删除重复的命令?

如何从bash历史记录中删除重复项?

如何使用bash历史记录使用历史记录中的参数运行命令?

如何从文件加载bash命令历史记录

从Bash历史记录文件中删除某行

如何从TCSH历史记录中删除单个命令?

如何防止命令从历史记录中删除?

如何从bash历史记录中删除所选结果?

如何从Git历史记录中删除文件?

如何从git历史记录中删除“太大”文件?

如何从CVS历史记录中永久删除文件

删除历史记录文件后,为什么在历史记录中仍然有较旧的命令?

为什么历史记录和.bash_history不同,如何删除历史记录中的条目?

如何合并终端上重复的命令历史记录?

bash历史记录中的重复项

如何在不使用命令行的情况下从GitHub历史记录中删除文件

如何启用bash命令历史记录?

bash:每个命令的历史记录。它是如何工作的?

在macOS上,如何从终端>外壳>新命令中删除过去的命令历史记录?

在bash历史记录中搜索已键入的命令

从bash历史记录中删除最后N行

如何从Git存储库中的提交历史记录中删除/删除大文件?

如何从git存储库中删除文件,但仅删除历史记录中的某个点?

如何删除github上的文件更改历史记录?

Git-从分支的历史记录中删除文件

从所有git历史记录中删除文件

从 git 历史记录中删除文件的某些内容

从Git历史记录中删除大文件

恢复SVN中已删除文件的历史记录