BASH PATCH REPORT ================= Bash-Release: 4.2 Patch-ID: bash42-008 Bug-Reported-by: Doug McMahon Bug-Reference-ID: <1299441211.2535.11.camel@doug-XPS-M1330> Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2011-03/msg00050.html Bug-Description: Bash-4.2 does not attempt to save the shell history on receipt of a terminating signal that is handled synchronously. Unfortunately, the `close' button on most X11 terminal emulators sends SIGHUP, which kills the shell. This is a very small patch to save the history in the case that an interactive shell receives a SIGHUP or SIGTERM while in readline and reading a command. The next version of bash will do this differently. Patch (apply with `patch -p0'): --- a/sig.c +++ b/sig.c @@ -46,6 +46,7 @@ #if defined (READLINE) # include "bashline.h" +# include #endif #if defined (HISTORY) @@ -62,6 +63,7 @@ extern int parse_and_execute_level, shel #if defined (HISTORY) extern int history_lines_this_session; #endif +extern int no_line_editing; extern void initialize_siglist (); @@ -505,7 +507,10 @@ termsig_sighandler (sig) { #if defined (HISTORY) /* XXX - will inhibit history file being written */ - history_lines_this_session = 0; +# if defined (READLINE) + if (interactive_shell == 0 || interactive == 0 || (sig != SIGHUP && sig != SIGTERM) || no_line_editing || (RL_ISSTATE (RL_STATE_READCMD) == 0)) +# endif + history_lines_this_session = 0; #endif terminate_immediately = 0; termsig_handler (sig); --- a/patchlevel.h +++ b/patchlevel.h @@ -25,6 +25,6 @@ regexp `^#define[ ]*PATCHLEVEL', since that's what support/mkversion.sh looks for to find the patch level (for the sccs version string). */ -#define PATCHLEVEL 7 +#define PATCHLEVEL 8 #endif /* _PATCHLEVEL_H_ */