Configuration Information [Automatically generated, do not change]: Machine: x86_64 OS: linux-gnu Compiler: gcc -I/home/abuild/rpmbuild/BUILD/bash-4.2 -L/home/abuild/rpmbuild/BUILD/bash-4.2/../readline-6.2 Compilation CFLAGS: -DPROGRAM='bash' -DCONF_HOSTTYPE='x86_64' -DCONF_OSTYPE='linux-gnu' -DCONF_MACHTYPE='x86_64-suse-linux-gnu' -DCONF_VENDOR='suse' -DLOCALEDIR='/usr/share/locale' -DPACKAGE='bash' -DSHELL -DHAVE_CONFIG_H -I. -I. -I./include -I./lib -fmessage-length=0 -O2 -Wall -D_FORTIFY_SOURCE=2 -fstack-protector -funwind-tables -fasynchronous-unwind-tables -g -D_GNU_SOURCE -DRECYCLES_PIDS -Wall -g -std=gnu89 -Wuninitialized -Wextra -Wno-unprototyped-calls -Wno-switch-enum -Wno-unused-variable -Wno-unused-parameter -ftree-loop-linear -pipe -fprofile-use uname output: Linux bow 3.7.10-1.16-desktop #1 SMP PREEMPT Fri May 31 20:21:23 UTC 2013 (97c14ba) x86_64 x86_64 x86_64 GNU/Linux Machine Type: x86_64-suse-linux-gnu
Bash Version: 4.2 Patch Level: 42 Release Status: release Description: When the history file is written, no locking is used. The result is that when multiple bash instances exit (nearly) simultaneously, the history file can be replaced by a zero-length file. Repeat-By: Because it's a race condition, the problem can't be reliably reproduced. The way I stumble across it is to create multiple bash sessions 6 or more in a number of terminal windows, each with HISTFILE set and histappend unset, and then shut the X server down. I imagine that you could also create multiple shells and then kill them all simultaneously. Fix: Locking should be used when truncating and writing the history file. (Yes, I know it's a pain in a portable program like bash.) Strictly speaking, locking is only half a solution, because the net result will be that the saved history is taken from a randomly chosen one of the multiple exiting shells. But that's better than the current situation where all history is lost. What might be cooler would be to merge all the history lines from all shells, in timestamp order. But given the current history file format, that seems...hard.