soh*_*oke 11 shell command-history directory cd-command
有没有办法将现代 shell 的历史功能限定为路径?
我的工作环境被拆分为文件系统上的路径,并且 shell 活动的模式(例如重复发出的命令)往往因每个“项目”而异。如果我可以将历史功能范围限定为从当前路径(或子路径)发出的命令,那就太好了。
apa*_*aul 10
如果您将其bash
用作外壳,这不是一个简洁的答案,而是另一种选择:您可以在.bashrc
.
例如:
alias a='cd /tmp/A ; history -w ; history -c ; export HISTFILE=/home/user/.a_history ; history -r $HISTFILE'
alias b='cd /tmp/B ; history -w ; history -c ; export HISTFILE=/home/user/.b_history ; history -r $HISTFILE'
Run Code Online (Sandbox Code Playgroud)
然后,如果您键入a
:
history -w
)history -c
)/home/user/.a_history
并读取 ( history -r
)使用zsh
,您可以执行以下操作:
mkdir -p ~/.zsh/dirhist
Run Code Online (Sandbox Code Playgroud)
并添加到您的 ~/.zshrc:
HISTSIZE=1000
SAVEHIST=10000
setopt HIST_SAVE_NO_DUPS INC_APPEND_HISTORY
HISTFILE=~/.zsh/dirhist/${PWD//\//@}
chpwd() {
[[ $PWD = $OLDPWD ]] || fc -Pp ~/.zsh/dirhist/${PWD//\//@}
}
Run Code Online (Sandbox Code Playgroud)
chpwd()
每当当前目录更改时调用。在那里,我们将历史文件重置为类似~/.zsh/dirhist/@foo@bar
当您cd
使用/foo/bar
.