Voglio sapere se c'è un modo per verificare se il mio programma può emettere l'output del terminale usando i colori o meno.
Esecuzione di comandi come less
e guardando l'output di un programma che esegue l'output utilizzando i colori, l'output viene visualizzato in modo errato, come
[ESC[0;32m0.052ESC[0m ESC[1;32m2,816.00 kbESC[0m]
Grazie
Risposta accettata:
L'idea è che la mia applicazione sappia di non colorare l'output se il programma non è in grado di stampare, ad esempio, registrando l'output da un lavoro cron in un file, non è necessario registrare l'output colorato, ma quando si esegue manualmente, mi piace visualizzare l'uscita colorata
In che lingua stai scrivendo la tua domanda?
L'approccio normale consiste nel verificare se il dispositivo di output è un tty e, in tal caso, verificare se quel tipo di terminale supporta i colori.
In bash
, sembrerebbe
# check if stdout is a terminal...
if test -t 1; then
# see if it supports colors...
ncolors=$(tput colors)
if test -n "$ncolors" && test $ncolors -ge 8; then
bold="$(tput bold)"
underline="$(tput smul)"
standout="$(tput smso)"
normal="$(tput sgr0)"
black="$(tput setaf 0)"
red="$(tput setaf 1)"
green="$(tput setaf 2)"
yellow="$(tput setaf 3)"
blue="$(tput setaf 4)"
magenta="$(tput setaf 5)"
cyan="$(tput setaf 6)"
white="$(tput setaf 7)"
fi
fi
echo "${red}error${normal}"
echo "${green}success${normal}"
echo "${green}0.052${normal} ${bold}${green}2,816.00 kb${normal}"
# etc.
In C, devi scrivere molto di più, ma puoi ottenere lo stesso risultato usando isatty e le funzioni elencate in man 3 terminfo
.