Saya mencoba untuk mencetak teks di terminal menggunakan perintah gema.
Saya ingin mencetak teks dalam warna merah. Bagaimana saya bisa melakukan itu?
Anda dapat menggunakan kode pelarian ANSI ini :
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
Dan kemudian gunakan seperti ini di skrip Anda:
# .---------- 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"
yang mencetak love
dengan warna merah.
Dari komentar @ james-lim, jika Anda menggunakan perintah echo
, pastikan untuk menggunakan flag -e untuk mengizinkan backslash lolos .
# Continued from above example
echo -e "I ${RED}love${NC} Stack Overflow"
(jangan tambahkan "\n"
saat menggunakan gema kecuali jika Anda ingin menambahkan baris kosong tambahan)
Anda dapat menggunakan perintah tput
yang mengagumkan (disarankan di Jawaban Ignacio ) untuk menghasilkan kode kontrol terminal untuk semua jenis hal.
Sub-perintah tput
khusus dibahas kemudian.
Panggil tput
sebagai bagian dari urutan perintah:
tput setaf 1; echo "this is red text"
Gunakan ;
alih-alih &&
jadi jika tput
kesalahan masih ditampilkan teks.
Pilihan lain adalah menggunakan variabel Shell:
red=`tput setaf 1`
green=`tput setaf 2`
reset=`tput sgr0`
echo "${red}red text ${green}green text${reset}"
tput
menghasilkan urutan karakter yang ditafsirkan oleh terminal sebagai memiliki makna khusus. Mereka tidak akan ditampilkan sendiri. Perhatikan bahwa mereka masih dapat disimpan ke dalam file atau diproses sebagai input oleh program selain terminal.
Mungkin lebih mudah untuk memasukkan keluaran tput
langsung ke string echo
Anda menggunakan substitusi perintah :
echo "$(tput setaf 1)Red text $(tput setab 7)and white background$(tput sgr 0)"
Perintah di atas menghasilkan ini di Ubuntu:
tput setab [1-7] # Set the background colour using ANSI escape
tput setaf [1-7] # Set the foreground colour using ANSI escape
Warna adalah sebagai berikut:
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
Ada juga versi non-ANSI dari fungsi pengaturan warna (setb
bukannya setab
, dan setf
bukannya setaf
) yang menggunakan angka berbeda, tidak diberikan di sini.
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
Dengan compiz goyangan windows , perintah bel
membuat terminal goyah selama sedetik untuk menarik perhatian pengguna.
tput
menerima skrip yang berisi satu perintah per baris, yang dieksekusi secara berurutan sebelum tput
keluar.
Hindari file sementara dengan menggemakan string multiline dan memipangnya:
echo -e "setf 7\nsetb 1" | tput -S # set fg white and bg red
man 1 tput
man 5 terminfo
untuk daftar lengkap perintah dan detail lebih lanjut tentang opsi ini. (Perintah tput
yang sesuai tercantum di kolom Cap-name
pada tabel besar yang dimulai pada baris 81.)# 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 |
| | | | | |
Jika Anda akan menggunakan kode ini di variabel bash khusus
anda harus menambahkan karakter pelarian tambahan agar bash dapat menafsirkannya dengan benar. Tanpa menambahkan karakter pelarian tambahan ini berfungsi, tetapi Anda akan menghadapi masalah ketika Anda menggunakan Ctrl + r
untuk pencarian dalam riwayat Anda.
Anda harus menambahkan \[
sebelum memulai kode ANSI dan menambahkan \]
setelah yang berakhir.
Contoh:
dalam penggunaan reguler: \033[32mThis is in green\033[0m
untuk PS0/1/2/4: \[\033[32m\]This is in green\[\033[m\]
\[
adalah untuk memulai urutan tidak dapat dicetak karakter\]
adalah untuk akhir dari urutan tidak dapat dicetak karakter
Kiat: untuk menghafalnya, pertama-tama Anda dapat menambahkan \[\]
dan kemudian memasukkan kode ANSI Anda di antaranya:
- \[start-ANSI-code\]
- \[end-ANSI-code\]
Sebelum menyelam ke warna-warna ini, Anda harus tahu tentang 4 mode dengan kode-kode ini:
Ini memodifikasi gaya warna BUKAN teks. Misalnya membuat warna cerah atau lebih gelap.
0
ulang1;
lebih ringan dari biasanya2;
lebih gelap dari biasanyaMode ini tidak didukung secara luas. Ini sepenuhnya mendukung pada Gnome-Terminal.
Mode ini untuk memodifikasi gaya teks BUKAN warna.
3;
italic4;
menggarisbawahi5;
berkedip (lambat)6;
berkedip (cepat)7;
mundur8;
sembunyikan9;
dicoretdan hampir didukung.
Misalnya, KDE-Konsole mendukung 5;
tetapi Gnome-Terminal tidak dan Gnome mendukung 8;
tetapi KDE tidak.
Mode ini untuk mewarnai latar depan.
Mode ini untuk mewarnai latar belakang.
Tabel di bawah ini menunjukkan ringkasan dari 3/4 bit versi ANSI-color
|------------+----------+---------+-------+------------------+------------------------------+--------------------------------------|
| 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 | |
|------------+----------+---------+-------+------------------+------------------------------+--------------------------------------|
Tabel di bawah ini menunjukkan ringkasan dari 8 bit versi ANSI-color
|------------+-----------+-----------+---------+------------------+------------------------------------+-------------------------|
| 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 |
|------------+-----------+-----------+---------+------------------+------------------------------------+-------------------------|
Tes cepat 8-bit:for code in {0..255}; do echo -e "\e[38;05;${code}m $code: Test"; done
Tabel di bawah ini menunjukkan ringkasan dari 24 bit versi ANSI-color
|------------+-----------+-----------+---------+-------------+------------------------------------------+-----------------|
| 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 |
|------------+-----------+-----------+---------+-------------+------------------------------------------+-----------------|
foreground ringkasan 8-bit dalam .gif
latar belakang ringkasan 8-bit dalam .gif
blinking
di KDE-Terminal kode
C
sederhana yang menunjukkan lebih banyak kepada Anda
alat yang lebih canggih yang saya kembangkan untuk menangani warna-warna ini:
Ya kamu bisa. Saya mengalami di bash , c , c ++ , dPerl , python
Saya pikir tidak.
3/4-bit Ya, jika Anda mengkompilasi kode dengan gcc
beberapa tangkapan layar pada Win-7
\033[
= 2, bagian lain 1
Di mana saja yang memiliki penerjemah tty
xterm
, gnome-terminal
, kde-terminal
, mysql-client-CLI
dan sebagainya.
Misalnya jika Anda ingin mewarnai keluaran Anda dengan mysql Anda dapat menggunakan 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;
simpan kode ini dalam nama file: pcc
(= Perl Colorize Character) lalu masukkan file a menjadi PATH
yang valid, lalu gunakan di mana saja Anda suka.
ls | pcc
df | pcc
di dalam mysql
pertama-tama daftarkan untuk pager
dan kemudian coba:
[user2:db2] pager pcc
PAGER set to 'pcc'
[user2:db2] select * from table-name;
Itu tidakTIDAKmenangani Unicode.
Tidak, mereka dapat melakukan banyak hal menarik. Mencoba:
echo -e '\033[2K' # clear the screen and do not move the position
atau:
echo -e '\033[2J\033[u' # clear the screen and reset the position
Ada banyak pemula yang ingin menghapus layar dengan system( "clear" )
sehingga Anda dapat menggunakan ini alih-alih system(3)
panggilan
Iya nih. \u001b
Mudah menggunakan 3/4-bit
, tetapi jauh lebih akurat dan indah untuk menggunakan 24-bit
.
Jika Anda tidak memiliki pengalaman dengan html jadi inilah tutorial singkatnya:
24 bit berarti: 00000000
dan 00000000
dan 00000000
. Setiap 8-bit adalah untuk warna tertentu.24..17
adalah untuk dan
16..9
untuk dan
8..1
untuk
Jadi dalam html#FF0000
artinya dan ini dia:
255;0;0
dalam html#00FF00
artinya yang di sini adalah:
0;255;0
Apakah itu masuk akal? warna apa yang ingin Anda gabungkan dengan tiga nilai 8-bit ini.
referensi:
Wikipedia
ANSI escape sequence
tldp.org
tldp.org
misc.flogisoft.com
beberapa blog/halaman web yang tidak saya ingat
Gunakan tput
dengan kemampuan setaf
dan parameter 1
.
echo "$(tput setaf 1)Hello, world$(tput sgr0)"
echo -e "\033[31m Hello World"
[31m
mengontrol warna teks:
30
-37
set foreground color40
-47
set background colorDaftar kode warna yang lebih lengkap dapat ditemukan di sini .
Ini adalah praktik yang baik untuk mengatur ulang warna teks kembali ke \033[0m
di akhir string.
Ini adalah saklar warna \033[
. Lihat riwayat .
Warna kode seperti 1;32
(Hijau Muda), 0;34
(Biru), 1;34
(Biru Muda), dll.
Kami mengakhiri urutan warna dengan saklar warna \033[
dan 0m
, kode warna no-. Sama seperti membuka dan menutup tab dalam bahasa markup.
SWITCH="\033["
NORMAL="${SWITCH}0m"
YELLOW="${SWITCH}1;33m"
echo "${YELLOW}hello, yellow${NORMAL}"
Solusi fungsi echo
warna sederhana:
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!"
Cara yang rapi untuk mengubah warna hanya untuk satu echo
adalah dengan mendefinisikan fungsi tersebut:
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;
}
Pemakaian:
coloredEcho "This text is green" green
Atau Anda bisa langsung menggunakan kode warna yang disebutkan dalam Jawaban Drew :
coloredEcho "This text is green" 2
Gunakan tput
untuk menghitung kode warna. Hindari penggunaan kode pelarian ANSI (mis. \E[31;1m
untuk merah) karena kurang portabel. Bash di OS X, misalnya, tidak mendukungnya.
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"
Pertanyaan ini telah dijawab berulang kali :-) tetapi mengapa tidak.
Pertama menggunakan tput
lebih portabel dalam lingkungan modern daripada menyuntikkan secara manual ASCII kode melalui echo -E
Inilah fungsi bash cepat:
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"
}
Sekarang Anda dapat menggunakan:
say @[email protected][[Success]]
mendapatkan:
tput
Kode sumber tput(1)
pertama kali diunggah pada September 1986
tput(1)
telah tersedia dalam semantik kutukan X/Buka pada 1990-an (standar 1997 memiliki semantik yang disebutkan di bawah).
Jadi, ini ( cukup ) ada di mana-mana.
Saya baru saja menggabungkan tangkapan yang bagus dalam semua solusi dan berakhir dengan:
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"
}
Dan Anda bisa menyebutnya sebagai:
cecho "RED" "Helloworld"
Terima kasih kepada @ k-five untuk jawaban ini
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
Semoga ini gambar membantu Anda memilih warna untuk bash: D
Kode-kode ini bekerja pada kotak Ubuntu saya:
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"
Ini mencetak huruf a b c d semua dalam warna berbeda:
echo -e "\x1B[0;93m a \x1B[0m b \x1B[0;92m c \x1B[0;93m d \x1B[0;94m"
Untuk loop:
for (( i = 0; i < 17; i++ ));
do echo "$(tput setaf $i)This is ($i) $(tput sgr0)";
done
Jika Anda ingin meningkatkan keterbacaan dari kode, Anda dapat echo
string terlebih dahulu kemudian tambahkan warna kemudian dengan menggunakan sed
:
echo 'Hello World!' | sed $'s/World/\e[1m&\e[0m/'
Jawaban favorit saya sejauh ini berwarnaEcho.
Hanya untuk memposting opsi lain, Anda dapat memeriksa alat kecil ini xcol
https://ownyourbits.com/2017/01/23/colorize-your-stdout-with-xcol/
anda menggunakannya seperti grep, dan itu akan mewarnai stdin dengan warna yang berbeda untuk setiap argumen, misalnya
Sudo netstat -putan | xcol httpd sshd dnsmasq pulseaudio conky tor Telegram firefox "[[:digit:]]+\.[[:digit:]]+\.[[:digit:]]+\.[[:digit:]]+" ":[[:digit:]]+" "tcp." "udp." LISTEN ESTABLISHED TIME_WAIT
Perhatikan bahwa ia menerima ekspresi reguler apa pun yang akan diterima.
Alat ini menggunakan definisi berikut
#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
Saya menggunakan variabel-variabel ini dalam skrip saya seperti itu
echo "${red}hello ${yellow}this is ${green}coloured${normal}"
Untuk memperluas pada jawaban ini , untuk malas dari kita:
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"
Tidak ada yang memperhatikan kegunaan kode ANSI 7 video terbalik .
Itu tetap dapat dibaca pada setiap skema skema warna, latar belakang hitam atau putih, atau palet fantasi lainnya, dengan menukar warna foreground dan background.
Contoh, untuk latar belakang merah yang berfungsi di mana-mana:
echo -e "\033[31;7mHello world\e[0m";
Ini adalah tampilannya ketika mengubah skema bawaan terminal:
Ini adalah skrip loop yang digunakan untuk gif.
for i in {30..49};do echo -e "\033[$i;7mReversed color code $i\e[0m Hello world!";done
Lihat https://en.wikipedia.org/wiki/ANSI_escape_code#SGR_(Select_Graphic_Rendition)_parameters
Anda harus menggunakan tput di atas urutan kontrol ANSI mentah.
Karena ada sejumlah besar bahasa kontrol terminal yang berbeda, biasanya suatu sistem memiliki lapisan komunikasi perantara. Kode sebenarnya dilihat dalam database untuk tipe terminal yang saat ini terdeteksi dan Anda memberikan permintaan standar ke API atau (dari Shell) ke sebuah perintah.
Salah satu dari perintah ini adalah
tput
.tput
menerima serangkaian akronim yang disebut nama kemampuan dan parameter apa pun, jika sesuai, kemudian mencari urutan pelarian yang benar untuk terminal yang terdeteksi dalam basis data terminfo dan mencetak kode yang benar (terminal diharapkan mengerti).
dari http://wiki.bash-hackers.org/scripting/terminalcodes
Yang mengatakan, saya menulis perpustakaan pembantu kecil yang disebut bash-tint , yang menambahkan lapisan lain di atas tput, membuatnya lebih mudah untuk digunakan (imho):
Contoh: tint "white(Cyan(T)Magenta(I)Yellow(N)Black(T)) is bold(really) easy to use."
Saya telah menulis Swag untuk mencapai hal itu.
Anda bisa melakukannya
pip install Swag
Sekarang Anda dapat menginstal semua perintah pelarian sebagai file txt ke tujuan tertentu melalui:
Swag install -d <colorsdir>
Atau bahkan lebih mudah melalui:
Swag install
Yang akan menginstal warna ke ~/.colors
.
Anda bisa menggunakannya seperti ini:
echo $(cat ~/.colors/blue.txt) This will be blue
Atau dengan cara ini, yang menurut saya lebih menarik:
Swag print -c red -t underline "I will turn red and be underlined"
Lihat di asciinema !
Dan ini yang saya gunakan untuk melihat semua kombinasi dan memutuskan yang berbunyi keren:
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
Berikut ini adalah skrip kecil sederhana, yang saya kumpulkan baru-baru ini, yang akan mewarnai setiap input pipa daripada menggunakan "Toilet".
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
Kemudian menyebutnya dengan warna merah (196):$> echo "text you want colored red" | color.bsh 196
Mengacu pada:
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"
}