I use the bash command line on my Mac a lot. I typically have multiple tabs with multiple terminal panes open in iTerm2, often with multiple ssh sessions running. By default, the last terminal session to close trashes the bash history of all the other sessions. Is it possible to configure the terminal to preserve bash history?
Preserve bash history
It’s actually fairly straightforward to preserve the history.
Open up your ~/.bash_profile configuration file in an editor of your choice such as nano. Once you have it open, add these lines at the end:
# Maximum number of history lines in memory export HISTSIZE=50000 # Maximum number of history lines on disk export HISTFILESIZE=50000 # Ignore duplicate lines export HISTCONTROL=ignoredups:erasedups # When the shell exits, append to the history file # instead of overwriting it shopt -s histappend # After each command, append to the history file # and reread it export PROMPT_COMMAND="${PROMPT_COMMAND:+$PROMPT_COMMAND$'n'}history -a; history -c; history -r"
Save the file an exit. In order for your configuration change to take effect, you will need to reload the configuration in all your open terminal sessions:
source ~/.bash_profile
This configuration change has to be done per user per machine.
Backup your bash configuration
I use mackup together with Dropbox to keep my bash and other command line configuration files backed up. This makes it easy to transfer your command line configuration to a new primary machine.
iTerm2
iTerm2 is my terminal of choice on the Mac. It has great tab and pane management accessible via both keyboard and mouse, and some subtle quality of life features.
For example, if you ssh somewhere, it sets the tab title to the hostname of the remote machine, or the name of the local directory.
Alternatives
One drastic alternative would be to migrate from Bash to an alternate shell like Fish or, in the future, the Next Generation Shell (NGS).