„Benutzerfreundliche“ Terminalfarbnamen in Shell-Skripten?

„Benutzerfreundliche“ Terminalfarbnamen in Shell-Skripten?

Mir sind Bibliotheken in Sprachen wie Ruby und Javascript bekannt, die das Einfärben Ihrer Terminalskripte durch die Verwendung von Farbnamen wie „rot“ vereinfachen.

Aber gibt es so etwas für Shell-Skripte in Bash, Ksh oder was auch immer?

Antwort1

Sie können Farben in Ihren Bash-Skripten wie folgt definieren:

red=$'\e[1;31m'
grn=$'\e[1;32m'
yel=$'\e[1;33m'
blu=$'\e[1;34m'
mag=$'\e[1;35m'
cyn=$'\e[1;36m'
end=$'\e[0m'

Und drucken Sie damit anschließend in Ihren Wunschfarben:

printf "%s\n" "Text in ${red}red${end}, white and ${blu}blue${end}."

Antwort2

Sie können tput ODER verwendenprintf

Verwenden von tput,

Erstellen Sie einfach die Funktion wie unten und verwenden Sie sie

shw_grey () {
    echo $(tput bold)$(tput setaf 0) $@ $(tput sgr 0)
}

shw_norm () {
    echo $(tput bold)$(tput setaf 9) $@ $(tput sgr 0)
}

shw_info () {
    echo $(tput bold)$(tput setaf 4) $@ $(tput sgr 0)
}

shw_warn () {
    echo $(tput bold)$(tput setaf 2) $@ $(tput sgr 0)
}
shw_err ()  {
    echo $(tput bold)$(tput setaf 1) $@ $(tput sgr 0)
}

Sie können die obige Funktion aufrufen mitshw_err "WARNING:: Error bla bla"

Verwenden vonprintf

print red; echo -e "\e[31mfoo\e[m"

Antwort3

In zsh:

autoload -U colors
colors

echo $fg[green]YES$fg[default] or $fg[red]NO$fg[default]?

Antwort4

Besser ist es, „which“ zu verwenden tput, das Escape-Zeichen je nach Ausgabe-/Terminalfunktionen verarbeitet. (Wenn ein Terminal \e[*Farbcodes nicht interpretieren kann, wird es „verunreinigt“, was die Ausgabe schwerer lesbar macht. (Oder manchmal, wenn Sie eine solche Ausgabe haben, werden Sie diese in den Ergebnissen grepsehen )\e[*

Sieh dir das anTutorial fürtput.

Du kannst schreiben :

blue=$( tput setaf 4 ) ;
normal=$( tput sgr0 ) ;
echo "hello ${blue}blue world${normal}" ;

Hier ist ein Tutorialum eine farbige Uhr im Terminal auszudrucken.

Beachten Sie auch, dass tputbeim Umleiten von STDOUT in eine Datei möglicherweise immer noch Escape-Zeichen gedruckt werden:

$ myColoredScript.sh > output.log ;
# Problem: output.log will contain things like "^[(B^[[m"

Um dies zu verhindern, richten Sie Ihre tputVariablen wie indiese Lösung.

verwandte Informationen