aboutsummaryrefslogtreecommitdiff
path: root/.local/bin/bashhistory
blob: a0f83007dddbf70e6a7ac70df4e06c7f47e77e82 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
#!/bin/sh -eu

directory="$XDG_DATA_HOME/bash"
persist="$directory/history"
default="$HOME/.bash_history"
current="$HISTFILE"
lockfile='/tmp/bashhistory_Ri5ki9ei.lock'

_prune() {
 sed --in-place '/^#/d' "$1" &&                                              # Remove all timestamps.
 sed --in-place '/.........../!d' "$1" &&                                    # Remove all commands less than 11 characters.
 sort --unique "$1" > "$1.tmp" && mv --force "$1.tmp" "$1" > /dev/null 2>&1  # Remove all duplicate entries.
}

_migrate() {
 [ -f "$default" ] &&
  cat "$default" >>"$persist" &&
  _prune "$persist" &&
  rm "$default"
}

_store() {
 cat "$current" >> "$persist" &&
 cat "$current" >> "$persist.bak" &&
 _prune "$persist" &&
 true > "$current"
}

[ -f "$lockfile" ] && exit;

mkdir --parents "$directory"
touch "$current" "$lockfile"

trap 'rm "$lockfile" > /dev/null 2>&1; trap - EXIT; exit' EXIT INT HUP

_migrate || true
_store