20080728

less: автоматический просмотр архивов *.gz и других типов файлов

Популярную листалку для командной строки less легко научить просматривать не только текстовые файлы, но и многие другие. Например, ей можно смотреть сжатые файлы или файлы PDF не задумываясь о вызове архиватора или нужного конвертера. Примерно так:
$ less /usr/share/doc/less/changelog.gz
Собственно, во многих дистрибутивах так уже настроено по умолчанию. В Debian эта возможность по умолчанию выключена. Чтобы она заработала нужно в ~/.bashrc (если пользуетесь bash) добавить eval $(lesspipe) или eval $(lessfile). Это установит переменные окружения LESSOPEN и LESSCLOSE, говорящие less пропускать файлы через указанный фильтр. Фильтр /usr/bin/lesspipe смотрит на расширение файла и запускает нужный конвертрер, если необходимо. Разница между lesspipe и lessfile в том, что первый конвертирует файлы на лету, сразу отдавая результат в less, а lessfile вначале полностью конвертирует файл, и только потом вызывает less.

Понятно, что очень просто можно настроить пользовательские фильтры. Добавлять их нужно в пользовательский скрипт ~/.lessfilter. Например, чтобы просматривать с помощью less файлы OpenOffice, я добавляю фильтр, вызывающий antiodt, а чтобы просматривать файлы MSWord, фильтр, вызывающий antiword. Файл ~/.lessfilter выглядит при этом так:
#!/bin/sh
(
case `echo "$1" | tr '[:upper:]' '[:lower:]'` in
    *.odt)
        if [ -x "`which antiodt`" ]; then antiodt "$1" ;
        else cat "$1"; fi ;; # No antiodt available
    *.doc)
        if [ -x "`which antiword`" ]; then antiword "$1" ;
        else cat "$1"; fi ;; # No antiword available
esac
) 2>/dev/null
P.S. Код раскрасил с помощью плагина toblog к vim, создающего цветной HTML согласно текущей цветовой схеме редактора.