rlwrap - Kommandozeilenhistorie für Alle!

Wenn man intensiv die Kommandozeile in Linux oder einem Unix nutzt, dann ist die Historie der eingegebenen Befehle eine tolle Erfindung. Die bash macht das ja heutzutage von Hause aus: Einfach mit den Cursortasten zu einem früheren Befehl zurückblättern, ggf. ändern und nochmal ausführen.

Nun gibt es immer wieder Programme (wie sqlplus oder cpan), die das nicht unterstützen, weil sie z.B. nicht gegen libreadline gebaut sind. Das sieht dann so aus – hier ein Beispiel mit der Oracle DB console:

pre. # sqlplus /nolog
SQL*Plus: Release 10.2.0.1.0 – Production on Fri Feb 29 21:30:17 2008
Copyright© 1982, 2005, Oracle.  All rights reserved.
SQL> [[A[[B

Man beachte die letzte Zeile. Dort wollte ich ein vorheriges Kommando nochmal ausführen.

Aber da gibts eine Lösung: rlwrap. Es übernimmt das eigentlich auszuführende Kommando mit all seinen Argumenten als Argument, filtert die Eingaben und schreibt sie mit.

pre. # rlwrap sqlplus /nolog

Wenn man dann mit den Cursortasten blättern will, kramt rlwrap in seiner Historie und übergibt erst nach (ggf. Modifikation) und Eingabe von Enter die komplette Kommandozeile an das eigentliche Programm.
Für seine Historie hält sich rlwrap für jeden verwalteten Befehl eine Historydatei im $HOME des Benutzers:

pre. # ls -la .*_history
rw——— 1 oracle oinstall 77 1. Mar 10:56 .sqlplus_history
rw——— 1 oracle oinstall 4539 1. Mar 10:56 .bash_history

Klasse!