Chcę wiedzieć, czy jest jakiś sposób, aby sprawdzić, czy mój program może wyprowadzać dane wyjściowe terminala przy użyciu kolorów, czy nie.
Uruchamianie poleceń takich jak less
i patrząc na dane wyjściowe z programu, który wyświetla za pomocą kolorów, dane wyjściowe są wyświetlane nieprawidłowo, jak
[ESC[0;32m0.052ESC[0m ESC[1;32m2,816.00 kbESC[0m]
Dzięki
Odpowiedzi:
W jakim języku piszesz swoją aplikację?
Normalnym podejściem jest sprawdzenie, czy urządzeniem wyjściowym jest tty, a jeśli tak, sprawdź, czy ten typ terminala obsługuje kolory.
Tak
bash
wyglądałobyW C musisz dużo pisać, ale możesz osiągnąć ten sam wynik, używając isatty i funkcji wymienionych w
man 3 terminfo
.źródło
To powinno wystarczyć:
wyjaśniono kolory tput:
Jeśli spojrzysz na stronę podręczną, zauważysz to:
I...
Termcap
colors
znajduje się w bazie danych terminfo, więc możesz o to poprosić. Jeśli masz zerowy status wyjścia, kompilowana jest termcap. Ale jeśli masz coś takiego:To pokazuje, że nieznany limit nie istnieje. Więc to:
Pokazuje, że twoje polecenie było słuszne.
Inne przydatne sposoby:
Twoje zdrowie
źródło
colors
nie jest udokumentowany natput
stronie podręcznika (!), więc czy powinienem szukać liczby> = 8 w stdout czy kodu powrotu 0?colors
Funkcja jest opisana w terminfo (5) . Testowanie za pomocątput -T dumb colors
,tput -T vt220 colors
,tput -T linux colors
,tput -T xterm colors
sugeruje wspólne wartości-1
(bez obsługi kolorów) i8
(8 kolorów). Należy pamiętać, że dotyczy to tylko sprawdzenia, czy urządzeniem wyjściowym jest terminal (np.[ -t 1 ]
Lubisatty
).tput colors
zwraca to, co lokalna baza danych terminali myśli o terminalu. To może, ale nie musi odpowiadać temu, co terminal może faktycznie zrobić, zwłaszcza w przypadku takiego typu terminala,xterm
który występuje w wielu wariantach (od czerni i bieli do 256 kolorów).W tym przypadku użycia programy zwykle wykonują (np. GNU ls lub GNU grep with
--color=auto
) używanie kolorów, jeśli ich dane wyjściowe trafiają do terminala, a w przeciwnym razie żadnych kolorów. Terminale, które nie obsługują sekwencji zmieniających kolory ANSI, są na tyle rzadkie, że dopuszczalne jest, aby ich użytkownicy zastąpili domyślny wybór. W każdym razie upewnij się, że aplikacja ma opcję wymuszania włączenia lub wyłączenia kolorów.W skrypcie powłoki użyj,
[ -t 1 ]
aby sprawdzić, czy standardowym wyjściem jest terminal.Z programu korzystającego z C API, wywołaj
isatty(1)
.źródło
Spróbuj użyć
less --RAW-CONTROL-CHARS
.W tym przykładzie używam logtool , który drukuje dane wyjściowe przy użyciu kolorów.
Bez --RAW-CONTROL-CHARS:
Z opcją --RAW-CONTROL-CHAR (Wyobraź sobie, że jest w ładnych kolorach. Nie jestem też pewien, dlaczego
^G
to się wyświetla.):źródło
To byłby błąd, gdyby
less
nie ustawiono interpretacji ucieczek ANSI; szukaćR
w$LESSOPTS
. Jeśli chodzi o ustalenie, czy system wie, że twój terminal radzi sobie z kolorami,tput colors
wyświetli albo liczbę obsługiwanych kolorów, albo-1
jeśli nie obsługuje kolorów. (Należy pamiętać, że niektóre terminale mogą używaćxterm
zamiastxterm-color
ich opisu, ale nadal obsługują kolory).źródło
Jeśli chcesz dodać kolor do wydruku, ale tylko wtedy, gdy kolory są obsługiwane, możesz po prostu użyć
tput
. http://tldp.org/HOWTO/Bash-Prompt-HOWTO/x405.htmlźródło