Официальный [удобный для новичков дистрибутив] справочник для настоящих новичков [закрыто]

Вы можете настроить код, который будет выполняться при смене каталогов. В 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
}

0
13.04.2017, 15:36
0 ответов

Теги

Похожие вопросы