Advanced Bash History

Unix-Shells verfügen, ganz ähnlich wie Browser, über eine History genannte Aufzeichnung der zuletzt eingegebenen Befehle. Mit der Pfeiltaste nach oben können die letzten Befehle durchgescrollt werden. Die komplette Aufzeichnung lässt sich über die Eingabe von history anzeigen und listet die neuesten Befehle am Schluss der Liste auf.

History Basics

Jedem Befehl ist eine Nummer vorangestellt über die sich der jeweilige Befehl durch ein vorangestelltes ! erneut ausführen lässt. So führt etwa die Eingabe von !22 den Befehl mit der Nummer 22 erneut aus. Mit !! wird stets der letzte Befehl noch einmal ausgeführt. Diese Eingaben können auch ergänzt werden. Wurde etwa ein sudo vergessen, lässt sich das schnell mit sudo !! für den letzten Befehl ergänzen. Die history man-page listet eine Unzahl an weiteren Optionen auf, die für den effizienten Einsatz der Shell verwendet werden können. In meiner täglichen Arbeit nutze ich beispielsweise häufig den !$ Operator.

Dieser bezieht sich stets auf das letzte “Wort” eines Befehls. Hatte man etwa eine Datei per cat /etc/somefile.conf angezeigt, ist sie direkt danach per vim !$ editierbar. In der man-page finden sich, wie gesagt, noch viele weitere Möglichkeiten mit der History umzugehen. Es ist aber vor allem wichtig, dass die Shortcuts auch ihren Weg ins Muskel-Gedächtnis finden. Denn nur wenn die verschiedenen Operatoren benutzt werden können ohne groß nachzudenken machen sie auch Sinn.

Mehr History durch .bashrc

Durch Einträge in die ~/.bashrc1 kann man die Fähigkeiten der History erweitern und verbessern.

So ist es normalerweise üblich, dass die History nur nach einem sauberen exit der aktuellen Shell geschrieben wird. Stürzt die Shell ab oder hat man mehrere gleichzeitig geöffnete Fenster mit Shells2 ist die History verloren, oder kommt durcheinander oder steht nicht in allen Fenstern zur Verfügung. Diesem unhaltbaren Zustand ist glücklicherweise sehr einfach abzuhelfen. Durch das Hinzufügen von einer Zeile in der .bashrc wird die History direkt nach jedem Kommando geschrieben und steht in anderen Fenstern zur Verfügung:

PROMPT_COMMAND="history -a"

Mein absoluter Lieblingsschnipsel für die History-Erweiterung per .bashrc ist dieser:

h() { if [ -z "$1" ]; then history; else history | grep "$@"; fi; }

Hier wird eine Funktion namens h definiert. Diese führt den oben erwähnten Befehl history aus, wenn kein weiterer Parameter angegeben wird. Folgt nach dem h ein beliebiger String wird nach diesem in der Histroy gegrept. So wird etwa ein h cd alle verwendeten cd-Kommandos anzeigen.

Eine sehr praktische Sache.

Soll die Ausgabe der History ausserdem erweitert werden, so ist dieser Schnipsel zu verwenden:

export HISTTIMEFORMAT='%Y.%m.%d-%T :: ' HISTFILESIZE=50000 HISTSIZE=50000

Damit wird die Ausgabe der History um Datum und Uhrzeit der Befehle erweitert und ausserdem auf 50.000 Einträge erweitert.

Die vorgestellten Schnipsel können natürlich angepasst oder erweitert werden. Die Größe der History lässt sich auch ohne die Datumsangabe verwenden und es ist natürlich auch möglich nur das Datum oder nur die Uhrzeit zu verwenden…

Update, 09.04.2010

Ein weiterer Schnipsel aus einem Kommentar von Asmus:

bind '"\e[A"':history-search-backward 
bind '"\e[B"':history-search-forward

Hierdurch ist es möglich einen Befehl, etwa cd, zu tippen und dann mit den Pfeiltasten nur durch solche Befehle zu navigieren, die mit cd beginnen. Total super!

Ich habe hier nur die Anführungszeichen korrigiert, diese wurden in Asmus Kommentar typografisch korrekt, aber .bashrc untauglich angezeigt.

  1. Eine versteckte Datei im Homeverzeichnis, Grundlegendes zu dieser Datei hier… []
  2. Das ist hier quasi ständig der Fall… []

QuickLinks vom 2. Juni bis zum 16. Juni

Meine delicious.com-Links vom 2. Juni bis zum 16. Juni:

QuickLinks vom 20. März

Meine del.icio.us-Links vom 20. März:

  • 100 Weird Facts About the Human Body
  • The Red Baron Screensaver – is a 3D OpenGL Mac OS X screensaver showing the Red Baron flying around in his Foker DR-1 tri-plane.
  • Mtp Target – is a free (as freedom and as free beer) multi-players online action game working on Windows, GNU/Linux and Mac where you fight with and against players. It is a mix of action, dexterity and strategy game. After rolling down a giant ramp, you must delic
  • Down for everyone or just me? – Some kind of offsite visual ping to a site of your choice.
  • From BFS to ZFS: past, present, and future of file systems – Why we care about file systems and why they matter to you.
  • Justincaseidie.com – in just a few clicks, you can save a message that will only be sent to its intended recipient if you die. Well…almost. It will actually only be sent if you fail to log back in to the system within the timeframe that you set…
  • electric sheep – is a free, open source screen saver run by thousands of people all over the world.
  • IRCCat – does 2 things: 1. Listens on a specific ip:port and writes incoming data to an IRC channel. 2. Hands off commands issued on irc to a handler program (eg: shell script) and responds to irc with the output of the handler script.
  • googleDrive – Drive a tiny yellow car around your favourite city on google maps…

QuickLinks vom 20. November bis zum 23. November

Meine del.icio.us-Links vom 20. November bis zum 23. November:

  • Enigma Simulator – Use an Enigma on your Mac!
  • iP2F iP2F – is a plugin that makes it extremely easy to upload your pictures from iPhoto 2 Flickr. Shareware, 14,95$
  • Load OSX 10.5 Leopard on the eeePC
  • Upside-Down-Ternet – Having fun with unknown WLAN-Clients…
  • WaterRoof – is an IPFW firewall frontend for Mac OS X with a easy interface and many options. Features include dynamic rules, bandwidth management, NAT configuration and port redirection, pre-defined rule sets and a wizard for easy configuration.
  • Spaces.. Spaces.. Spaces.. – The code will prevent the Dock from switching to a different space immediately after switching to a different application (using Command-Tab, for instance). The result is a (hopefully) more intuitive Spaces experience.
  • Top 10 Quicksilver Plug-ins
  • HappyGirl – Have you ever needed to express your love every minute? If your beloved use computer you can install her this application that will articulate your feeling every now and then (even when you are absent).