cambia il colore del prompt in base all'utente o alla radice in zsh


13

in zsh puoi avere un %#nella tua PS1(o qualunque PROMPTvariabile) che sostanzialmente significa display %if user o display #if root. Mi chiedo se c'è un modo per influenzare questo in modo che %o #cambi i colori a seconda che si tratti di un utente o di root (un rosso per root, un blu per utente) il modo ovvio è solo quello di cambiare PS1nella mia radice ~/.zshrcma considerando questo è già un simbolo speciale Mi chiedo se forse non c'è un modo in cui posso usare lo stesso PS1per entrambi ... qualcosa di specifico a cui %#piace è per zsh (sono sicuro che ci sono altri hack che potrei fare anche a me un'istruzione if then).

Risposte:


8

%(!.%{\e[1;31m%}%m%{\e[0m%}.%{\e[0;33m%}%m%{\e[0m%})

Questo dovrebbe lavorare per cambiare il nome host ( %m) di un colore diverso (rosso) se si è root. Non ho una shell zsh su cui testarlo ma sembra corretta.

Ecco perché:

%(x.true.false):: Basato sulla valutazione del primo termine del ternario, eseguire la dichiarazione corretta. '!' è vero se la shell è privilegiata. In realtà %#è una scorciatoia per %(!.#.%).

%{\e[1;31m%} %m %{\e[0m%}:: the %{\e[X;Ym%}è la sequenza di escape colore con X come formattazione (grassetto, sottolineato, ecc.) e Y come codice colore. Nota che devi aprire e chiudere la sequenza attorno al termine che stai cercando di cambiare il colore, altrimenti tutto dopo quel punto sarà di qualunque colore. Ho aggiunto spazi qui intorno al termine %mper chiarezza.

http://www.nparikh.org/unix/prompt.php ha più opzioni e dettagli intorno alle tabelle dei colori e altre opzioni disponibili per zsh.


6
autoload colors
colors
PS1="%~ %{%(#~$fg[red]~$fg[blue])%}%#%{$fg[default]%} "

%(#verifica se la shell è in esecuzione come root. Modificandolo per %(!verificare se la shell è in esecuzione con privilegi elevati (che copre cose come newgrp, ma non il login come root).

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.