¿Cómo encadenar múltiples scripts LESSOPEN?

En la actualidad, las distribuciones de Linux tienen un LESSOPEN pnetworkingeterminado configurado en /usr/bin/lesspipe que permite inspeccionar fácilmente, por ejemplo, files comprimidos o files PDF.

Ahora quería ver si puedo agregar resaltado de syntax a less. Esto se logra fácilmente con source-highlight . LESSOPEN="| /usr/bin/source-highlight -i %s -q -f esc" y funciona bien.

Pero ahora el problema es: ¿cómo obtengo el comportamiento de lesspipe y source-highlight? Simplemente agregar uno después del otro no funciona:

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

Tampoco tiene sentido, así que esto no es realmente sorprendente.

¿Es posible configurar esto sin escribir scripts elaborados? El mejor caso sería tener un encadenamiento, es decir, proporcionar resaltado de syntax para un file comprimido también.

Solutions Collecting From Web of "¿Cómo encadenar múltiples scripts LESSOPEN?"

El command en la variable LESSOPEN después de la tubería inicial es ejecutado por el shell indicado por la variable de entorno SHELL y debe producir el contenido deseado en su salida estándar.

Puede pasar la salida de lesspipe como input a otro command que lee desde input estándar y escribe en salida estándar. Sin embargo, para que source-highlight pueda leer desde su input estándar, necesita que se le indique qué idioma resaltar, por lo que la source-highlight no funciona de esta manera.

Cuando lesspipe no reconoce un formatting de file, no imprime nada, lo que less interpreta como una indicación para leer el file original. Si tiene ifne de los ifne de Joey Hess , puede usarlo para detectar este caso y, en su lugar, probar source-highlight . Tendrá que save el nombre del file original en una variable para que pueda usarlo dos veces.

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

Tenga en count que deberá include -r o -R en $LESS o escribir -r o -R después de comenzar less para que los colors se muestren less.