• Posts
  • RSS
  • ◂◂RSS
  • Contact

  • Logging Shell History in Zsh

    December 20th, 2022
    shell, tech
    By default most shells don't log your history in a detailed durable way, which gives up one of the big advantages of working on the command line. Good history lets you look back at things you did months or years ago, in a searchable and skimmable fashion, so you can answer questions like "how did I generate this number?", "what was that trick I used?", or "if I'm doing something similar now what should I recall from last time?"

    I use bash as my shell and have long used:

    .bashrc:
      promptFunc() {
        echo "$(date +%Y-%m-%d--%H-%M-%S) $(hostname) $PWD $(history 1)" \
          >> ~/.full_history
      }
      PROMPT_COMMAND=promptFunc
    

    I was recommending this to folks at work, but they use zsh. In zsh you can get a lot of the way here by setting INC_APPEND_HISTORY (append to history immediately instead of waiting for the shell to exit), SAVEHIST=1000000000 (effectively don't limit the history size on disk), and EXTENDED_HISTORY (to store timestamps with history entries). But you risk losing most of your history if you ever accidentally invoke zsh without these set, and it doesn't write the directory you ran the command in (which is metadata I reference a lot).

    Mike tweaked my snippet to run in zsh:

    .zshrc:
      precmd() {
        echo "$(date +%Y-%m-%d--%H-%M-%S) $(hostname) $PWD $(history -1)" \
          >> ~/.full_history
      }
    

    The two changes are that zsh uses precmd instead of PROMPT_COMMAND, and that you need history -1 instead of history 1.

    You can still use the same histgrep command on both:

    function histgrep {
      local n_lines=10
      if [[ "$1" =~ ^[0-9]*$ ]]; then
        n_lines="$1"
        shift
      fi
      grep "$@" ~/.full_history | tail -n "$n_lines"
    }
    

    Note that this doesn't replace your shell's built-in history tooling, and I wouldn't recommend turning that off. This just a very cheap additional layer of logging with additional metadata and less risk of accidental deletion.

    Comment via: facebook, lesswrong, mastodon

    Recent posts on blogs I like:

    How did we decide to have a kid?

    ...and then some more kids? The post How did we decide to have a kid? appeared first on Otherwise.

    via Otherwise January 28, 2023

    My Rainbow Kit

    For Christmas I got a really fun kit about rainbows. It had a rainbow catcher, a really cool necklace, a streamer thingy, and it also had a really really cool pinwheel, and it also had a bracelet and a pinata. Unfortunately the pinata didn't work out …

    via Anna Wise's Blog Posts January 5, 2023

    Phones

    I think that once a kid is in third grade they should be able to get a phone. I think that while sometimes parents might want kids not to have them at certain ages, phones can be quite useful at times. Tablets don't have GPS, they don't have WiFi…

    via Lily Wise's Blog Posts January 5, 2023

    more     (via openring)


  • Posts
  • RSS
  • ◂◂RSS
  • Contact