You Should Be Logging Shell History |
February 13th, 2012 |
logging, shell, tech |
bash
, put this in
the init file [3]:
promptFunc() { # right before prompting for the next command, save the previous # command in a file. echo "$(date +%Y-%m-%d--%H-%M-%S) $(hostname) $PWD $(history 1)" \ >> ~/.full_history } PROMPT_COMMAND=promptFuncYou'd think running these extra commands would slow your system down, and I'm sure they do relative to doing nothing or having this built into the shell, but the prompt still feels like it appears instantly.
Your shell history is an invaluable resource in understanding what you were doing earlier, and keeping a permanent log is well worth it.
For quick history searching, add:
function histgrep { local n_lines=10 if [[ "$1" =~ ^[0-9]*$ ]]; then n_lines="$1" shift fi grep "$@" ~/.full_history | tail -n "$n_lines" }Usage:
$ histgrep foo ... ten lines of history ... $ histgrep 100 foo ... a hundred lines of history ...
(Yes, I've written about this before, but I'm continually surprised how many people don't have something like this. It saves me gobs of time.)
[1] Bash defaults to 500
lines. At my previous job I had ~100K lines logged while at my
current one I have 73K.
[2] This does mean that if you have a crash while a command is running that command will not be written back to the history file. This is bad, but I don't think there's a 'post command entry' hook in bash.
[3] On my Mac this goes in ~/.bash_profile
; on Linux I'd put it
in ~/.bashrc
. For other shells you'll need something similar.
- Things to consider doing
- Using Docs for Running Notes
- Backup Strategy
- Setting up a new Mac
- Logging Shell History in Zsh
Comment via: google plus, facebook, r/commandline