Monday, September 19, 2022

Wrangling bash_history across multiple sesions

## BASH_HISTORY_FILE or HISTFILE
I find myself constantly using multiple terminals on the same system.  The default bash history is a good start, but not enough for my needs.  After endless searching, testing, ignoring, deleting, and procrastinating I finally found a solution that works for me.   

1. Session Isolation 
    - I don't need new history items available across sessions
    - Typically the work I am preforming is isolated but similar enough that having commands updated between sessions is both obnoxious and unhelpful.
2. Custom Timestamp 
    - I like seeing a particular timestamp format in my history output (helps me remember what I was doing at that time)
3. Dedupe
    - Like I mentioned above, I don't need commands shared across terminal windows
    - Also, I don't like duplicate uses of command in my history
    - Sure I may lose the first, or prior, occurrence(s) of a command.  But I only require the last use.
4. Write on session exit
    - I don't want to lose my history to a `kill -i `
    - I also don't want to lose my history if I close the wrong session tab
    - dedupe only needs to happen at this point
5. Use only linux bash commands
    - I don't want to download some fancy utility.
    - use the fewest number of commands
6. Unlimited history
    - computers are big enough and fast enough to handle this
    - new versions of bash allow an unlimited history


## `~/.bashrc`

```
HISTCONTROL=ignorespace:ignoredups:erasedups
shopt -s histappend
HISTSIZE=-1
HISTFILESIZE=-1
HISTTIMEFORMAT="[%b %d,%Y %T] "
PROMPT_COMMAND="history -a;${PROMPT_COMMAND}"
```


## `/etc/profile.d/00-dedup-bash-history-on-exit.sh`

```
function deduphistory {
  echo "deduphistory"
  history -w ~/.bash_history.dedup_backup
  history -n; history -a
  tac ~/.bash_history | awk '!x[$0]++' | tac > ~/.bash_history_new_dedup
  history -cr ~/.bash_history_new_dedup
  history -w
}
# cleanup bash history on exit
trap deduphistory EXIT
```


## Profit
Watch your history get appended and deduped on exit.  
No more lost history (mostly)
And be happy


### Files available as gists
https://gist.github.com/therevoman/a7532af575479f0a2b5edfbb0bef8212

Originally posted on github.
https://github.com/therevoman/nate-revo-blog/issues/2 

No comments:

Post a Comment

Adding nerdctl to an OpenShift 4 Windows Node

# Getting a Windows Node on OpenShift ... Not what this post is about, follow the Red Hat and Microsoft documentation and then consult with...