ini mungkin tidak mendapatkan warna "bagus" berdasarkan latar belakang, tetapi seharusnya berfungsi, dengan asumsi warna latar default selalu warna 0 :
tput setaf $(hostname | sum | awk -v ncolors=$(infocmp -1 | expand | sed -n -e "s/^ *colors#\([0-9][0-9]*\),.*/\1/p") 'ncolors>1 {print 1 + ($1 % (ncolors - 1))}')
Untuk memecahnya:
tput- mengeluarkan string kontrol terminalsetaf- string kontrol terminal; dalam hal ini,set ANSI foreground$(...)- Penggantian perintah bersarang BASH untuk parameter warnahostname- dapatkan nama hostsum- hitung checksum sederhana pada nama hostawk...-v ncolors=$(...)- atur variabel AWKncolorske nilai substitusi perintah di dalam$(...)infocmp -1- menampilkan informasi terminal tentang jenis terminal saat ini dengan 1 parameter per barisexpand- perluas tab ke spasi untuk membuatsedskrip sedikit lebih mudahsed -n -e "s/^ *colors#\([0-9][0-9]*\),.*/\1/p"- ekstrak nilai integercolorskemampuan terminal
'ncolors>1 {...}'- skrip awk, yang menjalankan{...}kode hanya jikancolorslebih besar dari 1print 1 + ($1 % (ncolors - 1))- ambil$1mutlak (bidang 1 dari input, yang berasal darisum, yang berarti$1adalah nilai checksum), cari sisanya setelah dibagi dengan(ncolors - 1)(yang memiliki efek membatasinya ke kisaran0melalui(ncolors - 2)), lalu tambahkan1dan mencetaknya.
Anda mungkin tertarik dengan context-color , yang telah saya kumpulkan berdasarkan jawaban J Earls:https://github.com/ramnes/context-color
Ini adalah skrip sederhana yang, ketika dijalankan, menampilkan warna berdasarkan hash keluaran perintah. Dengan itu diinstal di suatu tempat di $PATH Anda , Anda dapat melakukan hal seperti ini di .bashrc Anda :
export PS1="$(context-color -p)$PS1\[\e[0m\]"
(di mana --prompt/-p adalah sakelar sehingga warna diloloskan untuk prompt, dan \[\e[0m\] urutan escape untuk mengatur ulang warna)
Secara default, perintah yang digunakan untuk membuat hash adalah whoami; hostname . Jika Anda hanya ingin mengubah warna sesuai dengan nama host, Anda dapat mengubah $CONTEXT lingkungan variabel (export CONTEXT="hostname" ) atau cukup gunakan --context/-c opsi (context-color -c "hostname" ).
Lihat di bawah untuk contohnya:
