Jak logować się „nie-ANSI-fy”?

10

Ostatnio narzędzia wiersza poleceń mają tendencję do używania fantazyjnych kolorów ANSI w danych wyjściowych dziennika (na przykład NPM i wiele narzędzi opartych na nodejs, rvm, docker i kilka innych „nowoczesnych” narzędzi).

To sprawia, że ​​miło jest czytać na ekranie (*), ale nie tak przyjemnie, gdy chcesz przesłać dane wyjściowe do pliku dziennika lub przez transport, który nie obsługuje dobrze ANSI, na przykład różne narzędzia do zdalnego wykonywania i rozwiązania do monitorowania przez Internet. Wiele bardziej dojrzałych narzędzi miało przynajmniej dość przyzwoitości, aby wykryć, kiedy wyjście nie jest TTY i wyłączyć kolor, ale nie z tymi nowymi, wymyślnymi „przyjaznymi dla użytkownika” interfejsami CLI - co pozwala mi pozbyć się kolorów ANSI przez potokowanie wynik w jeszcze innym procesie.

s/\x1B\[[0-9]*\w//gWydaje się, że rozwodzenie się nad danymi wyjściowymi pozwala na wykonanie zadania, ale czy istnieje bardziej przejrzyste podejście niż kopiowanie wyrażeń regularnych do wszystkich moich skryptów?

(*) przynajmniej do momentu, gdy narzędzie spróbuje wyświetlić błędy w kolorze ciemnoczerwonym na terminalu z ciemnym tłem.

Guss
źródło
2
Zobacz: unix.stackexchange.com/questions/14684/… - unix.stackexchange.com/questions/111899/… stackoverflow.com/questions/17998978/… superuser.com/questions/380772/... - Ponad 4 pytania powyżej przez 3 lata w 3 witrynach otrzymaliśmy odpowiedzi tylko na użycie narzędzia zastępującego / usuwającego wyrażenia regularne. Domyślam się, że nie ma nic lepszego.
Zoredache
Jedyną rzeczą, która wydaje się dyskusyjna, jest to, który regex jest najlepszy dla danej sytuacji.
Zoredache
1
is there a cleaner approach then just copy pasting regular expressions into all of my scripts?- Zapisać filtr oczyszczania w pliku o nazwie „/ usr / local / bin / stripttycolor.sh” czy coś takiego? W ten sposób masz wyrażenie regularne ograniczone do jednej lokalizacji?
Zoredache
3
Jeśli wiesz, że będziesz zapisywał dane wyjściowe do pliku, najłatwiejszą rzeczą (przynajmniej dla NPM) jest uruchomienie --no-colorflagi. Wiele innych poleceń ma również podobne flagi.
Moshe Katz
@MosheKatz: niestety na przykład nie wszystkie polecenia bower.
Guss

Odpowiedzi:

1

„ansifilter -p” może ci się przydać ...

Jest w repozytoriach Fedory; -p określa zwykły wynik:

Name        : ansifilter
From repo   : updates
Summary     : ANSI terminal escape code converter
URL         : http://www.andre-simon.de/doku/ansifilter/ansifilter.php
License     : GPLv3+
Description : Ansifilter handles text files containing ANSI terminal escape codes.
            : The command sequences may be stripped or be interpreted to generate formatted
            : output (HTML, RTF, TeX, LaTeX, BBCode).
Liczyrzepa
źródło
Działa ładnie, teraz muszę go tylko spakować dla Ubuntu :-)
Guss