Die Bash History

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>
  • Legt fest wie viele Befehle gespeichert werden sollen, standardmäßig ist meistens 500 eingestellt.

  • 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

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.

Informationen

1 Stern2 Sterne3 Sterne4 Sterne5 Sterne (Keine Bewertung bis jetzt)
Loading ... Loading ...
Schlagwörter: , ,
Kategorie: Anleitungen, Linux
Ansichten: 3.162

Kommentare

Keine Kommentare bis jetzt.

Kommentar schreiben

XHTML: Folgende Elemente sind erlaubt: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre lang="" line="" escaped="">

Angetrieben durch Wordpress Thema erstellt von Antu