Saya mencoba untuk mencetak teks di terminal menggunakan perintah gema.
Saya ingin mencetak teks dalam warna merah. Bagaimana saya bisa melakukan itu?
Saya mencoba untuk mencetak teks di terminal menggunakan perintah gema.
Saya ingin mencetak teks dalam warna merah. Bagaimana saya bisa melakukan itu?
Jawaban:
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 dicetak love
merah.
Dari komentar @ james-lim, jika Anda menggunakan echo
perintah, pastikan untuk menggunakan flag -e untuk memungkinkan backslash lolos .
# Continued from above example
echo -e "I ${RED}love${NC} Stack Overflow"
(jangan tambahkan "\n"
saat menggunakan gema kecuali Anda ingin menambahkan baris kosong tambahan)
\e[0;31mHello Stackoverflow\e[0m
echo
untuk mengaktifkan backslash lolos.
\x1B
bukan \e
. \033
akan ok untuk semua platform.
for (( i = 30; i < 38; i++ )); do echo -e "\033[0;"$i"m Normal: (0;$i); \033[1;"$i"m Light: (1;$i)"; done
Anda dapat menggunakan tput
perintah luar biasa (disarankan dalam jawaban Ignacio ) untuk menghasilkan kode kontrol terminal untuk semua jenis hal.
Spesifik tput
sub-perintah dibahas kemudian.
Panggil tput
sebagai bagian dari urutan perintah:
tput setaf 1; echo "this is red text"
Gunakan ;
alih-alih &&
jika tput
kesalahan teks masih muncul.
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 nyaman untuk memasukkan tput
output langsung ke echo
string 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
bukan setab
, dan setf
bukannya setaf
) yang menggunakan angka yang 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 windows wobbly , bel
perintah membuat terminal bergetar sejenak 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
daftar lengkap perintah dan detail lebih lanjut tentang opsi ini. ( tput
Perintah yang sesuai tercantum di Cap-name
kolom tabel besar yang dimulai pada baris 81.)$()
adalah substitusi perintah . Yang tput af 1
dilakukan adalah menghasilkan string kode warna, tetapi kode tersebut bukan karakter yang dapat dicetak, jadi pengetikan tput af 1
saja akan menghasilkan garis output kosong.
ncurses
tput
warna yang lengkap, periksa jawaban ini di Unix StackExchange
reset=`tput sgr0`
harus reset=`tput sgr 0`
, dengan spasi.
# 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 dalam variabel bash khusus Anda
Anda harus menambahkan karakter pelarian tambahan sehingga pestadapat menafsirkannya dengan benar. Tanpa ini menambahkan karakter pelarian tambahan itu berfungsi tetapi Anda akan menghadapi masalah ketika Anda digunakan Ctrl + r
untuk pencarian dalam sejarah 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 karakter yang tidak dapat dicetak
\]
adalah untuk akhir urutan karakter yang tidak dapat dicetak
Kiat: untuk menghafalnya, pertama-tama Anda dapat menambahkan \[\]
dan kemudian memasukkan kode ANSI Anda di antara mereka:
- \[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
atur ulang 1;
lebih ringan dari biasanya 2;
lebih gelap dari biasanya Mode ini tidak didukung secara luas. Ini sepenuhnya mendukung pada Gnome-Terminal.
Mode ini untuk memodifikasi gaya teks BUKAN warna.
3;
miring 4;
menggarisbawahi 5;
berkedip (lambat)6;
berkedip (cepat)7;
balik 8;
menyembunyikan 9;
mencoret-coret dan 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 versi 3/4 bit 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[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 | |
|------------+----------+---------+-------+------------------+------------------------------+--------------------------------------|
Tabel di bawah ini menunjukkan ringkasan versi 8-bit warna ANSI
|------------+-----------+-----------+---------+------------------+------------------------------------+-------------------------|
| 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 versi 24-bit warna ANSI
|------------+-----------+-----------+---------+-------------+------------------------------------------+-----------------|
| 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 8-bit ringkasan dalam .gif
latar belakang ringkasan 8-bit di a .gif
blinking
di KDE-Terminal
C
kode sederhana yang menunjukkan lebih banyak kepada Anda
alat yang lebih maju yang saya kembangkan untuk menangani warna-warna ini:
Ya kamu bisa. Saya mengalaminyapesta, c, c ++, d perl, ular sanca
Saya pikir tidak.
3/4-bit Ya, jika Anda mengkompilasi kode dengan gcc
beberapa screenshot di Win-7
\033[
= 2, bagian lain 1
Mana saja yang memiliki tty
interpreter
xterm
, gnome-terminal
, kde-terminal
, mysql-client-CLI
dan sebagainya.
Misalnya jika Anda ingin mewarnai output Anda dengan mysql, Anda dapat menggunakannyaPerl
#!/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 valid PATH
lalu gunakan di mana pun Anda suka.
ls | pcc
df | pcc
di dalam mysql
pertama daftarkan untuk pager
dan kemudian coba:
[user2:db2] pager pcc
PAGER set to 'pcc'
[user2:db2] select * from table-name;
Ini TIDAK menangani 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 system( "clear" )
sehingga Anda dapat menggunakan ini alih-alih system(3)
panggilan
Iya. \u001b
Mudah digunakan 3/4-bit
, tetapi jauh lebih akurat dan indah untuk digunakan 24-bit
.
Jika Anda tidak memiliki pengalaman denganhtmljadi di sini adalah tutorial singkat:
24 bit berarti: 00000000
dan 00000000
dan 00000000
. Setiap 8-bit adalah untuk warna tertentu.
1..8
adalah untuk dan 9..16
untuk dan 17..24
untuk
Jadi dihtml #FF0000
berarti dan ini dia: 255;0;0
dihtml #00FF00
berarti 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 saya tidak ingat
x1B[
untuk menghilangkannya.
Gunakan tput
dengan setaf
kemampuan dan parameter 1
.
echo "$(tput setaf 1)Hello, world$(tput sgr0)"
\033[31m
akan memecah perpustakaan readline di beberapa terminal.
i
batas atas untuk lebih banyak nuansa):for (( i = 0; i < 17; i++ )); do echo "$(tput setaf $i)This is ($i) $(tput sgr0)"; done
tput: command not found
(di alpine)
echo -e "\033[31m Hello World"
The [31m
mengontrol warna teks:
30
- 37
mengatur warna latar depan40
- 47
mengatur warna latar belakangDaftar 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.
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"
Ini adalah saklar warna \033[
. Lihat sejarah .
Kode warna seperti 1;32
(Hijau Muda), 0;34
(Biru), 1;34
(Biru Muda), dll.
Kami mengakhiri urutan warna dengan saklar warna \033[
dan 0m
, kode no -color. Sama seperti membuka dan menutup tab dalam bahasa markup.
SWITCH="\033["
NORMAL="${SWITCH}0m"
YELLOW="${SWITCH}1;33m"
echo "${YELLOW}hello, yellow${NORMAL}"
echo
Solusi fungsi 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!"
text
variabel terakhir dengan text="$color${@: 2}${code}0m"
cara ini seluruh baris kecuali parameter warna akan berwarna.
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
-n
ke gema maka Anda dapat menggunakannya sebagai pewarnaan inlineecho "Red `coloredEcho "fox" red` jumps over the lazy dog"
Gunakan tput
untuk menghitung kode warna. Hindari menggunakan kode melarikan diri ANSI (misalnya \E[31;1m
untuk merah) karena kurang portabel. Bash pada 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.
Penggunaan pertama tput
lebih portabel dalam lingkungan modern daripada menyuntikkan kode ASCII secara manualecho -E
Inilah fungsi bash cepat:
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"
}
Sekarang Anda dapat menggunakan:
say @b@green[[Success]]
mendapatkan:
tput
tput(1)
Kode sumber pertama kali diunggah pada September 1986
tput(1)
telah tersedia dalam semantik kutukan X / Terbuka pada 1990-an (standar 1997 memiliki semantik yang disebutkan di bawah).
Jadi, ini ( cukup ) ada di mana-mana.
tput
? Apakah tersedia di sebagian besar server di mana seseorang tidak memiliki hak admin untuk menginstalnya? Apakah Anda memiliki tautan ke tempat teknik ini pertama kali 'ditemukan'?
$PS1
tanpa memutar bagian yang tidak berjarak \[...\]
? Terus menggunakan penanda Bash PS1 dengan string tput.
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 gambar ini membantu Anda memilih warna untuk bash Anda: D
Jika Anda menggunakan zsh
ataubash
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'
Kita dapat menggunakan 24 bit warna sejati RGB untuk teks dan latar belakang!
ESC[38;2;⟨r⟩;⟨g⟩;⟨b⟩m /*Foreground color*/
ESC[48;2;⟨r⟩;⟨g⟩;⟨b⟩m /*Background color*/
Contoh teks merah dan tag penutup:
echo -e "\e[38;2;255;0;0mHello world\e[0m"
Generator:
24-bit: Sebagai kartu grafis "true color" dengan 16 hingga 24 bit warna menjadi umum, Xterm, Konsole KDE, serta semua terminal berbasis libvte (termasuk Terminal GNOME) mendukung pengaturan warna foreground dan latar belakang 24-bit https: / /en.wikipedia.org/wiki/ANSI_escape_code#24-bit
Apakah aman untuk digunakan dalam skrip saya?
Iya! Terminal 8 dan 16 bit hanya akan ditampilkan sebagai fallback warna pada rentang palet yang tersedia, menjaga kontras terbaik, tidak ada kerusakan!
Juga, tidak ada yang memperhatikan kegunaan video ANSI kode 7 yang diputar balik .
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_(Pilih_Graphic_Rendition)_parameters
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 abcd semua dalam berbagai warna:
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
Saya menemukan jawaban luar biasa Shakiba Moshiri saat saya mencari info tentang topik itu ... lalu saya punya ide ... dan berakhir di fungsi yang cukup bagus, sangat mudah digunakan 😁
Jadi saya harus membagikannya 😉
https://github.com/ppo/bash-colors
Penggunaan: $(c <flags>)
di dalam echo -e
atauprintf
┌───────┬─────────────────┬──────────┐ ┌───────┬─────────────────┬──────────┐
│ 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 │
└───────┴─────────────────┴──────────┘
Contoh:
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."
Jika Anda ingin meningkatkan keterbacaan kode, Anda dapat echo
menambahkan string terlebih dahulu kemudian menambahkan warna 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 jawaban ini , bagi malas 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"
tput
; itu untuk apa!
tput
untuk sc
dan rc
(menyimpan kursor, mengembalikan kursor). Meskipun jawaban ini memanggil saya "malas" itu bisa ditulis ulang sebagai "praktis" atau "langsung ke titik".
untuk menampilkan keluaran pesan dengan warna berbeda, Anda dapat membuat:
echo -e "\033[31;1mYour Message\033[0m"
-Hitam 0; 30 Abu-abu Tua 1; 30
-Red 0; 31 Light Red 1; 31
-Green 0; 32 Light Green 1; 32
-Brown / Orange 0; 33 Kuning 1; 33
-Biru 0; 34 Biru Muda 1; 34
-Ungu 0; 35 Ungu Muda 1; 35
-Cyan 0; 36 Light Cyan 1; 36
-Lampu Abu-abu 0; 37 Putih 1; 37
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 mudah-mudahan 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 bukannya mengkodekan kode pelarian yang khusus untuk terminal Anda saat ini, sebaiknya Anda gunakan tput
.
Ini adalah skrip demo favorit saya:
#!/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
Saya menggunakan ini untuk pencetakan warna
#!/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[*]}"; } #|
#--------------------------------------------------------------------+
Semua warna dasar ditetapkan sebagai vars dan juga ada beberapa fungsi berguna: XY, line dan que. Sumber skrip ini di salah satu milik Anda dan gunakan semua vars dan fungsi warna.
Saya sudah menulis barang curian untuk mencapai hal itu.
Anda bisa melakukannya
pip install swag
Sekarang Anda dapat menginstal semua perintah escape sebagai file txt ke tujuan tertentu melalui:
swag install -d <colorsdir>
Atau bahkan lebih mudah melalui:
swag install
Yang akan menginstal warna ~/.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 !
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"
}
Ini adalah solusi paling sederhana dan mudah dibaca. Dengan bashj ( https://sourceforge.net/projects/bashj/ ), Anda cukup memilih salah satu dari baris ini:
#!/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
warna tersedia jika Anda memiliki dukungan warna dalam aplikasi terminal Anda.
setelah mencampurkan solusi lain dari utas, inilah cara saya berhasil mendapatkan warna dalam npm scripts
keluaran (gitbash CLI):
{
"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"
}
Sama seperti sesuatu yang sedikit di luar sana, melewati grep akan menyorotnya sebagai merah (tetapi hanya merah). Anda juga dapat menggunakan pipa bernama sehingga string Anda lebih dekat ke akhir baris:
grep '.*' --color=always <(echo "foobar")
red='\e[0;31m'
NC='\e[0m' # No Color
echo -e "${red}Hello Stackoverflow${NC}"
Jawaban ini benar, kecuali bahwa panggilan untuk warna tidak boleh berada di dalam tanda kutip.
echo -e ${red}"Hello Stackoverflow"${NC}
Sebaiknya lakukan triknya.
echo -e '\e[0;31mHello Stackoverflow\e[0m'
. Jadi sama saja untuk bash.