GNU/Linux >> Belajar Linux >  >> Linux

Hash nama host menjadi warna

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 terminal
  • setaf - string kontrol terminal; dalam hal ini, set ANSI foreground
  • $(...) - Penggantian perintah bersarang BASH untuk parameter warna
    • hostname - dapatkan nama host
    • sum - hitung checksum sederhana pada nama host
    • awk ...
    • -v ncolors=$(...) - atur variabel AWK ncolors ke nilai substitusi perintah di dalam $(...)
      • infocmp -1 - menampilkan informasi terminal tentang jenis terminal saat ini dengan 1 parameter per baris
      • expand - perluas tab ke spasi untuk membuat sed skrip sedikit lebih mudah
      • sed -n -e "s/^ *colors#\([0-9][0-9]*\),.*/\1/p" - ekstrak nilai integer colors kemampuan terminal
    • 'ncolors>1 {...}' - skrip awk, yang menjalankan {...} kode hanya jika ncolors lebih besar dari 1
      • print 1 + ($1 % (ncolors - 1)) - ambil $1 mutlak (bidang 1 dari input, yang berasal dari sum , yang berarti $1 adalah nilai checksum), cari sisanya setelah dibagi dengan (ncolors - 1) (yang memiliki efek membatasinya ke kisaran 0 melalui (ncolors - 2) ), lalu tambahkan 1 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:


Linux
  1. Pemecahan Masalah:Tidak Dapat Menyelesaikan Nama Inang

  2. Ssh – Atur Warna Terminal Mesin Lokal Untuk Menggunakan Warna Mesin yang Saya Gunakan Ssh?

  3. Linux – Apa File Default Untuk `hostname`?

  1. Cara mengubah nama host di Linux

  2. Contoh Perintah nama host di Linux

  3. firefox:warna bidang masukan

  1. Cara Mengubah Nama Host di Debian

  2. Mengatur Hostname di Docker Compose

  3. Ubah nama host server Linux