Bash – Create history log per working directory in bash

bashcommand historyworking directory

I was wondering if it is possible to keep a file containing history per current working directory. So for example if I was working in /user/temp/1/ and typed a few commands, these commands would be saved in /user/temp/1/.his or something. I am using bash.

Best Answer

Building off the answer provided by Groggle, you can create an alternative cd (ch) in your ~/.bash_profile like.

function ch () {
    cd "$@"
    export HISTFILE="$(pwd)/.bash_history"
}

automatically exporting the new HISTFILE value each time ch is called.

The default behavior in bash only updates your history when you end a terminal session, so this alone will simply save the history to a .bash_history file in whichever folder you happen to end your session from. A solution is mentioned in this post and detailed on this page, allowing you to update your HISTFILE in realtime.

A complete solution consists of adding two more lines to your ~/.bash_profile,

shopt -s histappend
PROMPT_COMMAND="history -a;$PROMPT_COMMAND"

changing the history mode to append with the first line and then configuring the history command to run at each prompt.