[PATCH] zexit: don't write history in sub-shells
dana <[email protected]> Wed, 08 Jul 2026 21:56:52 -0500
| Newsgroups | gmane.comp.shells.zsh.devel |
|---|---|
| Message-ID | <[email protected]> |
i noticed this:
% read -t10 -k1 &
[1] 13722
[1] + suspended (tty output) read -t10 -k1
% kill -HUP %%
zsh: locking failed for /.../.zhistory: file exists
[1] + exit 1 read -t10 -k1
i think the lock failure is because both the sub-shell exiting and the
command executing want to save the history
in any case, i'm not sure why we should write the history out when a
sub-shell exits at all. is there a reason i'm not considering?
dana
diff --git a/Src/builtin.c b/Src/builtin.c
index b3a735fd4..6c7633dbf 100644
--- a/Src/builtin.c
+++ b/Src/builtin.c
@@ -6067,7 +6067,7 @@ zexit(int val, enum zexit_t from_where)
killrunjobs(from_where == ZEXIT_SIGNAL);
}
cleanfilelists();
- if (isset(RCS) && interact) {
+ if (isset(RCS) && interact && !subsh) {
if (!nohistsave) {
int writeflags = HFILE_USE_OPTIONS;
if (from_where == ZEXIT_SIGNAL)
@@ -6075,7 +6075,7 @@ zexit(int val, enum zexit_t from_where)
saveandpophiststack(1, writeflags);
savehistfile(NULL, 1, writeflags);
}
- if (islogin && !subsh) {
+ if (islogin) {
sourcehome(".zlogout");
#ifdef GLOBAL_ZLOGOUT
if (isset(RCS) && isset(GLOBALRCS))