有没有一种方法可以使某些命令“粘”在 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
,则很难做到正确。erasedups
HISTCONTROL
桀骜
在~/.zshrc
:
fc -RI ~/.zsh_history.sticky
还要确保HISTSIZE
至少SAVEHIST
加上行数~/.zsh_history.sticky
加上您在长会话中执行的命令数,例如
SAVEHIST=1000
HISTSIZE=10000
如果你想确保粘性历史记录条目保留在内存中而不具有很大的HISTSIZE
,你可以通过手动修剪 中的历史记录来做到这一点precmd
,但这很麻烦(zsh并不真正支持重写历史记录,你必须fc -W
写入一个临时文件并读回编辑过的版本),如果您设置了hist_ignore_dups
或hist_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 中,我保留了一段历史长的时间。是.HISTSIZE
20000
(这涉及到各种设置,所以我不会在这里列出它们。)这给我带来了大约 10 个月的时间。我的历史文件 ( ~/.zhistory
) 大小为 1.1 MiB,并且不会使启动速度明显变慢。
我通常从其他终端提取工作历史记录fc -R
(当多个终端打开时 - 总是)。
但为了回答你的问题,我“标记”了我真正关心保存的命令,并# GOOD
在末尾添加了注释。经过大量实验后,这些通常是漫长且来之不易的。其中一些最终确实变成了可重用的小脚本,但标记是保存它的最快方法。由于历史悠久,我只需对 进行历史搜索# GOOD
,通常很快就能找到我要查找的内容。