GNU/Linux >> Znalost Linux >  >> Linux

Jak zkontrolovat, zda Bash může tisknout barvy?

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 .


Linux
  1. Jak zkontrolovat podřetězec v Shell Script Bash?

  2. Jak zkontrolovat syslog v Bash na Linuxu?

  3. Jak mohu zabít TCP port 16969 v Bash?

  1. Jak zkontrolovat, zda je soubor prázdný v Bash?

  2. Jak zkontrolovat, zda ssh-agent již běží v bash?

  3. Jak mohu zkontrolovat doslovné znaky řetězce příkazu bash?

  1. Jak zkontrolovat, zda má Bash zranitelnost Shellshock?

  2. Jak mohu zkontrolovat, zda adresář existuje?

  3. Jak mohu použít sudo ke kontrole, zda soubor existuje?