Keep multiple bash histories
My use of the command line changed dramatically once I discovered guake
and
screen
. Guake is a GUI interface that lets you open and run many terminals
easily. Screen provides a similar service from the command line itself within a
single terminal, which makes it extremely useful for working with remote
servers.
But, when you have all of those terminals going at once, bash's regular way of
tracking what commands you've used (by storing everything to ~/.bash_history
)
seems to break down. This is bad for reconstructing what you've done at some
later point in time. Fortunately, we can configure bash to do better. To do so,
add these lines to your ~/.bashrc
file:
export HISTTIMEFORMAT="%s "
export HISTFILE=~/.history/history_`date +"%Y-%m-%dT%H:%M:%SZ"`_$$
export HISTFILESIZE=
export HISTSIZE=500
HISTTIMEFORMAT
appends a unix epoch timestamp before each command in the history files, which is useful for reconstructing what you've done.HISTSIZE
changes the maximum number of commands available through the history command.HISTFILESIZE
changes the maximum size of yourHISTFILE
. If you don't set it, theHISTFILE
won't be truncated at all.HISTFILE
sets the name of the history file. We give each file a name including the current ISO8601 timedate +"%Y-%m-%dT%H:%M:%SZ"
and the process id of the shell$$
(in case two shells are launched in the same second).
A similar strategy for working this is to add
shopt -s histappend
to ~/.bashrc
. This tells bash to append to the history file rather than
overwriting it when the shell exits. The disadvantage to this is that then all
of history is stored in one enormous file.