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 AWKncolors
ke 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 membuatsed
skrip sedikit lebih mudahsed -n -e "s/^ *colors#\([0-9][0-9]*\),.*/\1/p"
- ekstrak nilai integercolors
kemampuan terminal
'ncolors>1 {...}'
- skrip awk, yang menjalankan{...}
kode hanya jikancolors
lebih besar dari 1print 1 + ($1 % (ncolors - 1))
- ambil$1
mutlak (bidang 1 dari input, yang berasal darisum
, yang berarti$1
adalah nilai checksum), cari sisanya setelah dibagi dengan(ncolors - 1)
(yang memiliki efek membatasinya ke kisaran0
melalui(ncolors - 2)
), lalu tambahkan1
dan 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: