[bug #68646] history -w does not reset history_lines_this_session

Ilya <[email protected]>
Newsgroups gmane.comp.shells.bash.bugs
Message-ID <[email protected]>
URL:
  <https://savannah.gnu.org/bugs/?68646>

                 Summary: history -w does not reset history_lines_this_session
                   Group: The GNU Bourne-Again SHell
               Submitter: ilya_the_human
               Submitted: Tue 25 Aug 2026 07:16:56 PM UTC
                Category: None
                Severity: 3 - Normal
                Priority: 5 - Normal
              Item Group: None
                  Status: None
                 Privacy: Public
             Assigned to: None
             Open/Closed: Open
         Discussion Lock: Unlocked


    _______________________________________________________

Follow-up Comments:


-------------------------------------------------------
Date: Tue 25 Aug 2026 07:16:56 PM UTC By: Ilya <ilya_the_human>
I think this one, unlike my previous bug reports, cannot unfortunately be
explained as a documentation issue

history_lines_this_session is described as
```
/* The number of lines that Bash has added to this history session.  The
   difference between the number of the top element in the history list
   (offset from history_base) and the number of lines in the history file.
   Appending this session's history to the history file resets this to 0. */
int history_lines_this_session;
```

Appending resets the counter, okay. We can test it: (.bashrc only contains
HISTCONTROL=ignorespace" for the purposes of the demo)

```
[ilya@arch ~]$  cat .bash_history
1
2
3
[ilya@arch ~]$ a
bash: a: command not found
[ilya@arch ~]$ b
bash: b: command not found
[ilya@arch ~]$  history -a
[ilya@arch ~]$  cat .bash_history
1
2
3
a
b
[ilya@arch ~]$  history -a
[ilya@arch ~]$  cat .bash_history
1
2
3
a
b
```
a,b commands are appended once. BUT look at what happens if we instead use
`history -w` instead of the first `history -a`
```
[ilya@arch ~]$  cat .bash_history
1
2
3
[ilya@arch ~]$ a
bash: a: command not found
[ilya@arch ~]$ b
bash: b: command not found
[ilya@arch ~]$  history -w
[ilya@arch ~]$  cat .bash_history
1
2
3
a
b
[ilya@arch ~]$  history -a
[ilya@arch ~]$  cat .bash_history
1
2
3
a
b
a
b
```
a,b are appended twice, although history file is technically already "synced"
to local history with `history -w`
This issue is especially bad when exiting, since exit basically always appends
history. So if we've used `history -w` at least once during the session, we'll
get junk in the history file:
```
[ilya@arch ~]$ a
bash: a: command not found
[ilya@arch ~]$ b
bash: b: command not found
[ilya@arch ~]$ history -w
[ilya@arch ~]$ exit
```
hist file contents:
```
1
2
3
a
b
history -w
a
b
history -w
exit
```
Potential fix:
https://codeberg.org/ilya-the-human/bash-fixes/commit/73dc229c6364b4e8ec9075552ba589e6921fc0fe


P.S. There's a similar issue for `history -r`: history_lines_this_session
instead is not increased
```
[ilya@arch ~]$  history
    1  1
    2  2
    3  3
[ilya@arch ~]$ a
bash: a: command not found
[ilya@arch ~]$ b
bash: b: command not found
[ilya@arch ~]$  history -r
[ilya@arch ~]$  history
    1  1
    2  2
    3  3
    4  a
    5  b
    6  1
    7  2
    8  3
[ilya@arch ~]$  history -a
[ilya@arch ~]$  cat .bash_history 
1
2
3
2
3
```
Although it is a separate issue that mostly stems from the fact that on exit
file is never overwritten, so I'll not write about it further







    _______________________________________________________

Reply to this item at:

  <https://savannah.gnu.org/bugs/?68646>

_______________________________________________
Message sent via Savannah
https://savannah.gnu.org/
signature.asc (application/pgp-signature, 228 B)
-----BEGIN PGP SIGNATURE-----

iHUEABYIAB0WIQQk97aszIMMAvLLwm6qLAuaBUf3TgUCao3qLAAKCRCqLAuaBUf3
TnfUAQCrftoSkJsmYJ2hrZrwcczHKf8iH18aQmUR7/cUXnHqiAEA6Qv3PGgWkJbL
zhhLNOcBd4IbFu20RAsh7xOQRZejAQg=
=yiGf
-----END PGP SIGNATURE-----
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.