Doe meer met less
Gepubliceerd: Dinsdag 1 februari 2011
Auteur: Koen Vervloesem
Iedere Unix- of Linux-beheerder kent less om de inhoud van tekstbestanden te bekijken. Minder bekend is dat je met het script lesspipe ook de inhoud van allerlei andere bestandsformaten kunt bekijken.
Het programma lesspipe is een preprocessor voor de pager less, die dus de inhoud van een bestand kan aanpassen vóór die door less weergegeven wordt. Heel wat Linux-distributies en Unix-systemen installeren in de praktijk een shellscript lesspipe dat onder andere tar-archieven en gecomprimeerde gzip- of bzip2-bestanden kan weergeven. Debian en Ubuntu installeren standaard een versie van lesspipe die enorm veel bestandsformaten ondersteunt, waaronder ook doc, iso, pdf en allerlei afbeeldingsformaten. Dit vereist wel dat je programma's installeert die informatie uit deze bestandsformaten kunnen halen, zoals catdoc voor doc en ImageMagick voor afbeeldingen. Bekijk de inhoud van /usr/bin/lesspipe maar eens (het is gewoon een shellscript) om de mogelijkheden te zien.
Om lesspipe te laten werken, moet je de omgevingsvariabele LESSOPEN instellen, bijvoorbeeld:
export LESSOPEN="| /usr/bin/lesspipe %s"
Als je het script lesspipe onder Debian of Ubuntu zonder parameters oproept, geeft het als uitvoer de export-commando's die je hiervoor moet ingeven. Het volstaat dan om het volgende in je loginscript zoals ~/.bash_profile te zetten (wat beide distributies al doen):
eval "$(lesspipe)"
Uitbreidingen
Als je het standaardgedrag van lesspipe wil aanpassen of uitbreiden, dan kan dit in het shellscript ~/.lessfilter. Stel dat je bijvoorbeeld ID3-tags van een mp3-bestand wil tonen met less, dan schrijf je het volgende script:
#!/bin/sh
case "$1" in
*.mp3)
id3v2 -l "$1"
;;
*)
exit 1
esac
exit 0
Vergeet niet om dit script uitvoerbaar te maken met chmod +x ~/.lessfilter. Als je nu met less een mp3-bestand wil pagen, krijg je de ID3-tags van het bestand te zien, en als je een bestand van een ander type paget, wordt dit aan de standaard lesspipe doorgegeven. Om dit zo te laten werken, is het wel belangrijk dat je lessfilter-script 0 als exitcode geeft als het zelf de invoer verwerkt en 1 als je de invoer door lesspipe wil laten weergeven.
De rubriek Tips & Tools biedt praktische informatie die IT-professionals in hun dagelijkse werk kunnen toepassen.
