34 votes

Comment faire pour que les couleurs de sortie soient "moins" nombreuses ?

Lorsque je lance un programme (par exemple grep o ls ) sans pager, sa sortie est colorée. Cependant, lorsque je l'exécute en envoyant sa sortie à less aucune couleur n'est montrée.

Par exemple, cette commande produit une sortie colorée :

grep -r something

mais ce n'est pas le cas :

grep -r something | less

Pourquoi ? Comment puis-je voir les couleurs à travers less ?

53voto

Mufaka Points 54

Il y a deux problèmes ici :

  • Des commandes comme ls -qui détectent automatiquement le support de la couleur, ne trouvent pas de support dans les tuyaux.
  • less est configuré pour afficher uniquement les codes de couleur par défaut.

Les deux peuvent être surmontés mais c'est un peu lourd :

ls --color=always | less -R

Ce n'est pas ls spécifique. De nombreuses commandes qui prennent 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 à un vrai terminal ou non. Lorsque vous faites du pipeing, le STDOUT est défini comme le STDIN de la commande suivante.

Vous pouvez voir cela au travail dans le ls code source . Il utilise le isatty (une interface POSIX de base) pour savoir ce qu'il en est :

  • Les couleurs sont activées par défaut :

        print_with_color = (i == color_always
                            || (i == color_if_tty
                                && isatty (STDOUT_FILENO)));
  • Est-ce que nous essayons de sortir 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 surchargé, il détectera le support des couleurs, avec la fonction isatty :

color_option = isatty (STDOUT_FILENO) && should_colorize ();

4voto

DaveEmme Points 261

Si vous êtes intéressé par les couleurs dans less de manière plus générale, vous pourriez envisager de lesspipe.sh . Voir, par exemple, https://github.com/wofr06/lesspipe .

lesspipe.sh est un filtre d'entrée pour le pager less tel que décrit dans la page de manuel de less. Le script s'exécute sous un script compatible avec ksh (par exemple bash, zsh) et vous permet d'utiliser less pour visualiser les fichiers à contenu binaire, les fichiers compressés, les archives et les fichiers contenus dans des archives.

Il colorisera également les Shell Shell, perl Shell, etc. de manière similaire à un éditeur de texte, mais sans l'utilisation d'un programme de "prétraitement" pour effectuer la colorisation.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X