从脚本或非交互式 zsh 实例执行历史记录或 fc

从脚本或非交互式 zsh 实例执行历史记录或 fc

通过阅读 zsh 文档,history并且fc不会~/.zsh_history以非交互模式访问完整内容。我正在寻找一种方法来实现这一点,以便我可以编写搜索实用程序的脚本。我尝试过的事情:

➜  ~ fc -l 0 1
    1  ls
➜  ~ echo $HISTFILE
/Users/username/.zsh_history
➜  ~ zsh -c 'echo $HISTFILE'

➜  ~ zsh -c 'HISTFILE=~/.zsh_history; echo $HISTFILE'
/Users/username/.zsh_history
➜  ~ zsh -c 'HISTFILE=~/.zsh_history; history'
zsh:fc:1: no such event: 1
➜  ~ zsh -c 'HISTFILE=~/.zsh_history; fc -l 0 1'
zsh:fc:1: no events in that range
➜  ~ zsh -c 'HISTFILE=~/.zsh_history; fc -R; fc -l 0 1'
zsh:fc:1: no events in that range
➜  ~ zsh -c 'HISTFILE=~/.zsh_history; fc -R -l 0 1'
<NO OUTPUT>

在 bash 中,您可以启用历史记录选项,set -o history但 zsh 不存在该选项。

另一种方法是直接访问文件,但这样~/.zsh_history我就会失去格式支持。是否有一个内置实用程序可以通过管道进行上述格式化?historyfc~/.zsh_history

答案1

调用fc -R读取历史文件。这只会读取最后的$HISTSIZE条目,因此HISTSIZE在调用之前设置为一个较大的值fc

HISTSIZE=999999999
fc -R ~/.zsh_history

相关内容