it-swarm-tr.com

Linux'ta yankı çıktı rengini değiştirme

Echo komutunu kullanarak terminalde bir metin basmaya çalışıyorum.

Metni kırmızı renkte yazdırmak istiyorum. Bunu nasıl yapabilirim?

1399
satheesh.droid

Bunları kullanabilirsiniz ANSI çıkış kodları :

Black        0;30     Dark Gray     1;30
Red          0;31     Light Red     1;31
Green        0;32     Light Green   1;32
Brown/Orange 0;33     Yellow        1;33
Blue         0;34     Light Blue    1;34
Purple       0;35     Light Purple  1;35
Cyan         0;36     Light Cyan    1;36
Light Gray   0;37     White         1;37

Ve sonra bunları komut dosyasında şöyle kullanın:

#    .---------- constant part!
#    vvvv vvvv-- the code from above
RED='\033[0;31m'
NC='\033[0m' # No Color
printf "I ${RED}love${NC} Stack Overflow\n"

hangi love kırmızı basar.

@ James-lim adlı kullanıcının yorumundan,echo komutunu kullanıyorsanız, ters eğik çizginin kaçmasına izin vermek için -e bayrağını kullandığınızdan emin olun .

# Continued from above example
echo -e "I ${RED}love${NC} Stack Overflow"

(ek boş satır eklemek istemediğiniz sürece echo kullanırken "\n" eklemeyin)

1885
Tobias

Her tür şey için terminal kontrol kodları üretmek için awesome tput komutunu ( Ignacio'nin cevabı içinde önerilen) kullanabilirsiniz.


Kullanım

Özel tput alt komutları daha sonra tartışılır.

Direkt

Komut dizisinin bir parçası olarak tput arayın:

tput setaf 1; echo "this is red text"

; yerine && kullanın, böylece tput hataları olursa metin yine de gösterilir.

Kabuk değişkenleri

Başka bir seçenek de Shell değişkenlerini kullanmaktır:

red=`tput setaf 1`
green=`tput setaf 2`
reset=`tput sgr0`
echo "${red}red text ${green}green text${reset}"

tput, terminal tarafından özel bir anlama sahip olarak yorumlanan karakter dizilerini üretir. Kendileri gösterilmeyeceklerdir. Bunların hala dosyalara kaydedilebileceğini veya terminal dışındaki programlar tarafından girdi olarak işlenebileceğini unutmayın.

Komut değiştirme

command substitation komutunu kullanarak tput çıkışını doğrudan echo dizelerinize eklemek daha uygun olabilir.

echo "$(tput setaf 1)Red text $(tput setab 7)and white background$(tput sgr 0)"

Örnek

Yukarıdaki komut bunu Ubuntu'da üretir:

Screenshot of colour terminal text


Ön plan ve arka plan rengi komutları

tput setab [1-7] # Set the background colour using ANSI escape
tput setaf [1-7] # Set the foreground colour using ANSI escape

Renkler aşağıdaki gibidir:

Num  Colour    #define         R G B

0    black     COLOR_BLACK     0,0,0
1    red       COLOR_RED       1,0,0
2    green     COLOR_GREEN     0,1,0
3    yellow    COLOR_YELLOW    1,1,0
4    blue      COLOR_BLUE      0,0,1
5    Magenta   COLOR_Magenta   1,0,1
6    cyan      COLOR_CYAN      0,1,1
7    white     COLOR_WHITE     1,1,1

Ayrıca burada verilmemiştir, farklı numaralar kullanan renk ayarlama işlevlerinin (setb yerine setab ve setf yerine setaf) ANSI olmayan sürümleri de vardır.

Metin modu komutları

tput bold    # Select bold mode
tput dim     # Select dim (half-bright) mode
tput smul    # Enable underline mode
tput rmul    # Disable underline mode
tput rev     # Turn on reverse video mode
tput smso    # Enter standout (bold) mode
tput rmso    # Exit standout mode

İmleç hareketi komutları

tput cup Y X # Move cursor to screen postion X,Y (top left is 0,0)
tput cuf N   # Move N characters forward (right)
tput cub N   # Move N characters back (left)
tput cuu N   # Move N lines up
tput ll      # Move to last line, first column (if no cup)
tput sc      # Save the cursor position
tput rc      # Restore the cursor position
tput lines   # Output the number of lines of the terminal
tput cols    # Output the number of columns of the terminal

Temizle ve komutları ekle

tput ech N   # Erase N characters
tput clear   # Clear screen and move the cursor to 0,0
tput el 1    # Clear to beginning of line
tput el      # Clear to end of line
tput ed      # Clear to end of screen
tput ich N   # Insert N characters (moves rest of line forward!)
tput il N    # Insert N lines

Diğer komutlar

tput sgr0    # Reset text format to the terminal's default
tput bel     # Play a bell

compiz wobbly windows ile, bel komutu, kullanıcının dikkatini çekmek için terminalin bir saniye boyunca yalpalamasını sağlar.


Senaryo

tput, satır başına bir komut içeren ve tput çıkmadan önce yürütülen komut dosyalarını kabul eder.

Çok satırlı bir dizgiyi yankılayarak ve bunları borulayarak geçici dosyalardan kaçının:

echo -e "setf 7\nsetb 1" | tput -S  # set fg white and bg red

Ayrıca bakınız

  • Bkz. man 1 tput
  • Komutların tam listesi ve bu seçeneklerle ilgili daha fazla bilgi için, bkz. man 5 terminfo . (Karşılık gelen tput komutu, 81. satırdan başlayan devasa tablonun Cap-name sütununda listelenmiştir.)
810
Drew Noakes

kullanabileceğiniz bazı değişkenler:

# Reset
Color_Off='\033[0m'       # Text Reset

# Regular Colors
Black='\033[0;30m'        # Black
Red='\033[0;31m'          # Red
Green='\033[0;32m'        # Green
Yellow='\033[0;33m'       # Yellow
Blue='\033[0;34m'         # Blue
Purple='\033[0;35m'       # Purple
Cyan='\033[0;36m'         # Cyan
White='\033[0;37m'        # White

# Bold
BBlack='\033[1;30m'       # Black
BRed='\033[1;31m'         # Red
BGreen='\033[1;32m'       # Green
BYellow='\033[1;33m'      # Yellow
BBlue='\033[1;34m'        # Blue
BPurple='\033[1;35m'      # Purple
BCyan='\033[1;36m'        # Cyan
BWhite='\033[1;37m'       # White

# Underline
UBlack='\033[4;30m'       # Black
URed='\033[4;31m'         # Red
UGreen='\033[4;32m'       # Green
UYellow='\033[4;33m'      # Yellow
UBlue='\033[4;34m'        # Blue
UPurple='\033[4;35m'      # Purple
UCyan='\033[4;36m'        # Cyan
UWhite='\033[4;37m'       # White

# Background
On_Black='\033[40m'       # Black
On_Red='\033[41m'         # Red
On_Green='\033[42m'       # Green
On_Yellow='\033[43m'      # Yellow
On_Blue='\033[44m'        # Blue
On_Purple='\033[45m'      # Purple
On_Cyan='\033[46m'        # Cyan
On_White='\033[47m'       # White

# High Intensity
IBlack='\033[0;90m'       # Black
IRed='\033[0;91m'         # Red
IGreen='\033[0;92m'       # Green
IYellow='\033[0;93m'      # Yellow
IBlue='\033[0;94m'        # Blue
IPurple='\033[0;95m'      # Purple
ICyan='\033[0;96m'        # Cyan
IWhite='\033[0;97m'       # White

# Bold High Intensity
BIBlack='\033[1;90m'      # Black
BIRed='\033[1;91m'        # Red
BIGreen='\033[1;92m'      # Green
BIYellow='\033[1;93m'     # Yellow
BIBlue='\033[1;94m'       # Blue
BIPurple='\033[1;95m'     # Purple
BICyan='\033[1;96m'       # Cyan
BIWhite='\033[1;97m'      # White

# High Intensity backgrounds
On_IBlack='\033[0;100m'   # Black
On_IRed='\033[0;101m'     # Red
On_IGreen='\033[0;102m'   # Green
On_IYellow='\033[0;103m'  # Yellow
On_IBlue='\033[0;104m'    # Blue
On_IPurple='\033[0;105m'  # Purple
On_ICyan='\033[0;106m'    # Cyan
On_IWhite='\033[0;107m'   # White

sırasıyla bash, hex ve octal içindeki kaçış karakteri:

|       | bash  | hex    | octal   | NOTE                         |
|-------+-------+--------+---------+------------------------------|
| start | \e    | \x1b   | \033    |                              |
| start | \E    | \x1B   | -       | x cannot be capital          |
| end   | \e[0m | \x1m0m | \033[0m |                              |
| end   | \e[m  | \x1b[m | \033[m  | 0 is appended if you omit it |
|       |       |        |         |                              |

kısa örnek:

| color       | bash         | hex            | octal          | NOTE                                  |
|-------------+--------------+----------------+----------------+---------------------------------------|
| start green | \e[32m<text> | \x1b[32m<text> | \033[32m<text> | m is NOT optional                     |
| reset       | <text>\e[0m  | <text>\1xb[0m  | <text>\033[om  | o is optional (do it as best practice |
|             |              |                |                |                                       |

bash istisnası:

Bu kodları özel bash değişkenleriinizde kullanacaksanız

  • PS0
  • PS1
  • PS2 (= bu sormak içindir)
  • PS4

bash onları doğru yorumlayabilmeniz için fazladan kaçış karakterleri eklemelisiniz. Bu, fazladan kaçış karakterleri eklemeden işe yarar ancak geçmişinizde arama yapmak için Ctrl + r kullandığınızda sorunlarla karşılaşırsınız.

bash için kural dışı durum kuralı

Herhangi bir ANSI kodunu başlatmadan önce \[ eklemeli ve sonlananlardan sonra \] eklemelisiniz.
Örnek:
düzenli kullanımda: \033[32mThis is in green\033[0m
PS0/1/2/4 için: \[\033[32m\]This is in green\[\033[m\]

\[, yazdırılamaz karakter dizisinin başlangıcı içindir
\], yazdırılamaz karakter dizisinin sonu içindir

İpucu: ezberlemek için önce \[\] ekleyebilir, sonra ANSI kodunuzu aralarına koyabilirsiniz:
- \[start-ANSI-code\]
- \[end-ANSI-code\]

renk dizisinin türü:

  1. 3/4 bit
  2. 8 bit
  3. 24 bit

Bu renklere dalmadan önce, bu kodlarla birlikte 4 modu bilmelisiniz:

1. renk modu

Renk değil, metnin stilini değiştirir. Örneğin, rengi parlak veya daha koyu yapın.

  • 0 sıfırlama
  • 1; normalden daha hafif
  • 2; normalden daha koyu

Bu mod yaygın olarak desteklenmiyor. Gnome-Terminalinde tamamen desteklenir.

2. metin modu

Bu mod, renkli DEĞİL metin tarzını değiştirmek içindir.

  • 3; italik
  • 4; altı çizili
  • 5; yanıp sönüyor (yavaş)
  • 6; yanıp sönüyor (hızlı)
  • 7; ters
  • 8; gizle
  • 9; geçişi

ve neredeyse desteklenmektedir.
Örneğin, KDE-Konsole 5;'u destekliyor ancak Gnome-Terminal desteklemiyor ve Gnome 8;'u destekliyor ancak KDE desteklemiyor.

3. ön plan modu

Bu mod ön planı renklendirmek içindir.

4. arka plan modu

Bu mod arka planı renklendirmek içindir.

Aşağıdaki tabloda, ANSI renginin 3/4 bit sürümünün bir özeti gösterilmektedir.

|------------+----------+---------+-------+------------------+------------------------------+--------------------------------------|
| color-mode | octal    | hex     | bash  | description      | example (= in octal)         | NOTE                                 |
|------------+----------+---------+-------+------------------+------------------------------+--------------------------------------|
|          0 | \033[0m  | \x1b[0m | \e[0m | reset any affect | echo -e "\033[0m"            | 0m equals to m                       |
|          1 | \033[1m  |         |       | light (= bright) | echo -e "\033[1m####\033[m"  | -                                    |
|          2 | \033[2m  |         |       | dark (= fade)    | echo -e "\033[2m####\033[m"  | -                                    |
|------------+----------+---------+-------+------------------+------------------------------+--------------------------------------|
|  text-mode | ~        |         |       | ~                | ~                            | ~                                    |
|------------+----------+---------+-------+------------------+------------------------------+--------------------------------------|
|          3 | \033[3m  |         |       | italic           | echo -e "\033[3m####\033[m"  |                                      |
|          4 | \033[4m  |         |       | underline        | echo -e "\033[4m####\033[m"  |                                      |
|          5 | \033[5m  |         |       | blink (slow)     | echo -e "\033[3m####\033[m"  |                                      |
|          6 | \033[6m  |         |       | blink (fast)     | ?                            | not wildly support                   |
|          7 | \003[7m  |         |       | reverse          | echo -e "\033[7m####\033[m"  | it affects the background/foreground |
|          8 | \033[8m  |         |       | hide             | echo -e "\033[8m####\033[m"  | it affects the background/foreground |
|          9 | \033[9m  |         |       | cross            | echo -e "\033[9m####\033[m"  |                                      |
|------------+----------+---------+-------+------------------+------------------------------+--------------------------------------|
| foreground | ~        |         |       | ~                | ~                            | ~                                    |
|------------+----------+---------+-------+------------------+------------------------------+--------------------------------------|
|         30 | \033[30m |         |       | black            | echo -e "\033[30m####\033[m" |                                      |
|         31 | \033[31m |         |       | red              | echo -e "\033[31m####\033[m" |                                      |
|         32 | \033[32m |         |       | green            | echo -e "\033[32m####\033[m" |                                      |
|         33 | \033[32m |         |       | yellow           | echo -e "\033[33m####\033[m" |                                      |
|         34 | \033[32m |         |       | blue             | echo -e "\033[34m####\033[m" |                                      |
|         35 | \033[32m |         |       | purple           | echo -e "\033[35m####\033[m" | real name: Magenta = reddish-purple  |
|         36 | \033[32m |         |       | cyan             | echo -e "\033[36m####\033[m" |                                      |
|         37 | \033[32m |         |       | white            | echo -e "\033[37m####\033[m" |                                      |
|------------+----------+---------+-------+------------------+------------------------------+--------------------------------------|
|         38 | 8/24     |                    This is for special use of 8-bit or 24-bit                                            |
|------------+----------+---------+-------+------------------+------------------------------+--------------------------------------|
| background | ~        |         |       | ~                | ~                            | ~                                    |
|------------+----------+---------+-------+------------------+------------------------------+--------------------------------------|
|         40 | \033[40m |         |       | black            | echo -e "\033[40m####\033[m" |                                      |
|         41 | \033[41m |         |       | red              | echo -e "\033[41m####\033[m" |                                      |
|         42 | \033[42m |         |       | green            | echo -e "\033[42m####\033[m" |                                      |
|         43 | \033[43m |         |       | yellow           | echo -e "\033[43m####\033[m" |                                      |
|         44 | \033[44m |         |       | blue             | echo -e "\033[44m####\033[m" |                                      |
|         45 | \033[45m |         |       | purple           | echo -e "\033[45m####\033[m" | real name: Magenta = reddish-purple  |
|         46 | \033[46m |         |       | cyan             | echo -e "\033[46m####\033[m" |                                      |
|         47 | \033[47m |         |       | white            | echo -e "\033[47m####\033[m" |                                      |
|------------+----------+---------+-------+------------------+------------------------------+--------------------------------------|
|         48 | 8/24     |                    This is for special use of 8-bit or 24-bit                                            |                                                                                       |
|------------+----------+---------+-------+------------------+------------------------------+--------------------------------------|

Aşağıdaki tabloda, ANSI renginin 8 bit sürümünün bir özeti gösterilmektedir.

|------------+-----------+-----------+---------+------------------+------------------------------------+-------------------------|
| foreground | octal     | hex       | bash    | description      | example                            | NOTE                    |
|------------+-----------+-----------+---------+------------------+------------------------------------+-------------------------|
|        0-7 | \033[38;5 | \x1b[38;5 | \e[38;5 | standard. normal | echo -e '\033[38;5;1m####\033[m'   |                         |
|       8-15 |           |           |         | standard. light  | echo -e '\033[38;5;9m####\033[m'   |                         |
|     16-231 |           |           |         | more resolution  | echo -e '\033[38;5;45m####\033[m'  | has no specific pattern |
|    232-255 |           |           |         |                  | echo -e '\033[38;5;242m####\033[m' | from black to white     |
|------------+-----------+-----------+---------+------------------+------------------------------------+-------------------------|
| foreground | octal     | hex       | bash    | description      | example                            | NOTE                    |
|------------+-----------+-----------+---------+------------------+------------------------------------+-------------------------|
|        0-7 |           |           |         | standard. normal | echo -e '\033[48;5;1m####\033[m'   |                         |
|       8-15 |           |           |         | standard. light  | echo -e '\033[48;5;9m####\033[m'   |                         |
|     16-231 |           |           |         | more resolution  | echo -e '\033[48;5;45m####\033[m'  |                         |
|    232-255 |           |           |         |                  | echo -e '\033[48;5;242m####\033[m' | from black to white     |
|------------+-----------+-----------+---------+------------------+------------------------------------+-------------------------|

8 bit hızlı test:
for code in {0..255}; do echo -e "\e[38;05;${code}m $code: Test"; done

Aşağıdaki tabloda, ANSI renginin 24 bit sürümünün bir özeti gösterilmektedir.

|------------+-----------+-----------+---------+-------------+------------------------------------------+-----------------|
| foreground | octal     | hex       | bash    | description | example                                  | NOTE            |
|------------+-----------+-----------+---------+-------------+------------------------------------------+-----------------|
|      0-255 | \033[38;2 | \x1b[38;2 | \e[38;2 | R = red     | echo -e '\033[38;2;255;0;02m####\033[m'  | R=255, G=0, B=0 |
|      0-255 | \033[38;2 | \x1b[38;2 | \e[38;2 | G = green   | echo -e '\033[38;2;;0;255;02m####\033[m' | R=0, G=255, B=0 |
|      0-255 | \033[38;2 | \x1b[38;2 | \e[38;2 | B = blue    | echo -e '\033[38;2;0;0;2552m####\033[m'  | R=0, G=0, B=255 |
|------------+-----------+-----------+---------+-------------+------------------------------------------+-----------------|
| background | octal     | hex       | bash    | description | example                                  | NOTE            |
|------------+-----------+-----------+---------+-------------+------------------------------------------+-----------------|
|      0-255 | \033[48;2 | \x1b[48;2 | \e[48;2 | R = red     | echo -e '\033[48;2;255;0;02m####\033[m'  | R=255, G=0, B=0 |
|      0-255 | \033[48;2 | \x1b[48;2 | \e[48;2 | G = green   | echo -e '\033[48;2;;0;255;02m####\033[m' | R=0, G=255, B=0 |
|      0-255 | \033[48;2 | \x1b[48;2 | \e[48;2 | B = blue    | echo -e '\033[48;2;0;0;2552m####\033[m'  | R=0, G=0, B=255 |
|------------+-----------+-----------+---------+-------------+------------------------------------------+-----------------|

bazı ekran görüntüleri

.gif içinde ön plan 8 bitlik özet

foreground.gif

.gif içindeki arka plan 8 bit özet

background.gif

değerleri ile renk özeti

enter image description here enter image description here enter image description here enter image description here

KDE-Terminalinde blinkingname__

KDE-blinking

size daha fazlasını gösteren basit bir Ckodu

cecho_screenshot

bu renklerle başa çıkmak için geliştirdiğim daha gelişmiş bir araç:
bline


renk modu çekimi

fade-normal-bright

metin modu çekimi

only-text-mode

birleştirme tamam

combine

daha fazla çekim


İleri Düzey Kullanıcılar ve Programcılar İçin İpuçları ve Püf Noktaları:

Bu kodları bir programlama dilinde kullanabilir miyiz?

Evet yapabilirsin. bash , c , c ++ , dPerl , python

Bir programın hızını yavaşlatıyor mu?

Bence hayır.

Bunları Windows'ta kullanabilir miyiz?

3/4-bit Evet, eğer kodu gccile derlerseniz
Win-7’de bazı ekran görüntüleri

Kodun uzunluğu nasıl hesaplanır?

\033[2, diğer parçalar 1

Bu kodları nerede kullanabiliriz?

ttyyorumlayıcısına sahip herhangi bir yer
xtermname__, gnome-terminal, kde-terminal, mysql-client-CLI ve benzeri.
Örneğin çıktılarınızı mysql ile renklendirmek istiyorsanız Perlöğesini kullanabilirsiniz.

#!/usr/bin/Perl -n
print "\033[1m\033[31m$1\033[36m$2\033[32m$3\033[33m$4\033[m" while /([|+-]+)|([0-9]+)|([a-zA-Z_]+)|([^\w])/g;

bu kodu bir dosya adında saklayın: pcc(= Perl Colorize Character) ve sonra dosyayı geçerli bir PATHiçine yerleştirin ve istediğiniz yerde kullanın.

ls | pcc
df | pcc

mysqliçinde önce pageriçin kaydedin ve sonra deneyin:

[user2:db2] pager pcc
PAGER set to 'pcc'
[user2:db2] select * from table-name;

pcc

_ = _ Değil _ Unicode işliyor.

Bu kodlar sadece renklendirme mi yapıyor?

Hayır, birçok ilginç şey yapabilirler. Deneyin:

echo -e '\033[2K'  # clear the screen and do not move the position

veya:

echo -e '\033[2J\033[u' # clear the screen and reset the position

Ekranı system( "clear" ) ile silmek isteyen yeni başlayanlar var, böylece system(3) call yerine bunu kullanabilirsiniz.

Unicode'da mevcut mu?

Evet. \u001b

Bu renklerin hangi versiyonu tercih edilir?

3/4-bit kullanımı kolaydır, ancak 24-bit kullanımı çok doğru ve güzeldir.
html ile deneyiminiz yoksa, işte size hızlı bir öğretici:
24 bit: 00000000 ve 00000000 ve 00000000 anlamına gelir. Her 8 bit belirli bir renk içindir.
24..17 içindir  ve 16..9 için  ve 8..1 için 
Yani içinde html#FF0000 anlamına gelir  ve burada: 255;0;0
in html#00FF00 anlamı  hangisi burada: 0;255;0
Bu mantıklı mı? istediğiniz rengi bu üç 8 bitlik değerle birleştirin.


referans:
Wikipedia
ANSI çıkış dizileri
tldp.org
tldp.org
misc.flogisoft.com
hatırlamadığım bazı bloglar/web sayfaları

593
Shakiba Moshiri

tput özelliğini ve 1 parametresini kullanarak setaf öğesini kullanın.

echo "$(tput setaf 1)Hello, world$(tput sgr0)"
173
echo -e "\033[31m Hello World"

[31m metin rengini kontrol eder:

  • 30-37 setleri ön plan renk
  • 40-47 setleri arkaplan renk

Renk kodlarının daha eksiksiz bir listesi burada bulabilirsiniz .

Metin rengini, dizgenin sonunda \033[0m konumuna geri döndürmek iyi bir uygulamadır.

109
Neo

Bu color anahtarıdır \033[. Bkz tarih .

Renk kodları 1;32 (Açık Yeşil), 0;34 (Mavi), 1;34 (Açık Mavi) vb.

Renk dizilerini \033[ ve 0m renk anahtarlarıyla, no- renk koduyla sonlandırırız. Tıpkı bir işaretleme dilinde sekmeleri açma ve kapatma gibi.

  SWITCH="\033["
  NORMAL="${SWITCH}0m"
  YELLOW="${SWITCH}1;33m"
  echo "${YELLOW}hello, yellow${NORMAL}"

Basit renk echoişlev çözümü:

cecho() {
  local code="\033["
  case "$1" in
    black  | bk) color="${code}0;30m";;
    red    |  r) color="${code}1;31m";;
    green  |  g) color="${code}1;32m";;
    yellow |  y) color="${code}1;33m";;
    blue   |  b) color="${code}1;34m";;
    purple |  p) color="${code}1;35m";;
    cyan   |  c) color="${code}1;36m";;
    gray   | gr) color="${code}0;37m";;
    *) local text="$1"
  esac
  [ -z "$text" ] && local text="$color$2${code}0m"
  echo "$text"
}

cecho "Normal"
cecho y "Yellow!"
31
Jorge Bucaran

Yalnızca bir echo için renk değiştirmenin düzgün bir yolu, böyle bir işlevi tanımlamaktır:

function coloredEcho(){
    local exp=$1;
    local color=$2;
    if ! [[ $color =~ '^[0-9]$' ]] ; then
       case $(echo $color | tr '[:upper:]' '[:lower:]') in
        black) color=0 ;;
        red) color=1 ;;
        green) color=2 ;;
        yellow) color=3 ;;
        blue) color=4 ;;
        Magenta) color=5 ;;
        cyan) color=6 ;;
        white|*) color=7 ;; # white or invalid color
       esac
    fi
    tput setaf $color;
    echo $exp;
    tput sgr0;
}

Kullanımı:

coloredEcho "This text is green" green

Veya Drew’un cevabı :’de belirtilen renk kodlarını doğrudan kullanabilirsiniz.

coloredEcho "This text is green" 2
27
Alireza Mirian

Renk kodlarını hesaplamak için tput kullanın. Daha az taşınabilir olduğundan, ANSI çıkış kodunu kullanmaktan kaçının (örneğin kırmızı için \E[31;1m). Örneğin OS X'te Bash bunu desteklemiyor.

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`

BOLD=`tput bold`
RESET=`tput sgr0`

echo -e "hello ${RED}some red text${RESET} world"
20
Wilfred Hughes

Bu soru tekrar tekrar cevaplandı :-) ama neden olmasın.

İlk olarak tput kullanmak, modern ortamlarda ASCII kodlarını echo -E yoluyla elle enjekte etmekten daha taşınabilirdir.

İşte hızlı bir bash işlevi:

 say() {
     echo "[email protected]" | sed \
             -e "s/\(\(@\(red\|green\|yellow\|blue\|Magenta\|cyan\|white\|reset\|b\|u\)\)\+\)[[]\{2\}\(.*\)[]]\{2\}/\1\[email protected]/g" \
             -e "s/@red/$(tput setaf 1)/g" \
             -e "s/@green/$(tput setaf 2)/g" \
             -e "s/@yellow/$(tput setaf 3)/g" \
             -e "s/@blue/$(tput setaf 4)/g" \
             -e "s/@Magenta/$(tput setaf 5)/g" \
             -e "s/@cyan/$(tput setaf 6)/g" \
             -e "s/@white/$(tput setaf 7)/g" \
             -e "s/@reset/$(tput sgr0)/g" \
             -e "s/@b/$(tput bold)/g" \
             -e "s/@u/$(tput sgr 0 1)/g"
  }

Şimdi kullanabilirsiniz:

 say @[email protected][[Success]] 

almak:

 Bold-Green Success

tput'in taşınabilirliğine ilişkin notlar

İlk kez tput(1) kaynak kodu Eylül 1986'da yüklendi

tput(1), 1990'larda X/Open curses semantiğinde mevcuttu (1997 standardı aşağıda belirtilen semantiklere sahip).

Yani, ( quite ) her yerde var.

18
Ahmed Masud

Tüm çözümlerde iyi sonuçları yakaladım ve sonuçta:

cecho(){
    RED="\033[0;31m"
    GREEN='\033[0;32m'
    YELLOW='\033[1;33m'
    # ... ADD MORE COLORS
    NC='\033[0m' # No Color

    printf "${!1}${2} ${NC}\n"
}

Ve sadece şöyle diyebilirsin:

cecho "RED" "Helloworld"
15
Andrew Naguib

@ k-five bu cevap için

declare -A colors
#curl www.bunlongheng.com/code/colors.png

# Reset
colors[Color_Off]='\033[0m'       # Text Reset

# Regular Colors
colors[Black]='\033[0;30m'        # Black
colors[Red]='\033[0;31m'          # Red
colors[Green]='\033[0;32m'        # Green
colors[Yellow]='\033[0;33m'       # Yellow
colors[Blue]='\033[0;34m'         # Blue
colors[Purple]='\033[0;35m'       # Purple
colors[Cyan]='\033[0;36m'         # Cyan
colors[White]='\033[0;37m'        # White

# Bold
colors[BBlack]='\033[1;30m'       # Black
colors[BRed]='\033[1;31m'         # Red
colors[BGreen]='\033[1;32m'       # Green
colors[BYellow]='\033[1;33m'      # Yellow
colors[BBlue]='\033[1;34m'        # Blue
colors[BPurple]='\033[1;35m'      # Purple
colors[BCyan]='\033[1;36m'        # Cyan
colors[BWhite]='\033[1;37m'       # White

# Underline
colors[UBlack]='\033[4;30m'       # Black
colors[URed]='\033[4;31m'         # Red
colors[UGreen]='\033[4;32m'       # Green
colors[UYellow]='\033[4;33m'      # Yellow
colors[UBlue]='\033[4;34m'        # Blue
colors[UPurple]='\033[4;35m'      # Purple
colors[UCyan]='\033[4;36m'        # Cyan
colors[UWhite]='\033[4;37m'       # White

# Background
colors[On_Black]='\033[40m'       # Black
colors[On_Red]='\033[41m'         # Red
colors[On_Green]='\033[42m'       # Green
colors[On_Yellow]='\033[43m'      # Yellow
colors[On_Blue]='\033[44m'        # Blue
colors[On_Purple]='\033[45m'      # Purple
colors[On_Cyan]='\033[46m'        # Cyan
colors[On_White]='\033[47m'       # White

# High Intensity
colors[IBlack]='\033[0;90m'       # Black
colors[IRed]='\033[0;91m'         # Red
colors[IGreen]='\033[0;92m'       # Green
colors[IYellow]='\033[0;93m'      # Yellow
colors[IBlue]='\033[0;94m'        # Blue
colors[IPurple]='\033[0;95m'      # Purple
colors[ICyan]='\033[0;96m'        # Cyan
colors[IWhite]='\033[0;97m'       # White

# Bold High Intensity
colors[BIBlack]='\033[1;90m'      # Black
colors[BIRed]='\033[1;91m'        # Red
colors[BIGreen]='\033[1;92m'      # Green
colors[BIYellow]='\033[1;93m'     # Yellow
colors[BIBlue]='\033[1;94m'       # Blue
colors[BIPurple]='\033[1;95m'     # Purple
colors[BICyan]='\033[1;96m'       # Cyan
colors[BIWhite]='\033[1;97m'      # White

# High Intensity backgrounds
colors[On_IBlack]='\033[0;100m'   # Black
colors[On_IRed]='\033[0;101m'     # Red
colors[On_IGreen]='\033[0;102m'   # Green
colors[On_IYellow]='\033[0;103m'  # Yellow
colors[On_IBlue]='\033[0;104m'    # Blue
colors[On_IPurple]='\033[0;105m'  # Purple
colors[On_ICyan]='\033[0;106m'    # Cyan
colors[On_IWhite]='\033[0;107m'   # White


color=${colors[$input_color]}
white=${colors[White]}
# echo $white



for i in "${!colors[@]}"
do
  echo -e "$i = ${colors[$i]}I love you$white"
done

Sonuç

 enter image description here

Umarım bu resim renginizi seçmenize yardım eder: D

13
kyo

Bu kodlar Ubuntu kutumda çalışıyor:

enter image description here

echo -e "\x1B[31m foobar \x1B[0m"
echo -e "\x1B[32m foobar \x1B[0m"
echo -e "\x1B[96m foobar \x1B[0m"
echo -e "\x1B[01;96m foobar \x1B[0m"
echo -e "\x1B[01;95m foobar \x1B[0m"
echo -e "\x1B[01;94m foobar \x1B[0m"
echo -e "\x1B[01;93m foobar \x1B[0m"
echo -e "\x1B[01;91m foobar \x1B[0m"
echo -e "\x1B[01;90m foobar \x1B[0m"
echo -e "\x1B[01;89m foobar \x1B[0m"
echo -e "\x1B[01;36m foobar \x1B[0m"

Bu, harfleri farklı renklerde yazdırır:

echo -e "\x1B[0;93m a \x1B[0m b \x1B[0;92m c \x1B[0;93m d \x1B[0;94m"

Döngü için:

for (( i = 0; i < 17; i++ )); 
do echo "$(tput setaf $i)This is ($i) $(tput sgr0)"; 
done

enter image description here

11
Eric Leschinski

Okunabilirlik için

Kodun okunabilirliğini / iyileştirmek istiyorsanız, önce dizeyi echo__ yapabilirsiniz, ardından sed öğesini kullanarak rengi daha sonra ekleyebilirsiniz:

echo 'Hello World!' | sed $'s/World/\e[1m&\e[0m/' 
10
Ooker

Şimdiye kadar en sevdiğim cevap renkli.

Başka bir seçenek göndermek için, bu küçük araç xcol dosyasını kontrol edebilirsiniz.

https://ownyourbits.com/2017/01/23/colorize-your-stdout-with-xcol/

tıpkı grep gibi kullanırsınız ve örneğin her argüman için stdinini farklı bir renkle renklendirir, örneğin

Sudo netstat -putan | xcol httpd sshd dnsmasq pulseaudio conky tor Telegram firefox "[[:digit:]]+\.[[:digit:]]+\.[[:digit:]]+\.[[:digit:]]+" ":[[:digit:]]+" "tcp." "udp." LISTEN ESTABLISHED TIME_WAIT

 xcol example

Sed'in kabul edeceği herhangi bir normal ifadeyi kabul ettiğini unutmayın.

Bu araç aşağıdaki tanımları kullanır

#normal=$(tput sgr0)                      # normal text
normal=$'\e[0m'                           # (works better sometimes)
bold=$(tput bold)                         # make colors bold/bright
red="$bold$(tput setaf 1)"                # bright red text
green=$(tput setaf 2)                     # dim green text
fawn=$(tput setaf 3); beige="$fawn"       # dark yellow text
yellow="$bold$fawn"                       # bright yellow text
darkblue=$(tput setaf 4)                  # dim blue text
blue="$bold$darkblue"                     # bright blue text
purple=$(tput setaf 5); Magenta="$purple" # Magenta text
pink="$bold$purple"                       # bright Magenta text
darkcyan=$(tput setaf 6)                  # dim cyan text
cyan="$bold$darkcyan"                     # bright cyan text
gray=$(tput setaf 7)                      # dim white text
darkgray="$bold"$(tput setaf 0)           # bold black = dark gray text
white="$bold$gray"                        # bright white text

Bu değişkenleri komut dosyalarımda böyle kullanırım

echo "${red}hello ${yellow}this is ${green}coloured${normal}"
8
nachoparker

'a genişletmek için bu cevabı , bizim tembelliğimiz için:

function echocolor() { # $1 = string
    COLOR='\033[1;33m'
    NC='\033[0m'
    printf "${COLOR}$1${NC}\n"
}

echo "This won't be colored"
echocolor "This will be colorful"
6
Mahn

Hiç kimse ANSI kodunun 7 ters video 'nin kullanışlılığını farketmedi.

Ön plan ve arka plan renklerini değiştirerek tüm terminal şemaları renklerinde, siyah veya beyaz arka planlarda veya diğer fantezi paletlerinde okunabilir durumda kalır.

Örnek, her yerde çalışan kırmızı bir arka plan için:

echo -e "\033[31;7mHello world\e[0m";

Terminal yerleşik şemalarını değiştirirken bu şekilde görünür:

 enter image description here

Bu, gif için kullanılan döngü betiğidir.

for i in {30..49};do echo -e "\033[$i;7mReversed color code $i\e[0m Hello world!";done

Bkz. https://en.wikipedia.org/wiki/ANSI_escape_code#SGR_(Select_Graphic_Rendition)_parameters

5
Cryptopat

Ham ANSI kontrol dizileri üzerinde kesinlikle tput kullanmalısınız.

Çok sayıda farklı terminal kontrol dili bulunduğundan, genellikle bir sistem bir ara iletişim katmanına sahiptir. Gerçek kodlar, halihazırda algılanan terminal tipi için bir veritabanında aranır ve bir API'ye veya (Kabuktan) bir komuta standart talepler verirsiniz.

Bu komutlardan biri tput'dır. tput, yetenek adı ve herhangi bir parametre olarak adlandırılan bir kısaltmalar kümesini kabul eder, ardından terminfo veritabanında tespit edilen terminal için doğru kaçış dizilerini arar ve doğru kodları yazdırır (terminal umarım anlar).

http://wiki.bash-hackers.org/scripting/terminalcodes adresinden

Bununla birlikte, bash-tint adında küçük bir yardımcı kitaplığı yazdım, bu da tputun üzerine başka bir katman ekleyerek kullanımı daha da basitleştirdi (imho):

Örnek: tint "white(Cyan(T)Magenta(I)Yellow(N)Black(T)) is bold(really) easy to use."

Aşağıdaki sonucu verirdi:  enter image description here

4
ArtBIT

Sadece buna ulaşmak için Swag yazdım.

Sadece yapabilirsin

pip install Swag

Artık tüm escape komutlarını txt dosyası olarak verilen bir hedefe t. Dosyası olarak yükleyebilirsiniz:

Swag install -d <colorsdir>

Ya da:

Swag install

Hangi renkler ~/.colors için yükleyecektir.

Ya onları böyle kullanırsın:

echo $(cat ~/.colors/blue.txt) This will be blue

Ya da daha ilginç bulduğum bu yol:

Swag print -c red -t underline "I will turn red and be underlined"

Şuna bir göz atın: asciinema !

Ve tüm kombinasyonları görüp, hangisinin iyi olduğuna karar verdiğimde:

for (( i = 0; i < 8; i++ )); do
    for (( j = 0; j < 8; j++ )); do
        printf "$(tput setab $i)$(tput setaf $j)(b=$i, f=$j)$(tput sgr0)\n"
    done
done
3
isntn

mesaj çıktısını farklı renklerle göstermek için:

echo -e "\033[31;1mYour Message\033[0m"

-Siyah 0; 30 Koyu Gri 1; 30

-Kırmızı 0; 31 Açık Kırmızı 1; 31

-Yeşil 0; 32 Açık Yeşil 1; 32

-Brown/Orange 0; 33 Sarı 1; 33

-Mavi 0; 34 Açık Mavi 1; 34

-Mor 0; 35 Açık Mor 1; 35

-Cyan 0; 36 Açık Camgöbeği 1; 36

-Açık Gri 0; 37 Beyaz 1; 37

1
Amirouche Zeggagh

İşte PSOS'u renklendirmeyle ayarlamak için değil MacOS terminalinde çalışan bir uygulama.

Biri yankıya dayanan, diğeri cehennem kırılmadan, dinamik olarak yöntemleri çağırmak için printf'e dayanan iki uygulama vardır.

Bu sadece bir başlangıç ​​ama sağlam ve terminali titretmiyor. Şu an git şubesini destekliyor, ancak sonunda bir şeyler yapmak için genişletilebilir.

Burada bulunabilir:

https://github.com/momomo/opensource/blob/master/momomo.com.Shell.style.sh

Sadece kopyalayıp yapıştırın çalışmalıdır. Bağımlılık yok.

0
momomo

İşte son zamanlarda bir araya getirdiğim, "Tuvalet" yerine herhangi bir boru girişini renklendirecek basit bir senaryo.

File: color.bsh

#!/usr/bin/env bash 

## A.M.Danischewski 2015+(c) Free - for (all (uses and 
## modifications)) - except you must keep this notice intact. 

declare INPUT_TXT=""
declare    ADD_LF="\n" 
declare -i DONE=0
declare -r COLOR_NUMBER="${1:-247}"
declare -r ASCII_FG="\\033[38;05;"
declare -r COLOR_OUT="${ASCII_FG}${COLOR_NUMBER}m"

function show_colors() { 
   ## perhaps will add bg 48 to first loop eventually 
 for fgbg in 38; do for color in {0..256} ; do 
 echo -en "\\033[${fgbg};5;${color}m ${color}\t\\033[0m"; 
 (($((${color}+1))%10==0)) && echo; done; echo; done
} 

if [[ ! $# -eq 1 || ${1} =~ ^-. ]]; then 
  show_colors 
  echo " Usage: ${0##*/} <color fg>" 
  echo "  E.g. echo \"Hello world!\" | figlet | ${0##*/} 54" 
else  
 while IFS= read -r PIPED_INPUT || { DONE=1; ADD_LF=""; }; do 
  PIPED_INPUT=$(sed 's#\\#\\\\#g' <<< "${PIPED_INPUT}")
  INPUT_TXT="${INPUT_TXT}${PIPED_INPUT}${ADD_LF}"
  ((${DONE})) && break; 
 done
 echo -en "${COLOR_OUT}${INPUT_TXT}\\033[00m"
fi 

O zaman kırmızı renkle (196) çağırın:
$> echo "text you want colored red" | color.bsh 196

0
user4401178

: Bakın

echo_red(){
    echo -e "\e[1;31m$1\e[0m"
}
echo_green(){
    echo -e "\e[1;32m$1\e[0m"
}
echo_yellow(){
    echo -e "\e[1;33m$1\e[0m"
}
echo_blue(){
    echo -e "\e[1;34m$1\e[0m"
}
0
Mike