Scripting

從腳本或非互動式 zsh 實例執行 history 或 fc

  • July 12, 2020

通過閱讀 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文件,但我會失去對格式支持的history支持fc。是否有一個內置實用程序我可以通過管道~/.zsh_history進行上述格式化?

呼叫fc -R以讀取歷史文件。這只會讀取最後的$HISTSIZE條目,因此HISTSIZE在呼叫之前設置為較大的值fc

HISTSIZE=999999999
fc -R ~/.zsh_history

引用自:https://unix.stackexchange.com/questions/597995