保留每个工作目录的历史记录(参见每个 shell 会话)

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

  1. 您将被移动到您的项目目录中
  2. 当前历史将被保存 ( history -w)
  3. 那么保存在内存中的历史将被重置 ( history -c)
  4. 项目历史文件将被设置为/home/user/.a_history并读取 ( history -r)


Sté*_*las 5

使用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.