Super User is a question and answer site for computer enthusiasts and power users. It's 100% free, no registration required.

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

I routinely run multiple screen sessions on my Linux desktops and servers.

A problem with this is that when I grep through my command history, I find I issued a command in a different session, and have to detach and re-attach to get that history item.

Is it possible to 'force' the differently-updated histories from multiple sessions to all go to a central history?

share|improve this question
I ran into a similar issue whereby I was not able to view history between terminal sessions. Turns out my ~/.bash_history file was owned by root and not writable. Changing owner/group to my user fixed the issue: sudo chown <user>:<group> ~/.bash_history – mateo Nov 25 '11 at 13:14
similar:… – lesmana Dec 3 '11 at 9:20
up vote 38 down vote accepted

There are two things you need to do:

  1. Insert the command shopt -s histappend in your .bashrc. This will append to the history file instead of overwriting it.
  2. Also in your .bashrc, insert PROMPT_COMMAND="$PROMPT_COMMAND;history -a; history -n" and the history file will be re-written and re-read each time bash shows the prompt.

EDIT: Thanks to e-t172 for the history -n trick

share|improve this answer
Thanks for this. I improved it further using PROMPT_COMMAND="$PROMPT_COMMAND;history -a; history -n". This way, commands issued in other sessions immediately appear in the history of the current session (well, you need to press Enter first to update the history). – e-t172 Sep 8 '09 at 10:41
This is wonderful! Thanks for the tip! – Anthony Giorgio Sep 10 '09 at 12:27
I didn't have PROMPT_COMMAND defined previously, so I had to use PROMPT_COMMAND="history -a; history -n" to avoid errors. – William Jackson Jun 2 '11 at 14:53
please see the answer for the correct history -a, -c, and -r commands. – mtd Dec 16 '14 at 3:16
Just an alert to the newcomer: after using history rewriting for a while, I realized that I was often issuing the wrong commands; when you see in the previous line some command, you expect up arrow to repeat it, and with this config it is no longer always the case. – Tiago Mar 14 '15 at 15:37

Please don't use history -a; history -n, it does not work as you expect and will leave you with many duplicate, out of order commands in your history. A solution that works generally as expected is the following:

# unified bash history
shopt -s histappend
PROMPT_COMMAND="${PROMPT_COMMAND:+$PROMPT_COMMAND$'\n'}history -a; history -c; history -r"

Using a newline instead of a semicolon is also a short way of dealing with the missing/duplicate semicolon problem with PROMPT_COMMAND.

share|improve this answer
history -a, -c, and then -r is correct...this should be the accepted answer – mtd Dec 16 '14 at 3:15
The export is not necessary. Because interactive shell options are supposed to be set from ~/.bashrc which is called from every sub shell, so inheritance is not necessary. – dolmen Mar 30 '15 at 14:00

PROMPT_COMMAND is not defined by default in some distros. For example, it is defined in Arch, but not in Debian.

I have a bashrc in my Dropbox that I use while distro hopping, and it includes:

PROMPT_COMMAND="$( [ '$PROMPT_COMMAND' ] && echo $PROMPT_COMMAND; )history -a; history -n"
share|improve this answer
An awful solution to a basic shell programming problem. The right way: PROMPT_COMMAND="$PROMPT_COMMAND; history -a; history -n" – dolmen Mar 30 '15 at 13:56
Better: PROMPT_COMMAND="$PROMPT_COMMAND"$'\n''history -a; history -n' – dolmen Mar 30 '15 at 14:07

Your Answer


By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.