Echo komutunu kullanarak terminalde bir metin yazdırmaya çalışıyorum.
Metni kırmızı renkte yazdırmak istiyorum. Bunu nasıl yapabilirim?
Echo komutunu kullanarak terminalde bir metin yazdırmaya çalışıyorum.
Metni kırmızı renkte yazdırmak istiyorum. Bunu nasıl yapabilirim?
Yanıtlar:
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"
love
kırmızı baskı .
@ James-lim'in yorumundan, komutu kullanıyorsanız, echo
ters 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)
\e[0;31mHello Stackoverflow\e[0m
echo
Ters eğik çizgi kaçışlarını etkinleştirmeyi söyler .
\x1B
yerine kullanmak \e
. \033
tüm platformlar için iyi olurdu.
for (( i = 30; i < 38; i++ )); do echo -e "\033[0;"$i"m Normal: (0;$i); \033[1;"$i"m Light: (1;$i)"; done
Her türlü şey için terminal kontrol kodları üretmek için müthiş tput
komutu ( Ignacio'nun cevabında önerilen ) kullanabilirsiniz.
Belirli tput
alt komutlar daha sonra ele alınacaktır.
tput
Bir komut dizisinin parçası olarak arayın :
tput setaf 1; echo "this is red text"
Kullanım ;
yerine &&
eğer öyleyse tput
hatalar hala metin gösterileri.
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}"
tput
terminal 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 kullanarak tput
çıktılarınızı doğrudan echo
dizelerinize eklemek daha uygun olabilir :
echo "$(tput setaf 1)Red text $(tput setab 7)and white background$(tput sgr 0)"
Yukarıdaki komut bunu Ubuntu'da üretir:
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 ( setb
yerine setab
ve setf
yerine setaf
) ANSI olmayan sürümleri de vardır .
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
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
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
tput sgr0 # Reset text format to the terminal's default
tput bel # Play a bell
Tamamen titrek pencerelerle , bel
komut kullanıcının dikkatini çekmek için terminali bir saniyeliğine yalpalar.
tput
satı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
man 1 tput
man 5 terminfo
Bu seçeneklerle ilgili komutları ve daha fazla ayrıntı tam listesi için. (İlgili tput
komut, Cap-name
81. satırdan başlayan devasa tablonun sütununda listelenir .)$()
, bu bir komut ikamesidir . Tek tput af 1
yapmanız gereken renk kodu dizesini oluşturmaktır, ancak kodlar yazdırılabilir karakterler değildir, bu nedenle tput af 1
tek başına yazmak boş bir çıktı satırı üretecektir.
ncurses
tput
Renklerin tam listesi için Unix StackExchange
reset=`tput sgr0`
olmalı reset=`tput sgr 0`
.
# 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
| | 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 |
| | | | | |
| 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 |
| | | | | |
Bu kodları özel bash değişkenlerinizde kullanacaksanız
fazladan kaçış karakteri eklemelisin ki darbedoğru yorumlayabilir. Ekstra kaçış karakterleri eklenmeden çalışır, ancak Ctrl + r
geçmişinizde arama yapmak için kullandığınızda sorunlarla karşılaşırsınız .
\[
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\]
Bu renklere dalmadan önce, bu kodlarla 4 modu bilmelisiniz:
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.
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 .
Bu mod ön planı renklendirmek içindir.
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 |
|------------+-----------+-----------+---------+-------------+------------------------------------------+-----------------|
ön planda 8 bitlik özet .gif
arka planda 8 bitlik özet .gif
blinking
KDE Terminalinde
C
size daha fazlasını gösteren basit bir kod
bu renklerle başa çıkmak için geliştirdiğim daha gelişmiş bir araç:
Evet yapabilirsin. Deneyimledimdarbe, c, c ++, d perl, piton
Bence HAYIR.
3/4 bit Evet, kodu gcc
Win-7'de bazı ekran görüntüleri ile derlerseniz
\033[
= 2, diğer bölümler 1
Her yerde bir sahiptir tty
tercüman
xterm
, gnome-terminal
, kde-terminal
, mysql-client-CLI
vb.
Ö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 PATH
yere koyun ve istediğiniz yerde kullanın.
ls | pcc
df | pcc
içinde mysql
önce kayıt olun pager
ve sonra deneyin:
[user2:db2] pager pcc
PAGER set to 'pcc'
[user2:db2] select * from table-name;
Bu mu DEĞİL Unicode işlemek.
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
Evet. \u001b
Kullanımı kolaydır 3/4-bit
, ancak kullanımı çok doğru ve güzeldir 24-bit
.
Eğer tecrübeniz yoksahtmlişte hızlı bir öğretici:
24 bit: 00000000
ve 00000000
ve 00000000
. Her 8 bit belirli bir renk içindir.
1..8
içindir ve 9..16
için ve 17..24
için
de Sohtml #FF0000
araçlar ve işte burada: 255;0;0
inhtml #00FF00
anlamı ş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ı
x1B[
ortadan kaldırmak için kullanabilirsiniz .
Yeteneği ve parametresi tput
ile kullanın .setaf
1
echo "$(tput setaf 1)Hello, world$(tput sgr0)"
\033[31m
kıracak taleb terminallerin bazı kütüphane.
i
daha 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
tput: command not found
(alp üzerinde)
echo -e "\033[31m Hello World"
[31m
Metin rengini kontrol eder:
30
- ön plan rengini 37
ayarlar40
- arka plan rengini 47
ayarlarRenk kodlarının daha eksiksiz bir listesini burada bulabilirsiniz .
\033[0m
Dizenin sonunda metin rengini sıfırlamak iyi bir uygulamadır .
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"
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 echo
fonksiyonu çö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!"
text
değişkeni text="$color${@: 2}${code}0m"
bu şekilde değiştiririm, renk parametresi dışındaki tüm çizgi renklendirilir.
Rengi yalnızca bir tanesi için değiştirmenin düzgün bir yolu, echo
bu 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
-n
o zaman yankı satır içi renklendirme olarak kullanabilirsinizecho "Red `coloredEcho "fox" red` jumps over the lazy dog"
tput
Renk kodlarını hesaplamak için kullanın . Daha \E[31;1m
az 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"
Bu soru tekrar tekrar cevaplandı :-) ama neden olmasın.
İlk tput
kullanı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:
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.
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ı?
$PS1
bırakmayan \[...\]
parçalar olmadan kullanıyorsunuz mu? Bash PS1 işaretlerini tput dizeleriyle kullanmaya devam edin.
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
Umarım bu görüntü bash için renginizi seçmenize yardımcı olur: D
zsh
Veya 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'
Hem metin hem de arka plan için 24 Bit RGB gerçek renkleri kullanabiliriz !
ESC[38;2;⟨r⟩;⟨g⟩;⟨b⟩m /*Foreground color*/
ESC[48;2;⟨r⟩;⟨g⟩;⟨b⟩m /*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:
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
Bu kodlar Ubuntu kutumda çalışıyor:
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
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 -e
veyaprintf
┌───────┬─────────────────┬──────────┐ ┌───────┬─────────────────┬──────────┐
│ 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."
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/'
Ş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
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}"
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"
tput
; bunun için var!
tput
için sc
ve 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.
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
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
.tput
yetenek 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."
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
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.
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 !
İş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
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"
}
İş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.
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"
}
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")
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ı.
echo -e '\e[0;31mHello Stackoverflow\e[0m'
. Yani bash için de aynı şey geçerli.