pratyahava 2 hours ago

this is an example of overcomplicated solutions that could be avoided with the tool we already have for years - file system - why do this "heroic" effort of "cleverly" putting everything in one file from many sessions if we could just write command history of every session into a new separate file in a directory and read all history files from the dir instead of reading one file.

  • pratyahava an hour ago

    zshrc for saving history:

      mkdir -p $HOME/zsh
      HISTFILE="$HOME/zsh/$(date '+%y:%m%d:%H%M')-$$"
      echo "HISTFILE $HISTFILE"
    
    for easily accessing the history without running grep... will figure it out later :)))
mmh0000 9 hours ago

I have nearly a decade of zsh history. Reading that article I came to the conclusion that I may have been hit by that bug in the past but I haven’t noticed.

Then I kept reading and the author mentions accidentally exporting HISTFILE[1] and I screamed in terror and ran to my computer as I realized a mistake I’ve been making for…ever.

I am now both happy and sad I read this article.

[1] https://github.com/stapelberg/configfiles/commit/32dcda0f49a...

  • PyWoody 6 hours ago

    I'm always curious what people get out of their terminal history. About 98% of mine is embarrassing and made for the ether.

    Have you ever looked back on your history?

    • opan 3 hours ago

      Some things are worth an alias, or a script, some things aren't quite worth either but you still wanna run them again in the future. I think that's where history helps. Awkward niche one-liners. Also sometimes you do something for the first time, take a bit to figure it out, then 6-12 months later it's easier to check your shell history than relearn the process from scratch again. Also sometimes you may want to run something new that's very similar to an old thing you ran, like maybe you forget which rsync args you've been using lately and you wanna use the same ones but on different files. Search up your last rsync, edit paths.

      I used to start my history over with each PC, but last year when I upgraded my primary machine I decided to copy over my browser history and shell history in addition to the usual dotfiles and stuff. It's honestly been really nice and convenient. It almost feels like cheating that I can see stuff older than the machine that I did.

    • unsnap_biceps 6 hours ago

      I do to find a command that I know I ran that did something but I don't remember exactly how I did it. It's rare, but it's useful to be able to.

    • inkyoto 4 hours ago

      To recover the past working context, not necessarily looking up a specific command (but that, too, – on certain occasions).

      I also hold over a decade worth of zsh history and revisit it from time to time to reconstruct the full memory of what I was working on N years ago.

    • fragmede 6 hours ago

      With Atuin, I hit ctrl-r and go to directory mode, and get the commands I ran the last time I was in that directory.

    • TacticalCoder 6 hours ago

      > About 98% of mine is embarrassing and made for the ether.

      Same

      > Have you ever looked back on your history?

      All the time? I search in my history, re-launch past commands, etc.

      Now it's typically recent history, usually same day.

      I know about the shortcuts etc. but I also need to at times pipe history into other commands so I've got a two letters alias:

          h?
      
      Which greps into my history. I use that h? all the time.
chillpenguin 4 hours ago

I ran into this a few years ago (or I ran into a very similar bug). I started backing up my history file regularly because it was so annoying to lose all that history. I'll keep backing it up, but this fix is appreciated!

nubinetwork 5 hours ago

That's a bug? Happens to me with bash all the time, all I have to do is open 2 terminals at the same time... whichever one I close last is the one that writes its history. /shrug

  • praash 30 minutes ago

    Running bash inside zsh continuously destroyed my history for the last 3 years until I figured that HISTFILE was exported and inherited by bash.

  • mmh0000 4 hours ago

    This is exactly why I stopped using Bash around 2012. I was soooo tired of losing random shell history.

    If you haven't looked into ZSH, it has some really nice customizations. Notably, from my config[1]:

      # Remove dups
      setopt HIST_FIND_NO_DUPS
      setopt HIST_IGNORE_DUPS
      # Don't  log commands starting with a space
      setopt HIST_IGNORE_SPACE
      # Replcae bang-command !34 with the actual command in the history
      setopt BANG_HIST
      # Remove extraneous spaces
      setopt HIST_REDUCE_BLANKS
      # Write the history file in the ":start:elapsed;command" format
      setopt EXTENDED_HISTORY
      # Record run-time of the command
      setopt INC_APPEND_HISTORY_TIME
    
    [1] https://doc.xn0.org/.zshrc
  • valleyer 4 hours ago

    That's what zsh's INC_APPEND_HISTORY (mentioned in TFA) avoids. Bash may have an equivalent.

myshapeprotocol 6 hours ago

Tracking down subtle data loss edge cases in shell history internals requires absolute precision. Great debugging write-up.

aclindsa 9 hours ago

Nice work! I have felt like I lost zsh history before but never looked into it.

TZubiri 8 hours ago

Does zsh have that 2000 command limit by default?

You can't expect much from a system that has those defaults, I'm all for traditions, but if I were to depend on a system for command history, it wouldn't be anything that reads a bash_history, a revolution is needed, not incremental optimizations

P.s: what I do is set it to unlimited on both size and line count, but it's not a forensic grade audit trace, we'd need an OS, or ssh command logger, preferably one that writes to an external disk, but it can be to a root controlled file, definitely not to a user owned file.

Security protects not only against attackers, but against bugs, a user's command history should not be deletable by user. Anything else is a wrong architecture that we are just carrying by inertia and laziness.

fragmede 7 hours ago

Are people not just using http://atuin.sh these days?

  • lap007 2 hours ago

    This bug is the very reason I started using atuin, in fact. And the reason my .zshrc ends with this line:

    [[ -n `find . -maxdepth 1 -name .zsh_history -size -10k` ]] && echo "ZSH history is empty!!!"

  • hn92726819 4 hours ago

    Absolutely not. It felt so laggy and buggy ~1 year ago. I think resizing my screen broke it at the time? And now it's loaded with AI and shortcuts overrides.

    I switched to my custom fork of stinkpot posted a few days ago here, and it's so nice. I did have to add current-for filtering, but that was easy.

  • NSPG911 4 hours ago

    i dont think i ever needed cross platform cross shell syncing of history

  • a2ff6eeb0 6 hours ago

    Nah. I don't use the shell anymore. Claude knows how to use it better than I do.