Bash: Pimp my history

Per Voreinstellung werden in der .bash_history nur die letzten 500 Befehle gespeichert; das ist für meine Bedürfnisse viel zu wenig, schließlich möchte man sich auch noch Befehle von vor mehreren Wochen ins Gedächtnis holen. Glücklicherweise gibt es diesbezüglich ein paar Einstellungen für die Bash (siehe „man bash“),die entsprechenden Variablen fangen mit „HIST“ an.

Anzahl der zu speichernden Befehle

  • HISTSIZE – Anzahl der Zeilen, die über z. B. den Befehl history angezeigt werden und über [Strg+R] abrufbar sind.
  • HISTFILESIZE – Anzahl der Zeilen, die in die .bash_history eingetragen werden können; ist das Limit erreicht, werden die jeweils ältesten Einträge gelöscht.

Nicht alles speichern

  • HISTIGNORE – Muster, die nicht in die History aufgenommen werden. Die ausgeschlossenen Kommandos sind dann in der laufenden Bash nicht mehr erneut abrufbar mit [Pfeiltaste hoch]. So kann man z. B. alles mit task (TaskWarrior) aus der History ausschließen, da hier gerade am Anfang viele Befehlszeilen entstehen.
  • HISTCONTROL – Hier kann man folgende Dinge einstellen:
    • ignorespace – Befehle, die mit einem Leerzeichen beginnen, werden nicht gespeichert.
    • ignoredups – Befehle, die gleich zum vorherigen Befehl sind, werden nicht gespeichert.
    • erasedups – Alle vorherigen Befehle, die gleich zum aktuellen sind, werden entfernt, bevor in die .bash_history geschrieben wird.

Datum und Uhrzeit

  • HISTTIMEFORMAT – Ist diese Variable gesetzt, wird zusätzlich zu jedem Kommando ein Unix-Timestamp in die .bash_history geschrieben. Die Zeit wird im hier angegebenen Format zu jedem Befehl angezeigt. Hierfür kann man alle Variablen aus „man 3 strftime“ verwenden.

Ergebnis

Meine .bashrc beinhaltet jetzt unter anderem die folgenden Zeilen:

...
HISTSIZE=100000
HISTFILESIZE=100000
HISTIGNORE="ls*:dir*:man*:m-*:task*:history*"
HISTTIMEFORMAT="%Y-%m-%d %H:%M:%S "
HISTCONTROL="ignorespace:ignoredups:erasedups"
...

Ein Aufruf von „history“ liefert:

...
 9410 2012-09-30 13:03:58 eix -s qt
 9411 2012-09-30 11:54:43 ssh user@server
 9412 2012-09-30 11:47:48 cd apps/lala/test123
 9413 2012-09-30 11:47:49 git lo
 9414 2012-09-30 11:47:50 git log
 9415 2012-09-30 13:20:18 htop
 9416 2012-09-30 13:28:46 /usr/local/bin/backup.sh
 9417 2012-09-30 13:07:27 su -
 9418 2012-09-30 13:29:29 eix -s kdevelop
...

Weiß noch nicht, ob es negative Auswirkung hat, so viele Befehle zu speichern, aktuell stehen erst ca. 9400 in der History. Vielleicht reichen auch die letzten 20000 Befehle schon aus :)