SHELL History Logging

2016/06/01

Ich weiß nicht wie es anderen geht, aber fuer mich ist die Shell History ein recht wichtiger Assistent, den ich immer versuche so sauber wie möglich zu halten. So kann ich Jederzeit mit “ctrl-r” effektiv nach Commands suchen.

Wie dem auch sei! Manchmal ist meine History einfach zu kurz. Auch wenn die noch so lang ist. :-) Daher habe ich mir überlegt, jeden Befehl in eine extra Log Datei zu schreiben. Die Datei beinhaltet das Datum, die Einträge zusätzlich noch das aktuelle Verzeichnis und ein TimeStamp.

$ ls -l .logs
insgesamt 8
-rw-r--r-- 1 andreas users 2361 31. Mai 16:54 bash-history-2016-05-31.log
-rw-r--r-- 1 andreas users  247  1. Jun 09:50 bash-history-2016-06-01.log

$ cat .logs/bash-history-2016-06-01.log
2016-06-01.09:57:22 /home/andreas  5067  ls -l .logs
2016-06-01.09:57:43 /home/andreas  5068  cat .logs/bash-history-2016-05-31.log

ZSH

Wie mach ich das nun! In der ZSH wie folgt:

export PROMPT_COMMAND='if [ "$(id -u)" -ne 0 ]; then his=`history | tail -n 1`; echo "$(date "+%Y-%m-%d.%H:%M:%S") $(pwd) $his" >> ~/.logs/bash-history-$(date "+%Y-%m-%d").log; fi'

precmd() { eval "$PROMPT_COMMAND" }

BASH

export PROMPT_COMMAND='if [ "$(id -u)" -ne 0 ]; then his=`history | tail -n 1`; echo "$(date "+%Y-%m-%d.%H:%M:%S") $(pwd) $his" >> ~/.logs/bash-history-$(date "+%Y-%m-%d").log; fi'

Ich hoffe das ist auch anderen Hilfreich. :-)