[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: history -a misbehaves with $HISTSIZE
From: |
Chet Ramey |
Subject: |
Re: history -a misbehaves with $HISTSIZE |
Date: |
Sat, 23 Feb 2019 17:16:45 -0500 |
User-agent: |
Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:60.0) Gecko/20100101 Thunderbird/60.5.1 |
On 2/13/19 3:47 PM, Айрат Васбикарамов wrote:
Sorry it took a while to respond; this message ended up in my spam folder
for some reason.
> Thanks for clarification. But I still consider this behavior inconsistent.
>
> 1) Why we need to check that history_lines_this_session is less than
> history_offset? history_lines_this_session always stores number of lines in
> this session. So we can just append this much lines.
If you're at the end of the history, history_offset is the index of the
last entry in the history list. You can't just append
history_lines_this_session; there aren't that many entries in the history
list. You don't really have to worry about this; append_history already
takes care of it.
>
> 2) Let me rewrite what happens in preceding example. We can set $HISTSIZE
> which we prefer (for example in bashrc). Then we start new session. And it's
> happened that we type more than $HISTSIZE commands. Then if I type "history
> -a", I expect that $HISTSIZE commands will be appended to history file
> (leading commands will disappear, as our buffer can't hold this much
> commands). But actually nothing will be added!
OK. So in this case, it doesn't append anything. I think it violates one of
the assumptions in place when the code was written (1990!). The interesting
thing is that if you type only one more command before running `history -a'
again, it will "work", since maybe_append_history() resets the value of
history_lines_this_session to 0 no matter what.
I don't think this would happen too much in practice, though, because if
you wait until you have more than $HISTSIZE history entries, you'll lose
information no matter what you use.
It seems like what you want is min(history_lines_this_session, history_offset),
kind of like what you say below. Try the attached patch and see if it
does what you want.
>
> 3) Actually this behavior already present in code if histappend option is set.
> bashhist.c maybe_save_shell_history()
> ...
> if (history_lines_this_session <= where_history () || force_append_history)
> ...
> So if we say to append history at exit it doesn't bother to check that
> history_lines_this_session is less than offset. It just save
> min(history_lines_this_session, HISTSIZE) to history file. So it's not clear
> why when we explicitly tell to append history behavior is "weaker" than when
> we set histappend option.
The `histappend' option explicitly doesn't care about duplicates, so it
never cared about trying to figure out the history entries that hadn't
been read from the history file.
Chet
--
``The lyf so short, the craft so long to lerne.'' - Chaucer
``Ars longa, vita brevis'' - Hippocrates
Chet Ramey, UTech, CWRU chet@case.edu http://tiswww.cwru.edu/~chet/
history-append.patch
Description: Text document