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