Itu adalah urutan pelarian ANSI ; tautan itu adalah bagan kode warna tetapi ada hal-hal menarik lainnya pada halaman Wikipedia itu juga. Tidak semuanya bekerja pada (misalnya) konsol Linux normal.
Ini salah:
\033]00m\] # white
0
me-reset terminal ke default-nya (yang mungkin putih). Kode aktual untuk foreground putih adalah 37. Juga, tanda kurung tutup yang keluar di akhir ( \]
) bukan bagian dari urutan warna (lihat beberapa paragraf terakhir di bawah ini untuk penjelasan tujuan mereka dalam mengatur prompt).
Perhatikan bahwa beberapa terminal GUI memungkinkan Anda menentukan skema warna yang disesuaikan. Ini akan mempengaruhi output.
Ada daftar di sini yang menambahkan 7 warna latar depan dan 7 warna latar belakang yang belum pernah saya lihat sebelumnya, tetapi tampaknya berhasil:
# Foreground colors
90 Dark gray
91 Light red
92 Light green
93 Light yellow
94 Light blue
95 Light magenta
96 Light cyan
# Background colors
100 Dark gray
101 Light red
102 Light green
103 Light yellow
104 Light blue
105 Light magenta
106 Light cyan
Selain itu, jika Anda memiliki terminal GUI 256 warna (saya pikir sebagian besar dari mereka sekarang), Anda dapat menerapkan warna dari grafik ini:
Urutan ANSI untuk memilih ini, menggunakan nomor di sudut kiri bawah, dimulai 38;5;
untuk latar depan dan 48;5;
latar belakang, kemudian nomor warna, jadi mis:
echo -e "\\033[48;5;95;38;5;214mhello world\\033[0m"
Memberi saya oranye terang pada cokelat (artinya, bagan warna kira-kira kira-kira).
Anda dapat melihat warna pada bagan 1 ini seperti yang akan muncul di terminal Anda dengan cukup mudah:
#!/bin/bash
color=16;
while [ $color -lt 245 ]; do
echo -e "$color: \\033[38;5;${color}mhello\\033[48;5;${color}mworld\\033[0m"
((color++));
done
Outputnya cukup jelas.
Beberapa sistem mengatur variabel $ TERM ke xterm-256color
jika Anda berada di terminal 256 warna melalui beberapa kode shell /etc/profile
. Pada yang lain, Anda harus dapat mengkonfigurasi terminal Anda untuk menggunakan ini. Itu akan membuat aplikasi TUI tahu ada 256 warna, dan memungkinkan Anda untuk menambahkan sesuatu seperti ini ke ~/.bashrc
:
if [[ "$TERM" =~ 256color ]]; then
PS1="MyCrazyPrompt..."
fi
Berhati-hatilah bahwa ketika Anda menggunakan urutan pelarian warna di prompt Anda, Anda harus melampirkannya dalam \
tanda kurung kotak yang lolos ( diawali), seperti ini:
PS1="\[\033[01;32m\]MyPrompt: \[\033[0m\]"
Perhatikan [
interior untuk urutan warna tidak lolos, tetapi yang melampirkan. Tujuan dari yang terakhir adalah untuk menunjukkan kepada shell bahwa urutan terlampir tidak dihitung terhadap panjang karakter prompt. Jika hitungan itu salah, hal-hal aneh akan terjadi ketika Anda menggulir kembali ke sepanjang sejarah, misalnya, jika terlalu panjang, panjang kelebihan dari string yang digulir terakhir akan muncul melekat pada prompt Anda dan Anda tidak akan dapat mundur ke itu (itu diabaikan dengan cara yang sama prompt adalah).
Perhatikan juga bahwa jika Anda ingin menyertakan output dari perintah yang dijalankan setiap kali prompt digunakan (bukan hanya sekali ketika prompt diatur), Anda harus mengaturnya sebagai string literal dengan tanda kutip tunggal, misalnya:
PS1='\[\033[01;32m\]$(date): \[\033[0m\]'
Meskipun ini bukan contoh yang bagus jika Anda senang menggunakan bash's special \d
atau \D{format}
prompt escape - yang bukan topik pertanyaan tetapi dapat ditemukan di man bash
bawah PROMPTING
. Ada berbagai pelarian berguna lainnya seperti \w
untuk direktori saat ini, \u
untuk pengguna saat ini, dll.
1. Bagian utama dari bagan ini, warna 16 - 231 (perhatikan bahwa jumlahnya tidak berurutan) adalah kubus warna 6 x 6 x 6 RGB. "Color cube" mengacu pada fakta bahwa ruang warna RGB dapat direpresentasikan menggunakan array tiga dimensi (dengan satu sumbu untuk merah, satu untuk hijau, dan satu untuk biru). Setiap warna dalam kubus di sini dapat direpresentasikan sebagai koordinat dalam array 6 x 6 x 6, dan indeks dalam grafik dihitung sebagai berikut:
16 + R * 36 + G * 6 + B
Warna pertama dalam kubus, pada indeks 16 dalam bagan, adalah hitam (RGB 0, 0, 0). Anda bisa menggunakan rumus ini dalam skrip shell:
#!/bin/sh
function RGBcolor {
echo "16 + $1 * 36 + $2 * 6 + $3" | bc
}
fg=$(RGBcolor 1 0 2) # Violet
bg=$(RGBcolor 5 3 0) # Bright orange.
echo -e "\\033[1;38;5;$fg;48;5;${bg}mviolet on tangerine\\033[0m"
\]
sini sebenarnya bukan bagian dari urutan warna; itu melayani tujuan dalam pengaturan meminta secara khusus (saya telah menambahkan beberapa paragraf di akhir jawaban saya tentang ini). "Akan lebih baik jika ada bentuk yang lebih mudah dibaca juga." -> cut n 'paste dalam jawaban Anda sendiri adalah salah satu cara untuk melakukan ini.