Terminal komut dosyalarınızı renklendirmeyi kolaylaştırmak için "kırmızı" renk adlarını kullanarak Ruby ve Javascript gibi dillerdeki kütüphanelerin farkındayım.
Ancak Bash, Ksh ya da her neyse kabuk komut dosyaları için böyle bir şey var mı?
Terminal komut dosyalarınızı renklendirmeyi kolaylaştırmak için "kırmızı" renk adlarını kullanarak Ruby ve Javascript gibi dillerdeki kütüphanelerin farkındayım.
Ancak Bash, Ksh ya da her neyse kabuk komut dosyaları için böyle bir şey var mı?
Yanıtlar:
Bash betiklerinde renkleri şöyle tanımlayabilirsiniz:
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'
Sonra da istediğiniz renklerde yazdırmak için bunları kullanın:
printf "%s\n" "Text in ${red}red${end}, white and ${blu}blue${end}."
tput
VEYA kullanabilirsinizprintf
kullanılması tput
,
sadece aşağıdaki gibi fonksiyon yaratın ve kullanın
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)
}
kullanarak yukarıdaki işlevi arayabilirsiniz. shw_err "WARNING:: Error bla bla"
kullanma printf
print red; echo -e "\e[31mfoo\e[m"
echo -e
değil printf
ve ayrıca farklı bir uyarı ihtiyacı tput
otomatik takım uyum etmediğini de seçenek $TERM
.
autoload -U colors
colors
echo $fg[green]YES$fg[default] or $fg[red]NO$fg[default]?
print -P '%F{red}blah%f'
Basit genel kullanımlar için (sadece tek bir renkte tam metin satırı, izleyen yeni satır ile) jasonwryan'ın kodunu aşağıdaki gibi değiştirdim :
#!/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" }'
tput
Çıktı / terminal özelliklerine bağlı olarak, kaçış karakterlerini işleyebilecek olanı kullanmak daha iyidir . Bir terminal yorumlamak yapamıyorsanız ( \e[*
renk kodları eğer, o zaman, bazen. Okumanın zor çıkışını yapar "kirlenmiş" (Ya olacak grep
, o böyle çıktı göreceksiniz \e[*
sonuçlarında)
İçin bu eğitime bakıntput
.
Yazabilirsin :
blue=$( tput setaf 4 ) ;
normal=$( tput sgr0 ) ;
echo "hello ${blue}blue world${normal}" ;
İşte terminalde renkli bir Saat basmak için bir öğretici .
Ayrıca, tput
STDOUT'u bir dosyaya yönlendirirken yine de çıkış karakteri basabileceğini unutmayın :
$ myColoredScript.sh > output.log ;
# Problem: output.log will contain things like "^[(B^[[m"
Bunun olmasını önlemek için, tput
değişkenlerinizi bu çözümde önerildiği gibi ayarlayın .