GNU/Linux >> Linux Esercitazione >  >> Linux

Come verificare se Bash può stampare i colori?

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 .


Linux
  1. Come controllare syslog in Bash su Linux?

  2. Come posso eliminare la porta TCP 16969 in Bash?

  3. Come verificare se un file è vuoto in Bash?

  4. Come posso testare il mio script Bash su versioni precedenti di Bash?

  5. Come verificare se ssh-agent è già in esecuzione in bash?

Come verificare se esiste un file o una directory in Bash

Bash printf - Come stampare una variabile in Bash

Come verificare se un file o una directory esiste in Bash

Come verificare se una stringa contiene una sottostringa in Bash

Come verificare se esiste un file o una directory in Bash Shell

Come posso controllare la sintassi di uno script Bash senza eseguirlo?