Farbcodes abgreifen im Falle einer Pipe?



  • Hi,
    ich habe mich heute gefragt, als mal wieder die Ausgabe meines Programms inklusive aller Farbcodes in less sichtbar waren, ob es möglich ist die Farbcodes abzufiltern sobald eine Pipe/etwas was die Farbcodes nicht versteht am anderen Ende von Stdout steht. Im Folgenden die Ausgabe:

    Ausgabe von less:

    ESC[32m:ESC[0mEngine
    

    Ausgabe im Terminal:

    <GRÜN>:</GRÜN>Engine
    

    Gibt es für diese kleine Unschönheit eine schicke Lösung? Apropos und Google haben sich mal wieder in Schweigen gehüllt.

    Grüße,
    Christoph



  • Du musst einfach deinen String parsen und wenn du ESC[??? findest löscht du es raus. Was anderes macht die Bash ja auch nicht.



  • ich denke sein problem ist, dass er rausfinden muss, ob sein stdout auf ein terminal geht oder in eine pipe.
    Wie das geht weiß ich jetzt auch nicht (evtl. /proc auslesen), aber im Quelltext von ls sollte sich auf jeden Fall die Lösung finden. Dort gibts ja die --color=auto option.



  • imhotep schrieb:

    Du musst einfach deinen String parsen und wenn du ESC[??? findest löscht du es raus. Was anderes macht die Bash ja auch nicht.

    Doch, ich denke schon, dass die das anders macht, siehe DrGreenthumbs Post.



  • Hi,
    Danke für den guten Hinweis DrGreenthumb. Und wie immer gleich die Lösung für die Suchfunktion.

    Quelle test.c:

    #include <unistd.h>
    #include <stdio.h>
    
    int main()
    {
            printf("Farben: %d\n",isatty (STDOUT_FILENO));
    }
    

    Ausgabe:

    ~$ ./test
    Farben: 1
    ~$ ./test | less
    Farben: 0
    

Anmelden zum Antworten