Ich kenne Bibliotheken in Sprachen wie Ruby und Javascript, um das Einfärben von Terminalskripten durch die Verwendung von Farbnamen wie "rot" zu vereinfachen.
Aber gibt es so etwas für Shell-Skripte in Bash oder Ksh oder was auch immer?
Ich kenne Bibliotheken in Sprachen wie Ruby und Javascript, um das Einfärben von Terminalskripten durch die Verwendung von Farbnamen wie "rot" zu vereinfachen.
Aber gibt es so etwas für Shell-Skripte in Bash oder Ksh oder was auch immer?
Antworten:
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 verwenden Sie sie dann, um in den gewünschten Farben zu drucken:
printf "%s\n" "Text in ${red}red${end}, white and ${blu}blue${end}."
Sie können tput
ODER verwendenprintf
Verwenden tput
,
erstelle einfach eine funktion wie unten und benutze 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 mit aufrufen shw_err "WARNING:: Error bla bla"
Verwenden printf
print red; echo -e "\e[31mfoo\e[m"
echo -e
ist nicht printf
und benötigt auch eine Warnung, dass es sich von der tput
Option dadurch unterscheidet, dass es sich nicht automatisch an den Anzug anpasst $TERM
.
In zsh :
autoload -U colors
colors
echo $fg[green]YES$fg[default] or $fg[red]NO$fg[default]?
print -P '%F{red}blah%f'
Für einfache, häufige Verwendungen (vollständige Textzeile nur in einer Farbe, mit nachgestelltem Zeilenumbruch) habe ich den Code von jasonwryan wie folgt geändert :
#!/bin/bash
red='\e[1;31m%s\e[0m\n'
green='\e[1;32m%s\e[0m\n'
yellow='\e[1;33m%s\e[0m\n'
blue='\e[1;34m%s\e[0m\n'
magenta='\e[1;35m%s\e[0m\n'
cyan='\e[1;36m%s\e[0m\n'
printf "$green" "This is a test in green"
printf "$red" "This is a test in red"
printf "$yellow" "This is a test in yellow"
printf "$blue" "This is a test in blue"
printf "$magenta" "This is a test in magenta"
printf "$cyan" "This is a test in cyan"
awk -v red="$(printf '\e[1;31m%%s\e[0m\\n')" -v green="$(printf '\e[1;32m%%s\e[0m\\n')" 'BEGIN { printf red, "This text is in red"; printf green, "This text is in green" }'
Besser ist die Verwendung von tput
Escape-Zeichen in Abhängigkeit von den Ausgabe- / Terminalfunktionen. (Wenn ein Terminal keine \e[*
Farbcodes interpretieren kann, ist die Ausgabe "verschmutzt", was das Lesen erschwert. Wenn Sie eine grep
solche Ausgabe durchführen, werden diese manchmal \e[*
in den Ergebnissen angezeigt.)
Siehe dieses Tutorial fürtput
.
Du kannst schreiben :
blue=$( tput setaf 4 ) ;
normal=$( tput sgr0 ) ;
echo "hello ${blue}blue world${normal}" ;
Hier ist ein Tutorial zum Drucken einer farbigen Uhr im Terminal.
Beachten Sie außerdem, dass tput
beim Umleiten von STDOUT in eine Datei möglicherweise noch Escapezeichen ausgegeben werden:
$ myColoredScript.sh > output.log ;
# Problem: output.log will contain things like "^[(B^[[m"
Um dies zu verhindern, richten Sie Ihre tput
Variablen wie in dieser Lösung vorgeschlagen ein .