Create a gist now

Instantly share code, notes, and snippets.

What would you like to do?
directory based history bash profile
function mycd()
#if this directory is writable then write to directory-based history file
#otherwise write history in the usual home-based history file
echo "#"`date '+%s'` >> $HISTFILE
echo $USER' has exited '$PWD' for '$@ >> $HISTFILE
builtin cd "$@" # do actual cd
if [ -w $PWD ]; then export HISTFILE="$PWD/.dir_bash_history"; touch $HISTFILE; chmod --silent 777 $HISTFILE;
else export HISTFILE="$HOME/.bash_history";
echo "#"`date '+%s'` >> $HISTFILE
echo $USER' has entered '$PWD' from '$OLDPWD >> $HISTFILE
alias cd="mycd"
#initial shell opened
export HISTFILE="$PWD/.dir_bash_history"
#timestamp all history entries
export HISTTIMEFORMAT="%h/%d - %H:%M:%S "
export HISTCONTROL=ignoredups:erasedups
export HISTSIZE=1000000
export HISTFILESIZE=1000000
shopt -s histappend ## append, no clearouts
shopt -s histverify ## edit a recalled history line before executing
shopt -s histreedit ## reedit a history substitution line if it failed
## Save the history after each command finishes
## (and keep any existing PROMPT_COMMAND settings)
export PROMPT_COMMAND="history -a; history -c; history -r; $PROMPT_COMMAND"

leipzig commented Jan 21, 2012

Directory Based Bash Histories


Using a directory-based bash history allows for a record of shell actions on a directory basis, so a group of developers have some record of what was done while in a directory, when, and by whom. This can be helpful when trying to reconstruct history with limited documentation.

This was derived from


cd ~/
git clone git:// .mycd
echo '. $HOME/.mycd/' >> ~/.bash_profile
source ~/.bash_profile


  • add .dir_bash_history to .gitignore files in git repositories

mmcdaris commented Feb 7, 2014

This is cool, thanks for writing it and documenting.

inodb commented May 8, 2015

Looks interesting! Do you still use this or have you come up with a different way to do things?


leipzig commented May 23, 2015

I still use this although I recognize the use of both personal and directory-based histories.

btw, for a global git ignore:

so... in ~/.config/git/ignore have:

rvelseg commented Jul 29, 2016

Awesome, Thanks :D

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment