Previously, I tried to use
zsh when I am working, so that my default
bash history will not be filled with project related commands, especially
git commands. Because some of my bash history are useful like
ffmpeg related commands. So, I tried to distinct project work and non-project work with
bash, so that they have different shell histories.
However, there are two problems when I use
- All my projects use the same zsh history. The old history may be lost if I have too many commands (depends on
- zsh is slow with
However, zsh has one thing better than bash, that is, auto-completion navigation. Let’s say your directory has various sub-directories, double tab will bring to directory navigation that can be controlled with arrow keys. This is useful for me to navigate to non-alphabetic directories, like the directory with CJK characters.
Due to the slowness of git auto-completion as mentioned above, I decided to find an alternative solution, so that I can use
bash instead of
zsh, and separate the shell history from non-project work. At the end, I come out with this,
#!/bin/bash # source any shell script, like rvm or nvm touch "$PWD/.bash_history" history -a export HISTFILE="$PWD/.bash_history" history -r export PS1='\[\033[1m\]\u@\h \[\033[0m\]\w$(__git_ps1 " (%s)")\$ ' # custom prompt to differentiate from default prompt
So, add the above content to a file like
init.sh in the project directory. Whenever starting with the project, run
.bash_history will be saved and used in the project directory.