Ubah warna huruf tertentu pada nama pengguna di bash's PS1

9

Saya ingin mengubah warna huruf tertentu di nama pengguna saya yang ditampilkan oleh PS1 di bash.

Misalnya: Jika \uada rahul, saya ingin surat hitu berwarna biru dan sisanya berwarna putih.

Saya tahu bahwa \umengacu pada nama pengguna dan menambahkan warna untuk seluruh 'entitas' dilakukan dengan menambahkan tag seperti: [\033[38;5;15m\].

Jika memungkinkan, dapatkah saya tahu cara melakukan hal yang sama.

Rahul Bharadwaj
sumber

Jawaban:

13

Jika Anda tidak keberatan tidak menggunakan \upelarian, Anda bisa melakukannya seperti ini:

PS1="\[\e[0;31m\]${USER:0:1}\[\e[m\]${USER:1} "

Ini akan mengatur prompt menjadi hanya nama pengguna dan spasi. Karakter pertama nama pengguna akan berwarna merah. Ini berfungsi dengan memperluas $USERvariabel dua kali dengan rentang tertentu. Pertama kali rentangnya hanya dari 0 hingga 1. Kali kedua berkisar dari 1 (karakter kedua) hingga akhir.

Untuk mendapatkan prompt seperti yang Anda minta gunakan ini:

PS1="${USER:0:2}\[\e[0;34m\]${USER:2:1}\[\e[m\]${USER:3} "
Sebastian Stark
sumber
1
Anda bisa menghilangkan panjang untuk mencetak seluruh string yang dimulai dengan offset : ${USER:1}untuk seluruh nama pengguna kecuali karakter pertama. Solusi bagus! Bisakah Anda juga menunjukkan cara mengubah warna karakter ketiga, seperti yang diminta OP?
hidangan penutup
1
Seseorang dapat menguji hal-hal seperti itu dengan echo -e, misalnyaecho -e "${USER:0:2}\e[0;34m${USER:2:1}\e[m${USER:3} "
makanan penutup
2
Apakah ini harus bekerja dengan berbagai nama pengguna yang berbeda (mis. Sorot huruf ke-3 untuk semua orang)? Jika itu hanya untuk Anda, pendekatan yang lebih sederhana adalah dengan meng-hardcode huruf-huruf nama pengguna Anda, mis. raAlih-alih ${USER:0:2}, dll.
egmont
@egmont hardcoding hampir tidak pernah merupakan cara terbaik, tetapi memang seringkali lebih sederhana. Dengan cara ini Anda dapat menjatuhkan kode dalam file konfigurasi global atau membaginya dengan orang lain. Dan menangani kasus ketika akun Anda diganti namanya.
Sebastian Stark
1
Secara pribadi saya membagikan konfigurasi shell saya sendiri di antara tiga akun dengan nama berbeda. Tapi mungkin kita tidak boleh masuk ke filsafat di sini :)
Sebastian Stark