LESSPIPE.SH(1) Commandes de l'utilisateur LESSPIPE.SH(1)

lesspipe.sh — Un filtre pour less(1)

lesspipe.sh [FICHIER[S]]...

lesspipe.sh a pour but d’améliorer la sortie de less(1). C’est le contenu du fichier qui détermine le choix des règles à appliquer pour modifier la sortie. L’extension de nom de fichier n’est prise en compte qu’en dernier recours. lesspipe.sh est en général appelé en tant que filtre d’entrée pour less(1).

Grâce à ce filtre, less(1) va pouvoir afficher le contenu décompressé des fichiers compressés par gzip, bzip2, compress, zstd, lz4, lzip, xz, lzma ou brotli. Pour les fichiers contenant des archives et des répertoires, une table des matières sera affichée (formats tar, ar, zip, 7-zip, rar, jar, cpio, rpm, deb ms-cabinet, iso, appimage et snap). De nombreux autres types de fichier seront reformatés avant affichage. Il s’agit des formats des suites pdf, dvi, markdown, Office (MS et Openoffice) et des formats NetCDF, matlab, device tree blob, html, xml et media (image, audio et video). Pour que ce filtrage fonctionne, des programmes d’assistance doivent être installés.

Le filtre peut aussi être appliqué récursivement pour extraire et afficher les fichiers d’une archive à la volée. Cette opération fonctionne jusqu’à une profondeur de 6, l’application d’un algorithme de décompression comptant comme un niveau séparé.

Si l’utilitaire file(1) indique du texte avec un codage différent de celui utilisé dans le terminal, le texte sera converti vers le codage par défaut à l’aide de iconv(1). Pour que cela fonctionne, la commande file(1) doit extraire le codage du fichier de manière correcte, ce qui n’est pas toujours le cas. L’ajout d’un deux-points (:) au nom de fichier désactive la conversion.

Les programmes git(1), vim(1) ou mutt(1) peuvent lire des fichiers non-texte en utilisant lesspipe.sh. Pour plus de détails, consultez le Wiki à https://github.com/wofr06/lesspipe/wiki.

Le filtre est invoqué depuis less(1) à condition que la variable d’environnement LESSOPEN soit correctement définie. Pour les interpréteurs de commande de style ksh (bash(1), zsh(1)), la commande

LESSOPEN="|lesspipe.sh %s"; export LESSOPEN
active le filtre pour less(1). Utilisez un chemin absolu si lesspipe.sh ne se trouve pas dans le chemin de recherche. La commande permettant de définir LESSOPEN peut aussi être affichée en invoquant lesspipe.sh sans argument. Il est ainsi possible de définir LESSOPEN directement :
eval `lesspipe.sh` (bash(1)) ou
lesspipe.sh|source /dev/stdin (zsh(1))
Les commandes ci-avant ne fonctionnent de la manière décrite que si le nom de fichier est lesspipe.sh. Si ce dernier a été installé sous un nom différent, son invocation sans argument fonctionnera comme un filtre avec LESSQUIET définie et attendant des données en entrée sur STDIN.

Une fois la variable d’environnement définie comme décrit ci-avant, less(1) affichera des informations au format texte pour une grande variété de formats de fichier.

Le filtre n’est en général pas invoqué si l’entrée de less(1) est un tube comme dans

cat fichier | less
Comme indiqué dans la page de manuel de less(1), le filtrage dans le cas d’un tube peut tout de même être forcé en préfixant LESSOPEN par les caractères « |- ».

Préfixer LESSOPEN par les deux caractères « || » pour gérer les fichiers vides et les erreurs de commande n’est que partiellement implémenté ; en général, en cas d’échec d’une commande au sein de lesspipe.sh, les messages d’erreur sont affichés.

Définir la variable d’environnement LESSQUIET à une valeur non vide permet de supprimer les messages d’information dans la première ligne de sortie du filtre.

Pour désactiver temporairement le filtre, un deux-points « : » peut être ajouté à la fin du nom de fichier. Si le nom de fichier contient un deux-points, un signe égal « = » devra être utilisé à la place.

Les fichiers au format html, xml ou perl pod sont toujours correctement affichés. Cependant, il sera parfois plutôt souhaitable de visualiser le contenu original du fichier. Pour ce faire, comme indiqué ci-avant, ajouter un deux-points à la fin du nom de fichier. Si le type de fichier correct (html, xml, pod) suit, la sortie pourra être colorée (voir aussi la section ci-après).

Exemple : less index.html:html

Si le binaire xmq est installé, le format xml sera rendu différemment de sorte que la structure xml soit mieux reconnue. Un affichage similaire pour le format html est effectué en ajoutant un deux-points à la fin du nom de fichier. Pour obtenir le contenu original du fichier html, deux deux-points sont alors requis.

Le filtre peut mettre la syntaxe en évidence en la colorant pour de nombreux types de fichier. nvimpager(1) sera utilisé pour colorer la sortie, s’il est installé. À défaut, on se rabattra sur les programmes bat(1)/batcat(1), pygmentize(1), source-highlight(1), vimcolor(1) ou code2color. Pour bat(1)/batcat(1), le thème est défini à « ansi » et le style à « plain », dont l’aspect est similaire à la sortie non filtrée de less(1). Ces réglages peuvent être redéfinis dans ~/.config/bat/config ou à l’aide des variables d’environnement BAT_STYLE et BAT_THEME.

Il est possible de forcer l’utilisation d’un programme de coloration en définissant la variable d’environnement LESSCOLORIZER avec le nom du programme choisi. Pour pygmentize(1) et bat(1)/batcat(1), des définitions d’option restreintes sont autorisées comme suit :

LESSCOLORIZER='pygmentize -O style=un_style' (-P est aussi autorisé)
LESSCOLORIZER='bat --style=foo --theme=un_thème' (par défaut, le thème est « ansi » et le style « plain »)
La coloration syntaxique est activée si la variable d’environnement LESS existe et contient l’option -R ou si less(1) a été invoqué avec cette option, ce qui garantit que les séquences d’échappement seront converties en couleurs et n’introduiront pas de « déchets » dans l’affichage. Utiliser l’option -r est déconseillé, car l’affichage à l’écran pourrait en être faussé si la sortie contient des lignes de grande longueur.

Si la sortie est colorée, la mise en évidence de la syntaxe peut être désactivée en ajoutant un deux-points (:) à la fin du nom de fichier. Si le langage pris en compte pour la coloration syntaxique n’est pas le bon, il est possible d’en forcer un autre en ajoutant un deux-points et un suffixe à la fin du nom de fichier.

Cette méthode ne peut pas être utilisée dans le cas d’un tube. La solution consiste alors à ajouter un dernier argument qui sera inspecté par lesspipe.sh. Un deux-points seul (désactiver le filtre) ou « :extension » (forcer un langage) peut être ajouté comme dans l’exemple suivant :

commande qui génère du code c | less - :c

Lorsque les conditions nécessaires à la coloration syntaxique sont réunies, les listages des contenus de répertoire et de fichier tar sont aussi colorés.

less(1) étant utilisé comme navigateur par défaut par certains programmes (comme man(1), git(1) et perldoc(1)), il est possible que lesspipe.sh soit invoqué et altère la sortie de ces programmes.

Dès que lesspipe.sh fait appel à un programme pour convertir l’entrée, la possibilité de visualiser la croissance des fichiers (en utilisant la commande F pendant l’exécution de less(1)) est perdue. Ce type de visualisation est souvent souhaité pour les fichiers journaux comme syslog. Pour désactiver temporairement lesspipe.sh, un deux-points (:) doit être ajouté en tant que dernier argument de less(1) comme dans l’exemple suivant :

less /var/log/syslog :
less(1) peut aussi être invoqué avec l’argument +F, ce qui équivaut à l’exécution de la commande F pendant l’exécution de less(1) :
less +F /var/log/syslog
Ajouter un deux-points au nom de fichier ne fonctionne pas, car le filtre doit alors être invoqué pour au moins supprimer ce deux-points et utiliser cat(1) pour le fichier original. En outre, il est possible de colorer les fichiers journaux non croissants en utilisant ccze(1). La reconnaissance d’un fichier en tant que journal est difficile si son nom ne se termine pas par « .log », mais peut être forcée en ajoutant « :.log » à la fin du nom de fichier comme dans l’exemple suivant :
less /var/log/syslog:.log

Cette version de lesspipe.sh permet de visualiser des fichiers contenus dans une archive qui peut elle-même être contenue dans une autre archive.

La syntaxe permettant de visualiser des fichiers dans une archive multifichier est

less archive:fichier
ou même
less super_archive:archive:fichier
Pour visualiser le dernier fichier de la chaîne dans son format brut, un deux-points doit être ajouté à la fin du nom de fichier. Si ce nom contient lui-même un deux-points, le signe égal (=) devra être utilisé comme caractère séparateur de remplacement.

Une fois encore, cette méthode d’extraction et de visualisation d’un fichier ne fonctionne pas si l’entrée de less(1) est un tube et si LESSOPEN commence par les caractères « |- ». Comme pour la coloration syntaxique, la solution consiste à utiliser un second argument qui commence par un deux-points « : ». La commande de l’exemple précédent s’écrira alors

cat super_archive | less - :archive:fichier

Il est possible d’effectuer une complétion des noms de fichier par tabulation au sein d’une archive en utilisant les fichiers lesscomplete (pour zsh(1) et bash(1)), _less (pour zsh(1)) et less_completion (pour bash(1)). Taper un deux-points « : » ou un signe égal « = » après un nom d’archive puis presser la touche tabulation déclenche le mécanisme de complétion. Cette méthode fonctionne aussi pour les archives chaînées. Les fichiers lesscomplete et less_completion doivent se trouver dans un des répertoires listés dans $PATH et la fonction _less pour zsh(1) dans un répertoire listé dans $fpath. Le script less_completion doit être invoqué depuis un script d’initialisation de bash(1), par exemple ~/.bashrc. De nouveaux répertoires tels que ~/scripts et ~/.fpath peuvent être ajoutés à l’aide des commandes

PATH=~/scripts:$PATH et fpath=(~/.fpath $fpath)

Le filtrage lesspipe.sh peut être amélioré ou remplacé par un programme défini par l’utilisateur. Un tel programme doit avoir pour nom .lessfilter (et être placé dans le répertoire personnel de l’utilisateur) ou lessfilter (et être accessible depuis un répertoire listé dans $PATH). Il doit être exécutable et quitter avec un code de retour de 0 si le filtrage a été effectué dans ce script. Dans le cas contraire, un code de retour différent de zéro signifiera que le filtrage est confié à lesspipe.sh.

Ce mécanisme permet d’ajouter des filtres pour de nouveaux formats ou, par exemple, de désactiver le filtrage pour certains types de fichier.

Wolfgang Friebel

Envoyez vos rapports de bogue à <wp.friebel AT gmail DOT com>.

Copyright © 2005-2024 Wolfgang Friebel
C'est un logiciel libre ; consultez les sources pour les conditions de copie. Il n'y a AUCUNE garantie ; même pas de VALEUR MARCHANDE ou d'ADÉQUATION À UNE UTILISATION PARTICULIÈRE.

less(1)

Une description de lesspipe.sh se trouve aussi dans le fichier README contenu dans le paquet source.

La traduction française de cette page de manuel a été créée par Lucien Gentis <lucien.gentis@univ-lorraine.fr>

Cette traduction est une documentation libre ; veuillez vous reporter à la GNU General Public License version 3 concernant les conditions de copie et de distribution. Il n'y a aucune RESPONSABILITÉ LÉGALE.

Si vous découvrez un bogue dans la traduction de cette page de manuel, veuillez envoyer un message à debian-l10n-french@lists.debian.org.

Août 2024 lesspipe.sh