Как связать несколько сценариев LESSOPEN?

В настоящее время в дистрибутивах Linux установлен LESSOPEN умолчанию для /usr/bin/lesspipe который позволяет легко проверять, например, сжатые файлы или файлы PDF.

Теперь я хотел посмотреть, могу ли я добавить подсветку синтаксиса на меньшее. Это легко сделать с подсветкой источника . Я использовал LESSOPEN="| /usr/bin/source-highlight -i %s -q -f esc" и он отлично работает.

Но теперь проблема становится: как мне получить поведение как lesspipe, так и source-highlight? Простое добавление один за другим не работает:

 $ export LESSOPEN="| /usr/bin/lesspipe %s | /usr/bin/source-highlight -i %s -q -f esc" $ less foo Invalid LESSOPEN variable 

Это также не имеет смысла, так что это не удивительно.

Можно ли установить это без написания сложных сценариев? Лучшим случаем было бы цепочки, т. Е. Обеспечить подсветку синтаксиса для заархивированного файла.

    Команда в переменной LESSOPEN после исходного канала выполняется оболочкой, обозначенной переменной окружения SHELL и должна выдавать желаемый контент на своем стандартном выходе.

    Вы можете передавать вывод lesspipe качестве входного сигнала другой команде, которая считывает со стандартного ввода и записывает на стандартный вывод. Тем не менее, для того, чтобы source-highlight читала со своего стандартного ввода, нужно сказать, на каком языке выделить, поэтому source-highlight не работает таким образом.

    Когда lesspipe не распознает формат файла, он ничего не печатает, что меньше интерпретируется как указание на чтение исходного файла. Если у вас есть ifne от ifne Hess's moreutils , вы можете использовать его для обнаружения этого случая и вместо этого попробовать source-highlight . Вам нужно сохранить исходное имя файла в переменной, чтобы вы могли использовать его дважды.

     LESSOPEN='|file=%s; /usr/bin/lesspipe "$file" | /usr/bin/ifne -n /usr/bin/source-highlight -i "$file" -o STDOUT 2>/dev/null' 

    Обратите внимание, что вам нужно будет включить -r или -R в $LESS или тип -r или -R после запуска less чтобы уменьшить цвет.