Where is bash's history stored?
Bash maintains the list of commands internally in memory while it's running. They are written into .bash_history
on exit:
When an interactive shell exits, the last $HISTSIZE lines are copied from the history list to the file named by $HISTFILE
If you want to force the command history to be written out, you can use the history -a
command, which will:
Append the new history lines (history lines entered since the beginning of the current Bash session) to the history file.
There is also a -w
option:
Write out the current history to the history file.
which may suit you more depending on exactly how you use your history.
If you want to make sure that they're always written immediately, you can put that command into your PROMPT_COMMAND
variable:
export PROMPT_COMMAND='history -a'
(Not an answer but I cannot add comments)
If you are checking .bash_history
because you just want delete a specific command (e.g. containing a password in clear), you can directly delete the entry in memory by history -d <entry_id>
.
For example, supposing an output like:
$ history
926 ll
927 cd ..
928 export --password=super_secret
929 ll
and you want purge the export
line, you can simply achieve it by:
history -d 928
bash keeps it in working memory, bash can be configured to save it when bash closes or after each command, and to be loaded when bash starts or on request.
If you configure to save after each command, then consider the implications of having multiple bash running at same time. (command lines will be interleaved)