Chci vědět, jestli existuje nějaký způsob, jak zkontrolovat, zda můj program dokáže výstup terminálu pomocí barev nebo ne.
Spouštění příkazů jako less
a když se podíváte na výstup z programu, který zobrazuje pomocí barev, výstup se zobrazuje špatně, jako
[ESC[0;32m0.052ESC[0m ESC[1;32m2,816.00 kbESC[0m]
Díky
Přijatá odpověď:
Cílem je, aby moje aplikace věděla, že nemá obarvit výstup, pokud program nemůže tisknout, řekněme, protokolování výstupu z úlohy cronu do souboru, není třeba protokolovat barevný výstup, ale při ručním spuštění se rád dívám výstup barevný
V jakém jazyce píšete svou žádost?
Normálním přístupem je zkontrolovat, zda je výstupní zařízení tty, a pokud ano, zkontrolovat, zda tento typ terminálu podporuje barvy.
V bash
, to by vypadalo takto
# 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.
V C musíte udělat mnohem více psaní, ale stejného výsledku můžete dosáhnout pomocí isatty a funkcí uvedených v man 3 terminfo
.