I used the answer in https://unix.stackexchange.com/a/1292/41729 to enable real-time shared history among separate Bash terminals.
As explained in the answer above, this is achieved by adding the following to .bashrc
:
# Avoid duplicates
HISTCONTROL=ignoredups:erasedups
# When the shell exits, append to the history file instead of overwriting it
shopt -s histappend
# After each command, save and reload history
PROMPT_COMMAND="history -a; history -c; history -r; $PROMPT_COMMAND"
This works fine if the Bash shells are separate (e.g. opening different Bash terminals using CTRL+ALT+T. However it doesn't work if I use tabs (from an open terminal CTRL+SHIFT+T) rather than new windows. Why this difference in behaviour? How can I share the Bash history also among various tabs?
UPDATE: I noticed an unusual behaviour: If I type CTRL+C then the last command typed in any of the other terminals (both a tab or not) is correctly displayed. It is like if the CTRL+C forces a flush of the history so that then it is correctly shared.
As an example, the outputs (T1 denotes terminal 1 and T2 terminal 2):
T1:
ls -lah <enter>
# the list of files and directory is shown
T2:
cd Documents <enter>
T1:
<up> (i.e. I press the up arrow)
ls -lah # i.e the last command in terminal 1 is shown rather than the last of terminal 2
^C (i.e. I press CTRL+C)
<up>
cd Documents # the last command issued in terminal 2 is correctly displayed
~.bashrc
file? On a side note, exporting those variables is pointless; just wastes environment space.