Die Bash verfügt über eine Art Erinnerungsvermögen: Sie merkt sich welche Befehle man bereits eingegeben hat. Wenn man einen langen Befehl nicht noch einmal eingeben will kann man sich einfach mit den Pfeiltasten durch die gespeicherten Befehle hangeln und den Befehl wieder ausführen. Aber das Erinnerungsvermögen der Bash kann noch mehr.
Mit history kann man sich eine Liste von allen Befehlen anzeigen lassen an die sich die Bash erinnern kann.
$ history [...] 504 cd /home/antu 505 ls -la 506 htop 507 cd / 508 history
Dabei zählt die Bash immer mit wieviele Befehle sich bereits in der Datenbank befinden, in diesem Fall sind es 508. Praktisch: Gibt man jetzt !<Zahl> ein wird der Befehl mit der entsprechenden Zahl wieder ausgeführt.
Wenn man Strg+R drückt muss man nur noch den Anfang des Befehls eingeben, wenn er schon einmal eingegeben wurde vervollständigt die Bash ihn automatisch.
Konfiguration
Das Verhalten der Erinnerungsfunktion lässt sich entweder in der systemweiten, meist /etc/bashrc bzw. /etc/bash/bashrc, oder in der Konfigurationsdatei im Home-Verzeichnis (~/.bashrc, ~/.bash_profile) konfigurieren.
-
shopt -s histappend
Mit shopt lassen sich diverse Einstellungen der Bash verändern. Histappend sorgt dafür das die eingegebenen Befehle beim Beenden der Bash an die Liste der eingegebenen Befehle angehangen werden, anstatt die Liste jedes mal zu überschreiben.
-
export HISTSIZE=<Größe> export HISTFILESIZE=<Größe>
-
export HISTIGNORE='cd*:ls*'
Mit HISTIGNORE lassen sich Befehle festlegen die nicht gespeichert werden sollen, die Befehle werden durch einen Doppelpunkt getrennt. Der Befehl hier im Beispiel sorgt dafür das alle Befehle die mit cd oder ls beginnen nicht gespeichert werden.
-
export HISTCONTROL=erasedups:ignorespace
Eine durch Doppelpunkte getrennte Liste von Optionen zur Speicherung von Befehlen. Wenn ignorespace aktiviert ist werden alle eingegeben Zeilen die mit einem Leerzeichen beginnen nicht gespeichert, erasedups sorgt dafür das jeder Befehl nur einmal in der Bash-Erinnerung vorkommt. Mit ignoredups lässt sich festlegen das ein eingegebener Befehl nur einmal gespeichert wird, auch wenn er mehrmals hintereinander eingegeben wird. ignoreboth ist das selbe wie ignorespace + ignoredups.
-
export HISTFILE='~/.bash_history'
Die eingegebenen Befehle werden standardmäßig in der ~/.bash_history gespeichert, wenn man sie woanders speichern will kann man das mit HISTFILE festlegen.
-
export HISTTIMEFORMAT='%d.%m.%Y %T '
Wenn diese Variable gesetzt ist wird zu jedem eingegebenen Befehl auch die Uhrzeit gespeichert. Der Wert von HISTTIMEFORMAT wird verwendet um die Zeit zu formatieren, mehr Informationen dazu finden sich in der Manpage von strftime (man 3 strftime).
530 07.12.2008 13:22:18 export HISTTIMEFORMAT='%d.%m.%Y %T ' 531 07.12.2008 13:22:28 history
Legt fest wie viele Befehle gespeichert werden sollen, standardmäßig ist meistens 500 eingestellt.
Befehle in Echtzeit speichern
Die Bash speichert die eingegebenen Befehle erst wenn sie beendet wird, deswegen werden die Befehle anderer Bash-Sitzungen nicht angezeigt wenn man mehrere Bashs gleichzeitig laufen hat. Aber da gibt es einen kleinen Trick, denn man kann den Prompt so verändern das er die Erinnerung bei jeder neuen Eingabe speichert und neu einliest. Dazu werden die beiden Befehle history -a (Befehle in der History speichern) und history -r (History-Datei neu einlesen) verwendet.
Man muss die beiden Befehle einfach nur zum Bash Prompt hinzufügen.
export PS1=$PS1`history -a; history -r;`
Und schon wird die Erinnerungsfunktion der Bash in Echtzeit aktualisiert.

Kommentare
Keine Kommentare bis jetzt.