Linux'ta yankı çıktı rengi nasıl değiştirilir


Yanıtlar:


2295

Bu ANSI kaçış kodlarını kullanabilirsiniz :

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ı betiğinizde şu şekilde 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"

lovekırmızı baskı .

@ James-lim'in yorumundan, komutu kullanıyorsanız, echoters eğik çizgi kaçışları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"

( "\n"ek boş satır eklemek istemiyorsanız yankı kullanırken eklemeyin)


11
Benim için çalışmıyor - çıktı:\e[0;31mHello Stackoverflow\e[0m
Ben Harold

171
"-E" ile denedin mi? echoTers eğik çizgi kaçışlarını etkinleştirmeyi söyler .
James Lim

142
MacOSX'te, \x1Byerine kullanmak \e. \033tüm platformlar için iyi olurdu.
Xiao

4
Bir karınca özelliği dosyasında, esacpe için unicode kullanın, örneğin kırmızı = \ u001b [0; 31m
shonky linux kullanıcısı

20
Tput için yapılan msanford gibi, işte "ANSI-Rainbow"for (( i = 30; i < 38; i++ )); do echo -e "\033[0;"$i"m Normal: (0;$i); \033[1;"$i"m Light: (1;$i)"; done
everyman

970

Her türlü şey için terminal kontrol kodları üretmek için müthiş tputkomutu ( Ignacio'nun cevabında önerilen ) kullanabilirsiniz.


kullanım

Belirli tputalt komutlar daha sonra ele alınacaktır.

direkt

tputBir komut dizisinin parçası olarak arayın :

tput setaf 1; echo "this is red text"

Kullanım ;yerine &&eğer öyleyse tputhatalar hala metin gösterileri.

Kabuk değişkenleri

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

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

tputterminal tarafından özel bir anlama sahip olarak yorumlanan karakter dizileri üretir. Kendileri gösterilmeyecek. Yine de dosyalara kaydedilebileceğini veya terminal dışındaki programlar tarafından girdi olarak işlenebileceğini unutmayın.

Komut ikamesi

Komut ikamesi kullanarak tputçıktılarınızı doğrudan echodizelerinize eklemek daha uygun olabilir :

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

Misal

Yukarıdaki komut bunu Ubuntu'da üretir:

Renkli terminal metninin ekran görüntüsü


Ö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 verilmeyen farklı sayılar kullanan renk ayarı işlevlerinin ( setbyerine setabve setfyerine 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ç hareket 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

Temizleme ve ekleme komutları

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

Tamamen titrek pencerelerle , belkomut kullanıcının dikkatini çekmek için terminali bir saniyeliğine yalpalar.


Kodlar

tputsatır başına bir komut içeren ve tputçıkışlardan önce sırayla yürütülen komut dosyalarını kabul eder .

Çok satırlı bir dizeyi yankılayıp piping yaparak 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

  • Görmek man 1 tput
  • Bkz man 5 terminfoBu seçeneklerle ilgili komutları ve daha fazla ayrıntı tam listesi için. (İlgili tputkomut, Cap-name81. satırdan başlayan devasa tablonun sütununda listelenir .)

13
Mükemmel cevap. Bana en çok yardımcı olan bu. Merak ettiğimi merak eden herkes için $(), bu bir komut ikamesidir . Tek tput af 1yapmanız gereken renk kodu dizesini oluşturmaktır, ancak kodlar yazdırılabilir karakterler değildir, bu nedenle tput af 1tek başına yazmak boş bir çıktı satırı üretecektir.
Chris Middleton

5
Not: CygWin kullanıyorsanız ve tput kurulumunuz yoksancurses
Enrico

3
tput aynı zamanda sed içinde okunabilir, renkli cruft'a
nickboldt

1
tputRenklerin tam listesi için Unix StackExchange
Andrew

Bence bir boşluk reset=`tput sgr0`olmalı reset=`tput sgr 0`.
Maymunlar

833

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 cinsinden 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şkenlerinizde kullanacaksanız

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

fazladan kaçış karakteri eklemelisin ki doğru yorumlayabilir. Ekstra kaçış karakterleri eklenmeden çalışır, ancak Ctrl + rgeçmişinizde arama yapmak için kullandığınızda sorunlarla karşılaşırsınız .

bash için istisna kuralı

\[Herhangi bir ANSI kodunu başlatmadan önce eklemeli ve \]herhangi bir bitiş kodundan 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\]

\[bir sekansın başlangıç için basılamayan karakter
\]bir dizinin ucuna için basılamayan karakter

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

renk dizisi türü:

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

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

1. renk modu

Metin renginin stilini değiştirir. Örneğin, rengi parlak veya daha koyu yapın.

  • 0 Sıfırla
  • 1; normalden daha hafif
  • 2; normalden daha koyu

Bu mod geniş çapta desteklenmez. Gnome Terminali üzerinde tam destek sağlar.

2. metin modu

Bu mod renk DEĞİL metnin stilini değiştirmek içindir.

  • 3; italik
  • 4; altını çizmek
  • 5; yanıp sönüyor (yavaş)
  • 6; yanıp sönüyor (hızlı)
  • 7; tersine çevirmek
  • 8; saklamak
  • 9; Çapraz üzerinden

ve neredeyse desteklenmektedir.
Örneğin, KDE-Konsole destekliyor 5;ancak Gnome-Terminal desteklemiyor ve Gnome destekliyor 8;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[33m |         |       | yellow           | echo -e "\033[33m####\033[m" |                                      |
|         34 | \033[34m |         |       | blue             | echo -e "\033[34m####\033[m" |                                      |
|         35 | \033[35m |         |       | purple           | echo -e "\033[35m####\033[m" | real name: magenta = reddish-purple  |
|         36 | \033[36m |         |       | cyan             | echo -e "\033[36m####\033[m" |                                      |
|         37 | \033[37m |         |       | 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 24 bit ANSI renginin 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

ön planda 8 bitlik özet .gif

foreground.gif

arka planda 8 bitlik özet .gif

background.gif

değerleriyle renk özeti

resim açıklamasını buraya girin resim açıklamasını buraya girin resim açıklamasını buraya girin resim açıklamasını buraya girin

blinking KDE Terminalinde

KDE-sönen

Csize daha fazlasını gösteren basit bir kod

cecho_screenshot

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

B-hattı


renk modu çekimi

solmaya normal parlak

metin modu çekimi

Yalnızca-metin modu

birleştirme tamam

birleştirmek

daha fazla atış


İleri Düzey Kullanıcılar ve Programcılar için İpuçları:

Bu kodları bir programlama dilinde kullanabilir miyiz?

Evet yapabilirsin. Deneyimledim, , , ,

Bir programın hızını yavaşlatıyorlar mı?

Bence HAYIR.

Bunları Windows'ta kullanabilir miyiz?

3/4 bit Evet, kodu gcc
Win-7'de bazı ekran görüntüleri ile derlerseniz

Kodun uzunluğu nasıl hesaplanır?

\033[ = 2, diğer bölümler 1

Bu kodları nerede kullanabiliriz?

Her yerde bir sahiptir ttytercüman
xterm, gnome-terminal, kde-terminal, mysql-client-CLIvb.
Örneğin, çıktınızı mysql ile renklendirmek istiyorsanız,Perl

#!/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 Karakteri Renklendir) ve sonra a dosyasını geçerli bir PATHyere koyun ve istediğiniz yerde kullanın.

ls | pcc
df | pcc

içinde mysqlönce kayıt olun pagerve sonra deneyin:

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

pcc

Bu mu DEĞİL Unicode işlemek.

Bu kodlar sadece renklendirme yapıyor mu?

Hayır, çok ilginç şeyler 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ı temizlemek isteyen yeni başlayanlar var, system( "clear" )böylece bunu system(3)çağrı yerine kullanabilirsiniz

Unicode'da mevcut mu?

Evet. \u001b

Bu renklerin hangi sürümü tercih edilir?

Kullanımı kolaydır 3/4-bit, ancak kullanımı çok doğru ve güzeldir 24-bit.
Eğer tecrübeniz yoksaişte hızlı bir öğretici:
24 bit: 00000000ve 00000000ve 00000000. Her 8 bit belirli bir renk içindir.
1..8içindir ve 9..16için ve 17..24için
de So #FF0000araçlar ve işte burada: 255;0;0
in #00FF00anlamı şudur: 0;255;0
Bu mantıklı mı? hangi rengi bu üç 8 bitlik değerlerle birleştirmek istersiniz.


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


70
Bu cevapta kimse gerçekten şaşkın değil mi ??
Benj

14
Bu kesinlikle şöhret cevabı salonu, teşekkür ederim.
ForeverZer0

2
@NeilGuyLindberg sekizli değişmez bu hata esde kendisi değil Node.js bir parçasıdır. x1B[ortadan kaldırmak için kullanabilirsiniz .
Shakiba Moshiri

5
Bu cevabı oylamak için oldukça geriye döndüm!
RNA

1
Hissediyorum, @ShakibaMoshiri bu konuda bir tez yazdı xD Şakalar, böyle ayrıntılı bir cevap için şerefe!
SH '

189

Yeteneği ve parametresi tputile kullanın .setaf1

echo "$(tput setaf 1)Hello, world$(tput sgr0)"

8
Bu en iyi seçenek olmalı. Ne tput'un yapar terminal bilgi okuyun ve sizin için doğru kaçan ANSI kod verecek olduğunu. gibi kod \033[31mkıracak taleb terminallerin bazı kütüphane.
Tian Chen

44
Basit bir döngü ile renkleri keşfedin ( idaha fazla ton için üst sınırını artırın ):for (( i = 0; i < 17; i++ )); do echo "$(tput setaf $i)This is ($i) $(tput sgr0)"; done
msanford

2
İşte tput kodlarında bir NASIL
belgesi

tput: command not found(alp üzerinde)
dgallant

127
echo -e "\033[31m Hello World"

[31mMetin rengini kontrol eder:

  • 30- ön plan rengini 37ayarlar
  • 40- arka plan rengini 47ayarlar

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

\033[0mDizenin sonunda metin rengini sıfırlamak iyi bir uygulamadır .


2
echo -e "\ 033 [31m Merhaba Dünya", [31m renktir
9'da yenilebilir

36

Ben sadece tüm çözümler iyi yakalar birleştirdi ve ile sona erdi:

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 diyebilirsiniz:

cecho "RED" "Helloworld"

1
Çok pratik, senaryomda çalışması için sadece YEŞİL, SARI, NC için tek tırnakları çift tırnaklarla değiştirmek zorunda kaldım.
ionescu77

1
Harika bir çözüm !!
David Kariuki

31

Bu renk anahtarı \033[ . Bkz geçmişini .

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

Biz renk anahtarı ile renk dizileri sonlandırmak \033[ve 0m, hiçbir -renk kodu. Sekmeleri bir biçimlendirme dilinde açmak ve kapatmak gibi.

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

Basit renk echofonksiyonu çö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!"

1
Son textdeğişkeni text="$color${@: 2}${code}0m"bu şekilde değiştiririm, renk parametresi dışındaki tüm çizgi renklendirilir.
Shairon Toledo

@tomazahlin sadece yukarıda belirtildiği gibi yankıya -e ekleyin
Artem Medvedev

28

Rengi yalnızca bir tanesi için değiştirmenin düzgün bir yolu, echobu 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 doğrudan Drew'un cevabında belirtilen renk kodlarını kullanabilirsiniz :

coloredEcho "This text is green" 2

Eğer eklerseniz -no zaman yankı satır içi renklendirme olarak kullanabilirsinizecho "Red `coloredEcho "fox" red` jumps over the lazy dog"
sobi3ch

23

tputRenk kodlarını hesaplamak için kullanın . Daha \E[31;1maz taşınabilir olduğu için ANSI çıkış kodunu (örneğin kırmızı için) kullanmaktan kaçının . Ö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"

18

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

İlk tputkullanım, modern ortamlarda ASCII kodlarını manuel olarak enjekte etmekten daha taşınabilirecho -E

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

 say() {
     echo "$@" | sed \
             -e "s/\(\(@\(red\|green\|yellow\|blue\|magenta\|cyan\|white\|reset\|b\|u\)\)\+\)[[]\{2\}\(.*\)[]]\{2\}/\1\4@reset/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 şunları kullanabilirsiniz:

 say @b@green[[Success]] 

almak:

Cesur Yeşil Başarı

Taşınabilirliği ile ilgili notlar tput

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

tput(1) 1990'larda X / Open curses anlamında kullanılabilir (1997 standardı aşağıda belirtilen anlamlara sahiptir).

Yani, ( oldukça ) her yerde bulunur.


Bu çok havalı! Bunu bilmiyordum. Kullanılabilirliği hakkında bir şeyler söyleyebilir misiniz tput? Yüklemek için yönetici haklarına sahip olmayan çoğu sunucuda kullanılabilir mi? Bu tekniğin ilk olarak 'icat edildiği' yere bir bağınız var mı?
Redsandro

3
tput, terminal yeteneklerini bilmenizden tamamen bağımsız olduğu, bunu yapmanın standartlara uygun yoludur. Terminal belirli bir kapasiteyi desteklemiyorsa, vidalı kaçış kodlarını dışarı itmeden yapabileceklerine nazikçe indirilecektir.
Ahmed Masud

1
Bu yöntemi bash satırlarındaki imleç konumu ile uğraşırken kullanmayı bıraktım. Satırın sonundan önce rastgele sarılır ve ev veya ok tuşlarını kullanırken satırın başına kadar geri gitmez. Beceriksiz manuel kaçış kodlarına geri dönmek bu sorunu çözer.
Redsandro

2
@Resandro - boşluk $PS1bırakmayan \[...\]parçalar olmadan kullanıyorsunuz mu? Bash PS1 işaretlerini tput dizeleriyle kullanmaya devam edin.
Toby Speight

Sed yardımcı programındaki farklılıklar nedeniyle bu işlevin MacOsX üzerinde tam olarak çalışmadığını unutmayın: unix.stackexchange.com/questions/13711/…
Jeff

14

Bu cevap için @ k-five'e teşekkürler

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ç

resim açıklamasını buraya girin

Umarım bu görüntü bash için renginizi seçmenize yardımcı olur: D


Bunun bash v4 gerektirdiğine dikkat edilmelidir.
Synox

14

zshVeya kullanıyorsanızbash

black() {
    echo -e "\e[30m${1}\e[0m"
}

red() {
    echo -e "\e[31m${1}\e[0m"
}

green() {
    echo -e "\e[32m${1}\e[0m"
}

yellow() {
    echo -e "\e[33m${1}\e[0m"
}

blue() {
    echo -e "\e[34m${1}\e[0m"
}

magenta() {
    echo -e "\e[35m${1}\e[0m"
}

cyan() {
    echo -e "\e[36m${1}\e[0m"
}

gray() {
    echo -e "\e[90m${1}\e[0m"
}

black 'BLACK'
red 'RED'
green 'GREEN'
yellow 'YELLOW'
blue 'BLUE'
magenta 'MAGENTA'
cyan 'CYAN'
gray 'GRAY'

Çevrimiçi deneyin


14

Hem metin hem de arka plan için 24 Bit RGB gerçek renkleri kullanabiliriz !

 ESC[38;2;⟨r⟩;⟨g⟩;⟨bm  /*Foreground color*/
 ESC[48;2;⟨r⟩;⟨g⟩;⟨bm  /*Background color*/

Örnek kırmızı metin ve kapanış etiketi:

 echo -e "\e[38;2;255;0;0mHello world\e[0m"

Jeneratör:

24-bit: 16 - 24 bit renk içeren "gerçek renk" grafik kartları yaygınlaştıkça, Xterm, KDE'nin Konsole yanı sıra tüm libvte tabanlı terminaller (GNOME Terminali dahil) 24-bit ön plan ve arka plan renk ayarını destekler https: / /en.wikipedia.org/wiki/ANSI_escape_code#24-bit

Betiklerimde kullanmak güvenli mi?

Evet! 8 ve 16 bitlik terminaller, mevcut paletin aralığındaki renk olarak yedek olarak görüntülenecek ve en iyi kontrastı, kırılmayı engelleyecektir!


Ayrıca, hiç kimse ANSI kod 7 ters video yararlılığını fark etmedi .

Ön plan ve arka plan renklerini değiştirerek herhangi bir terminal şeması rengi, siyah veya beyaz arka plan veya diğer fantezi paletlerinde okunabilir durumda kalır.

Her yerde çalışan kırmızı bir arka plan için örnek:

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

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

resim açıklamasını buraya girin

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


11

Bu kodlar Ubuntu kutumda çalışıyor:

resim açıklamasını buraya girin

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, abcd harflerini 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

resim açıklamasını buraya girin


2
Bu arada: Bu, ubuntu'nun belirli bir sürümünü yüklemeye bağlı değil, PuTTY!
urzeit

11

Bulduğum Shakiba Moshiri Sonra aklıma bir fikir geldi ... bu konu hakkında bilgi bakarken 'ın müthiş cevabı ... ve 😁 kullanımı son derece kolay bir oldukça güzel işlevi bitti
ben paylaşmak ettik Yani 😉

https://github.com/ppo/bash-colors

Kullanım: $(c <flags>) içinde bir echo -eveyaprintf

 ┌───────┬─────────────────┬──────────┐   ┌───────┬─────────────────┬──────────┐
  Code   Style            Octal        Code   Style            Octal    
 ├───────┼─────────────────┼──────────┤   ├───────┼─────────────────┼──────────┤
    -    Foreground       \033[3..       B    Bold             \033[1m  
    _    Background       \033[4..       U    Underline        \033[4m  
 ├───────┼─────────────────┼──────────┤      F    Flash/blink      \033[5m  
    k    Black            ......0m       N    Negative         \033[7m  
    r    Red              ......1m    ├───────┼─────────────────┼──────────┤
    g    Green            ......2m       L    Normal (unbold)  \033[22m 
    y    Yellow           ......3m       0    Reset            \033[0m  
    b    Blue             ......4m    └───────┴─────────────────┴──────────┘
    m    Magenta          ......5m 
    c    Cyan             ......6m 
    w    White            ......7m 
 └───────┴─────────────────┴──────────┘

Örnekler:

echo -e "$(c 0wB)Bold white$(c) and normal"
echo -e "Normal text… $(c r_yB)BOLD red text on yellow background… $(c _w)now on
  white background… $(c 0U) reset and underline… $(c) and back to normal."

10

Okunabilirlik için

Kodun okunabilirliğini artırmak istiyorsanız, echoönce dizeyi sonra rengi kullanarak daha sonra ekleyebilirsiniz sed:

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

1
Bu cevabı gerçekten çok beğendim! Sed komutundaki $ 'ı açıklayabilir misiniz?
Patrick

2
$ '<something>' bash içindir, sed için değil. Bash'e \ e'yi bir kaçış dizisi olarak işlemesini ve bir "kaçış" karakteri koymasını söyler. Genellikle bir sekme veya yeni satır karakterini bir komut.
dsz

8

Şimdiye kadar en sevdiğim cevap renkli.

Başka bir seçenek yayınlamak için bu küçük araç xcol'e göz atabilirsiniz.

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 stdin'ini 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 örneği

Sed'in kabul edeceği normal ifadeleri 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 scriptlerimde böyle kullanıyorum

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

6

Bu cevabı genişletmek için tembelimiz 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"

2
Sabit kod terminali kaçışları yapmayın. Kullanın tput; bunun için var!
Toby Speight

@TobySpeight Her ne kadar çoklu platform desteği (teoride) doğru olsa da, eğer poster kendi dünyasında işe yararsa, neden benzer dünyadaki diğer kişileri tekniği kullanmaya katılmıyorum? Durumda ben Ubuntu 16.04 bash benzer çalışıyorum ve çalışıyor. Bu platformdaki tek kullanıcı olarak bu cevabı kabul edilebilir buluyorum. Ben de kullanacağı tputiçin scve rc(imleç geri yükleme imlecin kaydet) gerçi. Her ne kadar bu cevap bana "tembel" diyorsa da, "pratik" veya "doğrudan konu" olarak yeniden yazılabilir.
WinEunuuchs2Unix

Kendi çözümüm buna benziyordu, sadece kabuk yerleşikleriyle sınırlıydı, çünkü bir senaryodaki her mesaj için iki dış işlem, alt kabuk vb.
Amit Naidu

6

mesaj çıkışını farklı renklerle göstermek için şunları yapabilirsiniz:

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

-Kahverengi / Turuncu 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


5

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

Çok sayıda farklı terminal kontrol dili olduğundan, genellikle bir sistemin bir ara iletişim katmanı vardır. Gerçek kodlar, halihazırda algılanan terminal türü için bir veritabanında aranır ve bir API'ye veya bir komuttan (kabuktan) standartlaştırılmış istekler verirsiniz.

Bu komutlardan biri tput. tputyetenek isimleri ve varsa parametreler adı verilen bir dizi kısaltmayı kabul eder, sonra terminfo veritabanında algılanan terminal için doğru kaçış dizilerini arar ve doğru kodları yazdırır (terminal umarım anlar).

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

Bununla birlikte, bash-tint adlı küçük bir yardımcı kütüphane yazdım , bu da tput'un üstüne başka bir katman ekleyerek kullanımını daha da kolaylaştırdı (imho):

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

Aşağıdaki sonucu verir: resim açıklamasını buraya girin


5

Geçerli terminalinize özgü sabit kodlama kaçış kodları yerine, kullanmalısınız tput.

Bu benim en sevdiğim demo script:

#!/bin/bash

tput init

end=$(( $(tput colors)-1 ))
w=8
for c in $(seq 0 $end); do
    eval "$(printf "tput setaf %3s   " "$c")"; echo -n "$_"
    [[ $c -ge $(( w*2 )) ]] && offset=2 || offset=0
    [[ $(((c+offset) % (w-offset))) -eq $(((w-offset)-1)) ]] && echo
done

tput init

256 renk çıktısı


4

Ben kullanıyorum bu renkli baskı için

#!/bin/bash
#--------------------------------------------------------------------+
#Color picker, usage: printf $BLD$CUR$RED$BBLU'Hello World!'$DEF     |
#-------------------------+--------------------------------+---------+
#       Text color        |       Background color         |         |
#-----------+-------------+--------------+-----------------+         |
# Base color|Lighter shade| Base color   | Lighter shade   |         |
#-----------+-------------+--------------+-----------------+         |
BLK='\e[30m'; blk='\e[90m'; BBLK='\e[40m'; bblk='\e[100m' #| Black   |
RED='\e[31m'; red='\e[91m'; BRED='\e[41m'; bred='\e[101m' #| Red     |
GRN='\e[32m'; grn='\e[92m'; BGRN='\e[42m'; bgrn='\e[102m' #| Green   |
YLW='\e[33m'; ylw='\e[93m'; BYLW='\e[43m'; bylw='\e[103m' #| Yellow  |
BLU='\e[34m'; blu='\e[94m'; BBLU='\e[44m'; bblu='\e[104m' #| Blue    |
MGN='\e[35m'; mgn='\e[95m'; BMGN='\e[45m'; bmgn='\e[105m' #| Magenta |
CYN='\e[36m'; cyn='\e[96m'; BCYN='\e[46m'; bcyn='\e[106m' #| Cyan    |
WHT='\e[37m'; wht='\e[97m'; BWHT='\e[47m'; bwht='\e[107m' #| White   |
#-------------------------{ Effects }----------------------+---------+
DEF='\e[0m'   #Default color and effects                             |
BLD='\e[1m'   #Bold\brighter                                         |
DIM='\e[2m'   #Dim\darker                                            |
CUR='\e[3m'   #Italic font                                           |
UND='\e[4m'   #Underline                                             |
INV='\e[7m'   #Inverted                                              |
COF='\e[?25l' #Cursor Off                                            |
CON='\e[?25h' #Cursor On                                             |
#------------------------{ Functions }-------------------------------+
# Text positioning, usage: XY 10 10 'Hello World!'                   |
XY () { printf "\e[$2;${1}H$3"; }                                   #|
# Print line, usage: line - 10 | line -= 20 | line 'Hello World!' 20 |
line () { printf -v _L %$2s; printf -- "${_L// /$1}"; }             #|
# Create sequence like {0..(X-1)}                                    |
que () { printf -v _N %$1s; _N=(${_N// / 1}); printf "${!_N[*]}"; } #|
#--------------------------------------------------------------------+

Tüm temel renkler değişken olarak ayarlanır ve ayrıca bazı yararlı işlevler vardır: XY, çizgi ve que. Bu komut dosyasını sizden birinde kaynaklayın ve tüm renk çeşitlerini ve işlevlerini kullanın.


3

Ve tüm kombinasyonu görmek ve hangisinin havalı olduğuna karar vermek için kullandığım şey:

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

2

Sadece bunu başarmak için yağma yazdım .

Sadece yapabilirsin

pip install swag

Artık tüm çıkış komutlarını txt dosyaları olarak belirli bir hedefe şu yolla yükleyebilirsiniz:

swag install -d <colorsdir>

Veya şu yolla daha da kolay:

swag install

Hangi renkleri yükleyecek ~/.colors.

Ya bunları şu şekilde kullanırsınız:

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

Ya da aslında daha ilginç bulduğum bu şekilde:

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

Asciinema'ya bir göz atın !


0

İşte son zamanlarda bir araya getirdim, "Tuvalet" kullanmak yerine herhangi bir borulu girişi renklendirecek basit bir küçük komut dosyası.

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 

Sonra kırmızı renkle (196) arayın:
$> echo "text you want colored red" | color.bsh 196


Renk döngüsü mantığı bu iyi Ascii renkleri eğitiminde bulundu: misc.flogisoft.com/bash/tip_colors_and_formatting

-1

Bakınız :

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

Echo_green işlevinin 33 yerine 32 koduna sahip olması gerektiğini unutmayın. B / c stackoverflow düzenleyememek için en az 6 karakter düzenlemesi gerekir.
Daniel

-2

İşte en basit ve okunabilir çözüm. Bashj ( https://sourceforge.net/projects/bashj/ ) ile, şu satırlardan birini seçmeniz yeterlidir:

#!/usr/bin/bash

W="Hello world!"
echo $W

R=130
G=60
B=190

echo u.colored($R,$G,$B,$W)

echo u.colored(255,127,0,$W)
echo u.red($W)
echo u.bold($W)
echo u.italic($W)

Y=u.yellow($W)
echo $Y
echo u.bold($Y)

256x256x256 terminal uygulamanızda renk desteğine sahipseniz renkler mevcuttur.


-3

iş parçacığından diğer çözümleri karıştırdıktan sonra nasıl npm scriptsçıktı (gitbash CLI) renkleri almak başardı :

{
    "deploy": "echo \u001b[1;32m && ng build && echo \u001b[1;0mdeploy {\u001b[1;33mcopy\u001b[1;0m: \u001b[1;32m0% && cp -r -f dist/packaged/* \\\\SERVER-01\\dist\\ && echo \u001b[1;0mdeploy {\u001b[1;33mcopy\u001b[1;0m} \u001b[1;34m\u001b[1;1m100% DEPLOYED"
}

resim açıklamasını buraya girin


-4

Orada biraz bir şey gibi, grep'ten geçmek onu kırmızı olarak vurgulayacaktır (ama sadece kırmızı). Ayrıca dizenizi satırın sonuna daha yakın olacak şekilde adlandırılmış yöneltmeler de kullanabilirsiniz:

 grep '.*' --color=always <(echo "foobar")

seçtiğiniz rengi seçme noktasını kaçırıyorsunuz. Ayrıca bir boyama programı olarak grep gerçekten tartışmalı: P
Ahmed Masud

Gerçekten değil, OP özellikle kırmızı istediklerini belirtti. Grep kullanmaktan daha iyi seçenekler olduğunu kabul ediyorum, ancak istediklerini gerçekleştiriyor ve daha karmaşık bir şey öğrenmek zorunda kalmıyor.
FinalDuty

-5
red='\e[0;31m'
NC='\e[0m' # No Color
echo -e "${red}Hello Stackoverflow${NC}"

Bu cevap doğru, ancak renklere yapılan çağrı tırnak içinde olmamalıdır.

echo -e ${red}"Hello Stackoverflow"${NC}

Hile yapmalı.


3
Tırnak içinde iyi çalışıyor. -e anahtarı tırnak içinde ne olduğunu değerlendirir. Bash -x kullanarak her ikisini de (iç ve dış tırnak) çalıştırmak aynı yürütme komutunu verir echo -e '\e[0;31mHello Stackoverflow\e[0m'. Yani bash için de aynı şey geçerli.
naab
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.