Cambia il colore di una lettera specifica nel nome utente in PS1 di bash


9

Voglio cambiare il colore di una lettera specifica nel mio nome utente visualizzato da PS1 in bash.

Ad esempio: se lo \uè rahul, vorrei che la lettera hfosse di colore blu e che il resto fosse bianco.

So che \usi riferisce a username e l'aggiunta di un colore a un intero 'entità' è fatto con l'aggiunta di tag come: [\033[38;5;15m\].

Se è possibile, posso per favore sapere come fare lo stesso.

Risposte:


13

Se non ti dispiace non usare la \ufuga, potresti farlo in questo modo:

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

Questo imposterà il prompt solo sul nome utente e uno spazio. Il primo carattere del nome utente sarà rosso. Funziona espandendo $USERdue volte la variabile con un intervallo specifico. La prima volta l'intervallo va da 0 a 1. La seconda volta va da 1 (il secondo carattere) alla fine.

Per ottenere il prompt come richiesto, utilizzare questo:

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

1
Puoi semplicemente omettere la lunghezza per stampare l'intera stringa che inizia con offset : ${USER:1}per l'intero nome utente tranne il primo carattere. Bella soluzione! Puoi anche mostrare come cambiare il colore del terzo personaggio, come richiesto da OP?
dessert

1
Si possono provare cose del genere con echo -e, ad esempioecho -e "${USER:0:2}\e[0;34m${USER:2:1}\e[m${USER:3} "
dessert

2
Questo deve funzionare con vari nomi utente diversi (ad esempio, evidenziare la terza lettera per tutti)? Se è solo per te, un approccio più semplice è solo quello di codificare le lettere del tuo nome utente, ad esempio rainvece di ${USER:0:2}, ecc.
egmont

@egmont hardcoding non è quasi mai il modo migliore, ma certamente molto più semplice. In questo modo è possibile rilasciare il codice in un file di configurazione globale o condividerlo con altri. E gestisce il caso quando il tuo account viene rinominato.
Sebastian Stark,

1
Personalmente condivido la mia configurazione di shell tra tre account con nomi diversi. Ma forse non dovremmo entrare in filosofia qui :)
Sebastian Stark
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.