Lorsque j'exécute un programme (par exemple, grep
ou ls
) sans pageur, sa sortie est colorée. Cependant, lorsque je l'exécute en transférant sa sortie à less
, aucune couleur n'est affichée.
Par exemple, cette commande génère une sortie en couleur:
grep -r something
mais cela ne veut pas:
grep -r something | less
Pourquoi? Comment puis-je voir les couleurs avec less
?
Ici, nous avons deux problèmes:
ls
(qui détecte automatiquement le support des couleurs) ne trouvent pas de support dans les tubesless
est configuré pour afficher uniquement les codes de couleur par défaut.Les deux peuvent être surmontés mais c'est un peu maladroit:
ls --color=always | less -R
Ce n'est pas ls
spécifique. De nombreuses commandes prenant en charge la couleur ont également un argument de remplacement.
Une réponse un peu plus approfondie est que ls
vérifie si son STDOUT appartient ou non à un terminal réel. Lorsque vous transférez des éléments, le STDOUT est défini sur le STDIN de la commande suivante.
Vous pouvez le voir au travail dans le code source ls
. Il utilise la commande isatty
(une interface POSIX principale) pour comprendre la situation:
Les couleurs sont-elles activées par défaut:
print_with_color = (i == color_always
|| (i == color_if_tty
&& isatty (STDOUT_FILENO)));
Essayons-nous d’afficher en plusieurs colonnes:
if (format == long_format)
format = (isatty (STDOUT_FILENO) ? many_per_line : one_per_line);
//...
if (isatty (STDOUT_FILENO))
{
format = many_per_line;
set_quoting_style (NULL, Shell_escape_quoting_style);
qmark_funny_chars = true;
}
else
{
format = one_per_line;
qmark_funny_chars = false;
}
grep
fait une chose très similaire, à moins d'être explicitement remplacé, il détectera la prise en charge des couleurs avec isatty
:
color_option = isatty (STDOUT_FILENO) && should_colorize ();
Si les couleurs de less
vous intéressent plus généralement, consultez plutôt lesspipe.sh
. Voir, par exemple, http://freecode.com/projects/lesspipe .
lesspipe.sh est un filtre d'entrée pour le pager less, comme décrit dans la page de manuel de less. Le script s'exécute sous un shell compatible ksh (par exemple, bash, zsh) et vous permet d'utiliser moins de ressources pour afficher des fichiers avec un contenu binaire, des fichiers compressés, des archives et des fichiers contenus dans des archives.
Il colorera également les scripts Shell, les scripts Perl, etc. de la même manière qu'un éditeur de texte, mais sans utiliser aucun programme de "prétraitement" pour effectuer la colorisation.