Kar*_*ter 5 linux bash history command-line
重复项已经关闭,但这还不够(我觉得我必须经常输入命令)。
假设我有 2000 条bash
历史记录和一个我过去经常使用(n
多次)但最近不使用的命令,现在我想再次使用。假设此命令位于历史记录中最旧的位置,并且将在下一次非重复命令执行后被逐出。我希望保留此命令,并将最旧的命令(使用计数 < n
)从历史记录中逐出。
有人可能会争辩说,这使得bash
历史不再是(线性)历史。我同意,但不在乎,因为我想轻松访问我最喜欢的命令(自动收集)。
我bash
在 Ubuntu 15.10 上使用4.3.42。
警告:这并不是问题的答案,而是对您可能认为有用的方法的建议。
我感受到你的痛苦。我也喜欢保留我的 Bash 历史记录,并且能够回忆起我很久以前运行过的命令。我开发了一种方法,使我能够将所有 Bash 历史记录保持在合理的历史记录大小内。
我的 Bash 历史记录设置是:
HISTCONTROL=ignoreboth:erasedups
HISTIGNORE="?:??:???:$HISTIGNORE"
Run Code Online (Sandbox Code Playgroud)
这有助于减少最终出现在 Bash 历史记录中的条目。像这样的命令ls
输入起来比调用起来要短,所以存储它们是没有意义的(这就是目的HISTIGNORE
)。ignoreboth
是ignorespace
and的简写ignoredups
。前者防止带有前导空格的条目最终出现在历史记录中。我将它用于我知道我永远不会回忆起或永远不想回忆起的命令,例如 rm -rf *
:)。默认情况下,我会忽略更多内容(未显示),这会减小历史记录的大小。
尽管采取了上述对策,重复项仍然出现在我的历史记录中(例如,由于同时打开多个 Bash shell)。我的提示中有一个计数器,显示当前的历史记录大小
PS1='\u@\h:\w:\!> '
Run Code Online (Sandbox Code Playgroud)
(相关代码是\!
,又名该命令的历史编号。)这向我展示了何时需要“清理”(请参阅下一步)。
我通过运行以下命令定期“清理”我的 Bash 历史记录:
tac ~/.bash_history | awk '!seen[$0]++' | tac > ~/.bash_history.new && mv ~/.bash_history.new ~/.bash_history
Run Code Online (Sandbox Code Playgroud)(当然假设您的 Bash 历史记录存储在~/.bash_history
其中)。此命令在尊重顺序的同时删除重复项:最后使用的命令保留在最后。仅保留最后一个(最近的)重复项。
通过这种方法,我能够将所有 Bash 历史记录保持在 600 到 1000 个条目的非常适度的历史记录大小内。
归档时间: |
|
查看次数: |
244 次 |
最近记录: |