Geef programma's een opdrachtgeschiedenis met rlwrap
Gepubliceerd: Dinsdag 20 juli 2010
Auteur: Koen Vervloesem
Heel wat UNIX-programma's implementeren een opdrachtgeschiedenis, waarbij je naar vorige opdrachten kunt navigeren met de pijltjestoetsen. Dit alles werkt dankzij de GNU readline bibliotheek. Voor programma's die readline niet gebruiken kun je met een trucje toch nog een opdrachtgeschiedenis toevoegen.
Programma's zoals de shell Bash en de client van MySQL gebruiken de C-functies 'readline()' en 'add_history()' om in de opdrachtgeschiedenis te navigeren en te zoeken en om ingevoerde opdrachten aan die geschiedenis toe te voegen. Dit is zo handig dat je het al vlug mist bij programma's die niet van GNU readline gebruikmaken of die in je distributie niet met deze mogelijkheid gecompileerd zijn. Zonder die ondersteuning tonen die programma's bij het intypen van de pijltjestoetsen vreemde uitvoer zoals '^[[A^[[B'.
Gelukkig bestaat er een oplossing voor die laatste programma's: de wrapper rlwrap voegt de readline-functionaliteit toe aan een programma dat je als argument oproept. Rlwrap gebruikt dan de omgevingsvariabele LD_PRELOAD om de invoerfuncties van het originele programma te vervangen door wrappers die GNU readline en history gebruiken. Als gevolg hiervan krijg je ook een bestand '.programmanaam_history' in je home-directory met de opdrachtgeschiedenis van het programma, die bewaard wordt als je het programma afsluit en weer opstart.
De man-pagina toont nog heel wat opties die rlwrap aanbiedt. Zo kun je instellen wat er met dubbels in de opdrachtgeschiedenis gebeurt en hoe groot de bijgehouden geschiedenis is, een alternatieve locatie voor het geschiedenisbestand opgeven, instellen of rlwrap ook de invoer van kinderen van het opgegeven programma moet verwerken, een bestand opgeven met vervolledigingen die verschijnen als je op de TAB-toets duwt, en filters configureren om bijvoorbeeld wachtwoorden uit de geschiedenis te houden.
Bron: Techworld
De rubriek Tips & Tools biedt praktische informatie die IT-professionals in hun dagelijkse werk kunnen toepassen.
