shell 历史记录中的粘性条目

shell 历史记录中的粘性条目

有没有一种方法可以使某些命令“粘”在 shell 历史记录中?

我想保存一些最喜欢的命令,可以使用 Ctrl+R 进行搜索,就像历史记录的其余部分一样,但它们永远不应该过期。

答案1

一种简单的方法是将代码放入 shell 启动文件中以读取附加历史文件,并确保在内存中存储足够多的历史行,以便不会忘记粘性行。

巴什

~/.bashrc

history -r ~/.bash_history.sticky

还要确保HISTSIZE至少HISTFILESIZE加上行数~/.bash_history.sticky加上您在长会话中执行的命令数,例如

HISTFILESIZE=1000
HISTSIZE=10000

如果您想确保粘性历史记录条目保留在内存中而不具有非常大的值HISTSIZE,您可以通过手动修剪历史记录PROMPT_COMMAND来实现,但如果您有in history -d,则很难做到正确。erasedupsHISTCONTROL

桀骜

~/.zshrc

fc -RI ~/.zsh_history.sticky

还要确保HISTSIZE至少SAVEHIST加上行数~/.zsh_history.sticky加上您在长会话中执行的命令数,例如

SAVEHIST=1000
HISTSIZE=10000

如果你想确保粘性历史记录条目保留在内存中而不具有很大的HISTSIZE,你可以通过手动修剪 中的历史记录来做到这一点precmd,但这很麻烦(zsh并不真正支持重写历史记录,你必须fc -W写入一个临时文件并读回编辑过的版本),如果您设置了hist_ignore_dupshist_ignore_all_dups选项,则很难做到正确。

答案2

我的解决方案是一个 cron 作业和 .*sh_history 文件中的大量行

在一天结束时,此 cron 条目运行(我的设置为晚上 11 点)

0 23 * * * cat /home/username/.bash_history >> /home/username/BIGHISTORY

如果粘性命令碰巧脱离了常规历史滚动缓冲区,我可以使用简单的 grep 命令在 BIGHISTORY 文件中找到它,并将其带回到折叠中。我知道这不是您想要的,但这是穷人的版本,用最少的努力最接近。

答案3

bash(不知道zsh)中,您可以设置

export HISTFILESIZE=-1
export HISTSIZE=-1

在你的身上.bashrc,让你的历史永远存在。我知道,这不完全是您要找的。不过,对于您最喜欢的命令,我建议创建别名或函数。

答案4

在 Zsh 中,我保留了一段历史长的时间。是.HISTSIZE20000(这涉及到各种设置,所以我不会在这里列出它们。)这给我带来了大约 10 个月的时间。我的历史文件 ( ~/.zhistory) 大小为 1.1 MiB,并且不会使启动速度明显变慢。

我通常从其他终端提取工作历史记录fc -R(当多个终端打开时 - 总是)。

但为了回答你的问题,我“标记”了我真正关心保存的命令,并# GOOD在末尾添加了注释。经过大量实验后,这些通常是漫长且来之不易的。其中一些最终确实变成了可重用的小脚本,但标记是保存它的最快方法。由于历史悠久,我只需对 进行历史搜索# GOOD,通常很快就能找到我要查找的内容。

相关内容