Forum Programmation.autre Colorer stderr

Posté par  .
Étiquettes : aucune
0
15
fév.
2008
Salut aux experts de la console
Y a t'il y moyen de colorer stderr dans le terminal, histoire par exemple d'avoir stdout dans la couleur par défaut mais stderr dans une autre couleur, pour que le message d'erreur ressorte au milieu des banalités d'usages ?
Je sais que ça peux être faisable directement dans le programme mais je voudrais un comportement générique pour ne pas tout ré-écrire...
Merci aux experts
  • # zsh

    Posté par  . Évalué à 1.

    J'avais trouver ça dans un coin du web, mais je crois que c'est spécifique à zsh:


    exec 2>>(while read line; do
    print '\e[91m'${(q)line}'\e[0m' > /dev/tty; done &)
  • # bash

    Posté par  . Évalué à 1.

    Tu peux mettre ça dans ton .bashrc :
    colorstderr()
    {
            $* 3>&1 1>&2 2>&3 | sed 's/^\(.*\)$/^[[1;41m\1^[[0m/'
    }
    
    Pense à remplacer les ^[ par la séquence d'échappement correcte (Ctrl+V puis Echap). Tu peux le faire directement depuis bash si ton éditeur ne le permet pas :
    cat >> ~/.bashrc
    colorstderr()
    {
            $* 3>&1 1>&2 2>&3 | sed 's/^\(.*\)$/Ctrl+V Echap[1;41m\1Ctrl+V Echap[0m/'
    }
    Ctrl+D
    source ~/.bashrc
    
    La fonction s'utilise ainsi :
    colorstderr commande
    
    • [^] # Re: bash

      Posté par  . Évalué à 2.

      $* ne fera probablement pas ce que tu veux par rapport aux caractères spéciaux et à la séparation des mots. Ce qui faut utiliser dans ce cas-là c'est

      "$@"

      (man bash, section PARAMETERS)
  • # Puisque chacun y va de son script

    Posté par  . Évalué à 2.

    Je te propose un script qui a l'avantage de colorer stderr en laissant stderr sur la sortie standard et stdout sur la sortie d'erreur.
    En fait c'est une feinte car on échange 2 fois stderr et stdout, la première fois (fonction swapandcolor) on échange et on colorize, la deuxième fois on restore l'état initial.

    #! /bin/sh

    function swapandcolor()
    {
        "$@" 3>&2 2>&1 1>&3 | while read line
        do
            echo -e "\e[91m$line\e[0m"
        done
    }

    swapandcolor "$@" 3>&2 2>&1 1>&3


    Étienne
    • [^] # Re: Puisque chacun y va de son script

      Posté par  . Évalué à 2.

      Dans le première phrase, il fallait bien sûr lire : qui a l'avantage de colorer stderr en laissant stderr sur la sortie d'erreur et stdout sur la sortie standard.

      Désolé

      Étienne

      PS: très drôle le strip de geekscottes quand on se répond à soi-même.

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.