Вы можете настроить код, который будет выполняться при смене каталогов. В zsh это так же просто, как определить функцию и добавить ее в массив chpwd_functions
. В bash это требует немного больше работы, но вы тоже можете это сделать; см. Выполнение сценариев bash при входе в каталог , чтобы узнать, как определить функцию chpwd
, которая выполняется при каждом изменении каталога.
Для того, что вы хотите сделать, функция chpwd
должна записать текущую историю в старый файл. Чтобы сохранить историю в нужном месте при выходе из bash, установите переменную HISTFILE
в файл истории для нового каталога и прочтите новую историю.
chpwd () {
history -a
mkdir -p "$HOME/.bash_history.d/${PWD%/*}"
HISTFILE=~/.bash_history.d/$PWD
history -r
}
Обратите внимание, что я записываю историю в иерархию вашего домашнего каталога, а не в текущий каталог. Запись истории оболочки в текущий каталог была бы чрезвычайно опасной и разрушительной : вы бы столкнулись с утечками конфиденциальности повсюду, вы рискуете изменить непредусмотренные файлы (что, если имя файла истории уже существует символическая ссылка на какое-то другое место?) и т. д.
Вероятно, было бы лучше записывать историю после каждой команды. В bash вы можете включить это с помощью параметра histappend
. С этой опцией вам не нужно явно запускать history -a
.
shopt -s histappend
chpwd () {
mkdir -p "$HOME/.bash_history.d/${PWD%/*}"
HISTFILE=~/.bash_history.d/$PWD
history -r
}