shell 历史记录中的粘性条目

WGH*_*WGH 4 shell bash command-history zsh

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

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

Gil*_*il' 5

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

巴什

~/.bashrc

history -r ~/.bash_history.sticky
Run Code Online (Sandbox Code Playgroud)

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

HISTFILESIZE=1000
HISTSIZE=10000
Run Code Online (Sandbox Code Playgroud)

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

桀骜

~/.zshrc

fc -RI ~/.zsh_history.sticky
Run Code Online (Sandbox Code Playgroud)

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

SAVEHIST=1000
HISTSIZE=10000
Run Code Online (Sandbox Code Playgroud)

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