Urutan escape ANSI terdiri dari urutan karakter yang dimulai dengan karakter Escape, karakter 27. Karakter berikutnya sering (meskipun tidak selalu) merupakan kurung siku-siku: [
Perintah echo dapat mengirim karakter escape jika Anda menentukan -e
dan menggunakannya \e
untuk escape.
Standar ANSI mendefinisikan 8 warna, ditambah mode cerah, memberikan total 16 kemungkinan. Urutannya adalah:
\e[<number>m
Di mana <number>
salah satu dari:
Latar depan:
- 30 Hitam
- 31 Merah
- 32 Hijau
- 33 Kuning
- 34 Biru
- 35 Magenta
- 36 Cyan
- 37 Putih
Latar Belakang:
- 40 Hitam
- 41 Merah
- 42 Hijau
- 43 Kuning
- 44 Biru
- 45 Magenta
- 46 Cyan
47 Putih
0 Setel ulang semua
- 1 Tebal
Jadi untuk membuat latar depan Anda merah dan latar belakang Anda kuning:
$ echo -e "\e[31m\e[43m"
Dan untuk mengaktifkan huruf tebal:
$ echo -e "\e[1m"
Tentu saja, Anda dapat menggabungkan semuanya:
$ echo -e "\e[31m\e[43m\e[1m"
Ada banyak kode pelarian lainnya untuk melakukan hal-hal lain.
Misalnya - hapus layar dan gerakkan kursor ke kiri atas:
$ echo -e "\e[2J\e[1;1H"
Yang berguna saat mengganti warna:
$ echo -e "\e[31m\e[43m\e[1m\e[2J\e[1;1H"
Yang akan mengubah warna, menghapus layar, dan meletakkan kursor di kiri atas. Yah, hampir kiri atas. Echo mengembalikan kereta, sehingga bergerak turun garis. Anda dapat menambahkan -n
gema untuk mencegah hal ini jika Anda cerewet.
Jika Anda mengacaukan semuanya dan tidak dapat melihat apa yang Anda ketikkan, Anda dapat mengatur ulang warna terminal menjadi normal dengan menekan:
Ctrl+v
[
0
m
Return
Apa yang Anda harapkan adalah command prompt. Ini akan mengomel tentang perintah yang tidak dikenal, tetapi Anda akan dapat melihat apa yang Anda lakukan lagi.
echo -ne '\e[31;43m'
(bukan yang di atasecho -e "\e[31m\e[43m"
).Perhatikan bahwa Xterms modern mendukung warna 32-bit!
Contoh sederhana. Untuk menetapkan latar belakang ungu tua yang bagus (hei, masing-masing ke miliknya) dengan nilai # 53186f, Anda harus:
Perhatikan bahwa ini secara instan mengubah warna seluruh jendela, bukan hanya teks berikutnya. Ini terutama bagus untuk membuat jendela yang jelas berbeda setelah ssh'ing ke server (misalnya). Masukkan 'echo' di atas ke dalam .bashrc Anda dan terminal Anda secara otomatis berubah warna ketika Anda masuk ke server itu (tetapi tidak akan berubah kembali ketika Anda Ctrl-D keluar)
Anda dapat menghabiskan JAM di internet mencari ini - sebagian besar dokumen hanya berbicara tentang 16 warna ANSI asli.
Sumber: http://www.steike.com/code/xterm-colors/ dan http://rtfm.etla.org/xterm/ctlseq.html (lihat di bawah "Kontrol Sistem Operasi")
Harap dicatat: urutan pelarian di atas berlaku untuk XTerms, dan mungkin tidak berfungsi untuk implementasi lain dari emulator terminal windowing "seperti XTerm yang mungkin" terlihat "seperti XTerm. Misalnya, "gnome-terminal" atau "konsole" memiliki urutan escape yang berbeda, atau mungkin tidak menerapkan perubahan warna sama sekali.
sumber
Iya nih. Terminal ANSI mendukung Kode Escape ANSI . Masing-masing
Control Sequence Introducer
(CSI
) Kode dalam format berikut:Karakter Ascii
27
(ESC
karakter) atau1b
dalam heksadesimal, diikuti oleh tanda kurung siku kiri, dan kemudian sebuah surat yang menunjukkan tindakan yang akan digunakan.Perhatikan bahwa daftar
;
parameter yang terpisah dapat diberikan secara langsung sebelum<<<CODE>>>
parameter.Sekarang, warna menggunakan subset
CSI
kode,Select Graphic Rendition
kode. Ini dalam bentuk:The
SGR
kode dilewatkan sebagai parameterCSI
. Yang relevan dengan pertanyaan Anda adalahSGR
kode 30-49. Kode 30-39 mengatur warna latar depan. Kode 40-49 mengatur warna latar belakang.Kode 38 dan 48 adalah kode khusus. Ini adalah yang memungkinkan Anda untuk menggunakan nilai RGB. Format untuk ini adalah:
Catatan: penggunaan alternatif termasuk
\x1b[<3 or 4>8;5;<web safe color index>m
. Dengan penggunaan ini, ada penyandian warna yang sangat berbeda. Lihat tautan di bagian atas jawaban ini untuk informasi lebih lanjut.Kode 39 dan 49 mengatur warna foreground dan background menjadi default, yang didefinisikan berdasarkan terminal-per-terminal.
Dalam praktiknya, warna 30-37 40-47 sedikit berbeda dari apa yang label mereka katakan.
Untuk mendapatkan warna terang, Anda menggunakan SGI untuk cetak tebal
1
,. Bold adalah nama yang menyesatkan. Itu tidak membuat font menjadi tebal. Ini sebenarnya meningkatkan kecerahan teks. Dengan berani diterapkan warna menjadi:Perhatikan: dua blok terakhir dari nomor warna relevan untuk latar depan dan belakang (
<index> + (30 or 40)
).Untuk menghapus semua gaya (kembali ke mode default / normal) gunakan
SGR
0.CSI
kode tidak semuanya grafis. Misalnya,ESC[2J
akan menghapus terminal Anda.ESC[<y>;<x>H
mengatur posisi kursor (1-diindeks). Lihat artikel wikipedia untuk informasi lebih lanjut.Catatan: untuk menguji ini, gunakan
echo -e
atauprintf
.sumber
CATATAN: "^ [" adalah karakter pelarian, dan disisipkan dengan CTRL-V, CTRL- [, dan ^ G adalah karakter bel, dimasukkan dengan CTRL-V, CTRL-G
Blok berikut ada di .bash_profile saya dan memastikan bahwa xterms saya pada sistem ini SELALU putih-hitam, bahkan setelah masuk ke sistem lain yang mungkin telah mengubah warna saya.
sumber
periksa juga proyek ScriptEchoColor
itu benar-benar dibuat dalam skrip bash
ia memiliki paket untuk ubuntu di sini
tetapi skrip ini dapat diinstal pada distro apa pun jika Anda tahu caranya (terbaru dapat diunduh dari gitnya juga).
Anda dapat menggunakan nama warna yang diperpendek atau diperluas seperti:
sebuah sampel:
Juga, pastikan untuk melihat xtermcontrol , untuk kontrol yang lebih luas atas xterm dengan sendirinya (tidak hanya karakter).
sumber
Di antara banyak kode ANSI CSI adalah yang disebut SGR, atau Select Graphic Rendition. Ini adalah ESC,,
[
parameter,, dim
mana parameternya adalah satu atau lebih bilangan bulat dalam format ASCII, dipisahkan oleh titik koma. Banyak parameter SGR yang berbeda tercantum pada halaman Wikipedia di atas (meskipun tidak masuk ke detail lengkap untuk semuanya).Beberapa parameter, seperti
1
(tebal atau peningkatan intensitas) dan31
(teks merah) berdiri sendiri, dan dapat digunakan secara individual atau gabungan, seperti dalamESC[31m
atauESC[1;31m
untuk memberikan teks standar foreground merah dan tebal, secara berurutan.Lainnya mengambil parameter sendiri, yang hanya disediakan setelah kode sebagai angka yang lebih dipisahkan koma. Jadi, misalnya,
ESC[38;5;219m
akan menampilkan teks latar depan dalam nomor warna diperluas 219, danESC[38;2;150;100;50m
akan menampilkannya dalam warna dengan nilai RGB 150, 100, 50. Dalam hal ini,38
adalah perintah "extended set foreground color", yang selalu diikuti oleh sebuah perintah tambahan. Subcommand2
mengambil tiga parameter, nilai-nilai komponen merah, hijau dan biru. Secara berbeda, subperintah5
hanya mengambil satu nilai lagi, angka dari 0 hingga 255 yang menentukan warna dari tabel yang dikonfigurasikan dengan terminal.Fungsi shell berikut dapat berguna untuk menggunakan kode-kode ini:
Anda bisa menggunakannya seperti ini:
Perhatikan bahwa jika Anda tidak memberikan parameter ke
sgr()
default untuk kode SGR 0, yang berarti untuk mematikan semua atribut, mengatur ulang teks ke apa pun default untuk terminal itu.sumber
ESC[38
...m
danESC[38
...m
bisa / harus (tergantung pada sumber informasi Anda - yang paling utama, saya percaya, itu.int/rec/T-REC-T.416-199303-I ) harus menggunakan, jika tidak disediakan, karakter:
(untuk memisahkan elemen parameter ) sehingga;
hanya digunakan di antara string parameter lengkap - yaituESC[38;2;150;100;50m
harus ditulisESC[38:2::150:100:50m
...2
dan150
- karena tidak ada seorang pun, yang saya ketahui , pernah mendefinisikan nilai apa yang harus dimasukkan ke sana default kosong yang akan digunakan - tetapi sering dilewatkan dan menggunakan hanya;
sebagai pemisah membuatnya tidak mungkin untuk memproses informasi sesuai dengan spesifikasi.