Shell scriptlerinde “Friendly” terminal renk isimleri?


25

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ı?


8
lütfen bir cevabı doğru olarak işaretleyiniz ... bugüne kadar toplam 46 sorudan 1 tanesini işaretlediniz!
m13r

Yanıtlar:


39

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}."

11

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"

2
echo -edeğil printfve ayrıca farklı bir uyarı ihtiyacı tputotomatik takım uyum etmediğini de seçenek $TERM.
Toby Speight


4

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"

Veya Awk'te, biraz değiştirilmiş: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" }'
Wildcard,

3

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, tputSTDOUT'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, tputdeğişkenlerinizi bu çözümde önerildiği gibi ayarlayın .

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.