27.07.09

HOWTO: bash history – HISTCONTROL

Die bash besitzt eine Reihe nützlicher Einstellungen:

z.B. kann man mit den Tasten [ctrl]+[r] in der bash-history suchen. Die history protokolliert in der Regel alle commands, die eingegeben werden und mit enter bestätigt werden. Es gibt jedoch dummerweise wie bei jeder Regel Ausnahmen 😉

In der default-Eintellung z.B. werden keine Zeilen protokolliert die mit einem whitespace beginnen. Diese Einstellung kann jedoch mit der Umgebungsvariable HISTCONTROL bearbeitet werden.

Hier der Eintag in der man page der bash:

HISTCONTROL
A colon-separated list of values controlling how commands are saved on the history list.  If  the  list  of  values  includes ignorespace,  lines which begin with a space character are not saved in the history list.  A value of ignoredups causes lines matching the previous history entry to not be saved.  A value of ignoreboth is shorthand for ignorespace and  ignoredups.   A value  of  erasedups causes all previous lines matching the current line to be removed from the history list before that line is saved.  Any value not in the above list is ignored.  If HISTCONTROL is unset, or does not include a valid value, all lines read  by the shell parser are saved on the history list, subject to the value of HISTIGNORE.  The second and subsequent lines of a multi-line compound command are not tested, and are added to the history regardless of the value of HISTCONTROL.

HISTCONTROL
Dieser Parameter erwartet einen der folgenden Strings: „ignorespace„, „ignoredups“ oder „ignoreboth„.

Die erste Option speichert alle Zeilen die mit einem space beginnen nicht in der history.
Der Zweite löscht alle doppelten Zeilen und behält immer die Jüngste.
Naja und „ignoreboth“ steht eben für beide Einstellungen zusammen.
Will man wirklich alles in der history behalten, so ist die die HISTCONTROL=““ zu setzen 😉

Dieser Parameter kann global in z.B. der Datei /etc/bashrc oder /etc/bash/bashrc (je nach Linux Distribution) gesetzt werden, oder Benutzer spezifisch in der Datei ~/.bashrc

Hier kann man z.B. eine der folgenden Zeilen eintragen:
Um sowohl doppelte Eingaben sowie Eingaben die mit einem whitespace beginnen nicht zu protokollieren:

export HISTCONTROL=ignoreboth

Um Eingaben die mit einem whitespace beginnen nicht zu protokollieren:

export HISTCONTROL=ignorespace

Um doppelte Eingaben nicht zu protokollieren:

export HISTCONTROL=ignoredups

Um alles zu protokollieren:

export HISTCONTROL=""

Update: 16.07.2013:
Um alles zu protokolieren, sowie bei der Ausgabe über den folgenden Befehl auch die Zeiten zu sehen, wann der Befehl ausgeführt wurde, kann man folgendes setzen:

export HISTFILESIZE= HISTSIZE=
export HISTTIMEFORMAT="%F %T "
VN:F [1.9.22_1171]
Rating: 8.0/10 (2 votes cast)