Bash or no bash, spreading history over dozens of files in
`bash_history.d/` is yuck. We already have a comment with the timestamp
in `.bash_history`. If I were implementing the suggestion, I would add
more information to the comment, then add two new flags to the `history`
command that filter+output the file (i.e. not the internal history
list): `--global` to display everything in `.bash_history`, and
`--local` to restrict output to entries from the current session.
Everything else would remain as-is.
So this:
#1724136363
man bash
Becomes this:
#1724136363 [sess create time] [sess PID] [sess TTY]
man bash
I think it is important to add the local/global flags because it gives
us some leeway as to how that comment is structured. If you take the
line of "that's what grep is for", then we're committed to the v1 format
forever after.
The problem with the stackoverflow solutions is that they are
all-or-nothing: either mash the history together across all sessions,
but get strange behavior on history nav & expansion, or don't mash, be
cut-off from information in concurrent sessions, and end up with the
occasional unsaved session. Being able to filter the file directly lets
us look things up without having to slice-and-splice into the internal
history.
On 2024-08-20 6:14 am, Martin D Kealey wrote:
"Missing/disappearing history" is entirely down to the lack of "writing
history as you go", and yes that would be reasonable to offer as a new
opt-in feature.
As for separation of sessions, I strongly suspect that anything between
*total* separation and *none* will result in so many ugly compromises
that
in the end almost nobody will be happy with it. So if there's to be an
additional option - which I'm not convinced of - I suggest that it
simply
be to set HISTFILE by default to either
$HOME/.bash_history.d/{some-pattern-here} (if the directory exists) or
~/.bash_history (matching the current behaviour when that directory
does
not exist). I would recommend that the pattern include most or all of
$$,
$TTY, $LOGNAME, and $((EPOCHSECONDS-SECONDS)).
Lastly, an awful lot of "default behaviour" is down to whatever
/etc/skel/.bashrc and /etc/bash/bashrc that are shipped with Bash by
the
various distros. Maybe Bash should start shipping some kind of
"standard
library" of functions that are *expected* to be included with any
distro,
but are not actually built into the binary.
-Martin
PS: complaining about "inelegant" in relation to Bash seems a bit
pointless.
On Tue, 20 Aug 2024 at 16:48, <supp...@eggplantsd.com> wrote:
I wouldn't consider dozens of stackoverflow/askubuntu/etc complaints
of
missing/disappearing history "cherry-picked". There were far more
than
I sent.
I understand not wanting to pull the rug out from under people, but
the
kludges Kealey posted were inelegant. An opt-in for the suggested
behavior would be good enough.
JS
On 2024-08-20 2:17 am, Lawrence Velázquez wrote:
> On Tue, Aug 20, 2024, at 1:42 AM, supp...@eggplantsd.com wrote:
>> The suggestion is that the default behavior needs some work
>
> The default behavior is unlikely to change. For every cherry-picked
> example of someone unsatisfied with it (bugs aside), there is likely
> someone else who prefers it as is (or at least would not appreciate
> it changing out from under them). New shopt settings may be doable.