Saya mencoba untuk mencetak teks di terminal menggunakan perintah gema.
Saya ingin mencetak teks dalam warna merah. Bagaimana saya bisa melakukan itu?
linux
bash
command-line
echo
terminal-color
satheesh.droid
sumber
sumber
Jawaban:
Anda dapat menggunakan kode pelarian ANSI ini :
Dan kemudian gunakan seperti ini di skrip Anda:
yang dicetak
love
merah.Dari komentar @ james-lim, jika Anda menggunakan
echo
perintah, pastikan untuk menggunakan flag -e untuk memungkinkan backslash lolos .(jangan tambahkan
"\n"
saat menggunakan gema kecuali Anda ingin menambahkan baris kosong tambahan)sumber
\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.Pemakaian
Spesifik
tput
sub-perintah dibahas kemudian.Langsung
Panggil
tput
sebagai bagian dari urutan perintah:Gunakan
;
alih-alih&&
jikatput
kesalahan teks masih muncul.Variabel shell
Pilihan lain adalah menggunakan variabel shell:
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.Substitusi perintah
Mungkin lebih nyaman untuk memasukkan
tput
output langsung keecho
string Anda menggunakan substitusi perintah :Contoh
Perintah di atas menghasilkan ini di Ubuntu:
Perintah warna latar depan & latar belakang
Warna adalah sebagai berikut:
Ada juga versi non-ANSI dari fungsi pengaturan warna (
setb
bukansetab
, dansetf
bukannyasetaf
) yang menggunakan angka yang berbeda, tidak diberikan di sini.Perintah mode teks
Perintah pergerakan kursor
Hapus dan masukkan perintah
Perintah lainnya
Dengan compiz windows wobbly ,
bel
perintah membuat terminal bergetar sejenak untuk menarik perhatian pengguna.Skrip
tput
menerima skrip yang berisi satu perintah per baris, yang dieksekusi secara berurutan sebelumtput
keluar.Hindari file sementara dengan menggemakan string multiline dan memipangnya:
Lihat juga
man 1 tput
man 5 terminfo
daftar lengkap perintah dan detail lebih lanjut tentang opsi ini. (tput
Perintah yang sesuai tercantum diCap-name
kolom tabel besar yang dimulai pada baris 81.)sumber
$()
adalah substitusi perintah . Yangtput af 1
dilakukan adalah menghasilkan string kode warna, tetapi kode tersebut bukan karakter yang dapat dicetak, jadi pengetikantput af 1
saja akan menghasilkan garis output kosong.ncurses
tput
warna yang lengkap, periksa jawaban ini di Unix StackExchangereset=`tput sgr0`
harusreset=`tput sgr 0`
, dengan spasi.beberapa variabel yang dapat Anda gunakan:
karakter pelarian masing-masing dalam bash , hex dan oktal :
contoh singkat:
kecuali bash:
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.aturan pengecualian untuk bash
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 dicetakKiat: untuk menghafalnya, pertama-tama Anda dapat menambahkan
\[\]
dan kemudian memasukkan kode ANSI Anda di antara mereka:-
\[start-ANSI-code\]
-
\[end-ANSI-code\]
jenis urutan warna:
Sebelum menyelam ke warna-warna ini, Anda harus tahu tentang 4 mode dengan kode-kode ini:
1. mode warna
Ini memodifikasi gaya warna BUKAN teks. Misalnya membuat warna cerah atau lebih gelap.
0
atur ulang1;
lebih ringan dari biasanya2;
lebih gelap dari biasanyaMode ini tidak didukung secara luas. Ini sepenuhnya mendukung pada Gnome-Terminal.
2. mode teks
Mode ini untuk memodifikasi gaya teks BUKAN warna.
3;
miring4;
menggarisbawahi5;
berkedip (lambat)6;
berkedip (cepat)7;
balik8;
menyembunyikan9;
mencoret-coretdan hampir didukung.
Misalnya, KDE-Konsole mendukung
5;
tetapi Gnome-Terminal tidak dan Gnome mendukung8;
tetapi KDE tidak.3. mode latar depan
Mode ini untuk mewarnai latar depan.
4. mode latar belakang
Mode ini untuk mewarnai latar belakang.
Tabel di bawah ini menunjukkan ringkasan versi 3/4 bit ANSI-color
Tabel di bawah ini menunjukkan ringkasan versi 8-bit warna ANSI
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
beberapa tangkapan layar
foreground 8-bit ringkasan dalam
.gif
latar belakang ringkasan 8-bit di a
.gif
ringkasan warna dengan nilainya
blinking
di KDE-TerminalC
kode sederhana yang menunjukkan lebih banyak kepada Andaalat yang lebih maju yang saya kembangkan untuk menangani warna-warna ini:
bidikan mode warna
bidikan mode teks
menggabungkan tidak apa-apa
lebih banyak tembakan
Kiat dan Trik untuk Pengguna dan Pemrogram Lanjut:
Bisakah kita menggunakan kode ini dalam bahasa pemrograman?
Ya kamu bisa. Saya mengalaminyapesta, c, c ++, d perl, ular sanca
Apakah mereka memperlambat kecepatan suatu program?
Saya pikir tidak.
Bisakah kita menggunakan ini di Windows?
3/4-bit Ya, jika Anda mengkompilasi kode dengan
gcc
beberapa screenshot di Win-7
Bagaimana cara menghitung panjang kode?
\033[
= 2, bagian lain 1Di mana kita bisa menggunakan kode-kode ini?
Mana saja yang memiliki
tty
interpreterxterm
,gnome-terminal
,kde-terminal
,mysql-client-CLI
dan sebagainya.Misalnya jika Anda ingin mewarnai output Anda dengan mysql, Anda dapat menggunakannya
Perl
simpan kode ini dalam nama file:
pcc
(= Perl Colorize Character) lalu masukkan file a validPATH
lalu gunakan di mana pun Anda suka.ls | pcc
df | pcc
di dalam
mysql
pertama daftarkan untukpager
dan kemudian coba:Ini TIDAK menangani Unicode.
Apakah kode-kode ini hanya mewarnai?
Tidak, mereka dapat melakukan banyak hal menarik. Mencoba:
atau:
Ada banyak pemula yang ingin menghapus layar
system( "clear" )
sehingga Anda dapat menggunakan ini alih-alihsystem(3)
panggilanApakah mereka tersedia di Unicode?
Iya.
\u001b
Versi warna apa yang lebih disukai?
Mudah digunakan
3/4-bit
, tetapi jauh lebih akurat dan indah untuk digunakan24-bit
.Jika Anda tidak memiliki pengalaman denganhtmljadi di sini adalah tutorial singkat:
24 bit berarti:
00000000
dan00000000
dan00000000
. Setiap 8-bit adalah untuk warna tertentu.1..8
adalah untuk dan9..16
untuk dan17..24
untukJadi 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
sumber
x1B[
untuk menghilangkannya.Gunakan
tput
dengansetaf
kemampuan dan parameter1
.sumber
\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)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.sumber
Saya baru saja menggabungkan tangkapan yang bagus dalam semua solusi dan berakhir dengan:
Dan Anda bisa menyebutnya sebagai:
sumber
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[
dan0m
, kode no -color. Sama seperti membuka dan menutup tab dalam bahasa markup.echo
Solusi fungsi warna sederhana :sumber
text
variabel terakhir dengantext="$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:Pemakaian:
Atau Anda bisa langsung menggunakan kode warna yang disebutkan dalam jawaban Drew :
sumber
-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.sumber
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:
Sekarang Anda dapat menggunakan:
mendapatkan:
Catatan tentang portabilitas
tput
tput(1)
Kode sumber pertama kali diunggah pada September 1986tput(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.
sumber
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
Hasil
Semoga gambar ini membantu Anda memilih warna untuk bash Anda: D
sumber
Jika Anda menggunakan
zsh
ataubash
Coba online
sumber
Kita dapat menggunakan 24 bit warna sejati RGB untuk teks dan latar belakang!
Contoh teks merah dan tag penutup:
Generator:
Tampilkan cuplikan kode
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:
Ini adalah tampilannya ketika mengubah skema bawaan terminal:
Ini adalah skrip loop yang digunakan untuk gif.
Lihat https://en.wikipedia.org/wiki/ANSI_escape_code#SGR_(Pilih_Graphic_Rendition)_parameters
sumber
Kode-kode ini bekerja pada kotak Ubuntu saya:
Ini mencetak huruf abcd semua dalam berbagai warna:
Untuk loop:
sumber
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 dalamecho -e
atauprintf
Contoh:
sumber
Agar mudah dibaca
Jika Anda ingin meningkatkan keterbacaan kode, Anda dapat
echo
menambahkan string terlebih dahulu kemudian menambahkan warna dengan menggunakansed
:sumber
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
Perhatikan bahwa ia menerima ekspresi reguler apa pun yang akan diterima.
Alat ini menggunakan definisi berikut
Saya menggunakan variabel-variabel ini dalam skrip saya seperti itu
sumber
Untuk memperluas jawaban ini , bagi malas kita:
sumber
tput
; itu untuk apa!tput
untuksc
danrc
(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:
sumber
Anda harus menggunakan tput di atas urutan kontrol ANSI mentah.
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."
Akan memberikan hasil sebagai berikut:
sumber
Saya bukannya mengkodekan kode pelarian yang khusus untuk terminal Anda saat ini, sebaiknya Anda gunakan
tput
.Ini adalah skrip demo favorit saya:
sumber
Saya menggunakan ini untuk pencetakan warna
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.
sumber
Dan ini yang saya gunakan untuk melihat semua kombinasi dan memutuskan yang berbunyi keren:
sumber
Saya sudah menulis barang curian untuk mencapai hal itu.
Anda bisa melakukannya
Sekarang Anda dapat menginstal semua perintah escape sebagai file txt ke tujuan tertentu melalui:
Atau bahkan lebih mudah melalui:
Yang akan menginstal warna
~/.colors
.Anda bisa menggunakannya seperti ini:
Atau dengan cara ini, yang menurut saya lebih menarik:
Lihat di asciinema !
sumber
Berikut ini adalah skrip kecil sederhana, yang saya kumpulkan baru-baru ini, yang akan mewarnai setiap input pipa daripada menggunakan "Toilet".
File: color.bsh
Kemudian menyebutnya dengan warna merah (196):
$> echo "text you want colored red" | color.bsh 196
sumber
Mengacu pada:
sumber
Ini adalah solusi paling sederhana dan mudah dibaca. Dengan bashj ( https://sourceforge.net/projects/bashj/ ), Anda cukup memilih salah satu dari baris ini:
256x256x256
warna tersedia jika Anda memiliki dukungan warna dalam aplikasi terminal Anda.sumber
setelah mencampurkan solusi lain dari utas, inilah cara saya berhasil mendapatkan warna dalam
npm scripts
keluaran (gitbash CLI):sumber
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:
sumber
Jawaban ini benar, kecuali bahwa panggilan untuk warna tidak boleh berada di dalam tanda kutip.
Sebaiknya lakukan triknya.
sumber
echo -e '\e[0;31mHello Stackoverflow\e[0m'
. Jadi sama saja untuk bash.