If I run history , I can see my latest executed commands.

But if I do tail -f $HISTFILE or tail -f ~/.bash_history , they do not get listed.

Is the file locked in any temporary location?

Best Answer

The list of commands is stored in memory while bash is 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'