changer la couleur de l'invite en fonction de l'utilisateur ou de la racine dans zsh

13

dans zsh, vous pouvez avoir un %#dans votre PS1(ou n'importe quelle PROMPTvariable) ce qui signifie essentiellement afficher %si l'utilisateur ou afficher #si root. Je me demande s'il y a un moyen d'affecter cela afin que le %ou #change de couleur selon qu'il s'agit d'un utilisateur ou d'un root (un rouge pour root, un bleu pour user) la manière évidente est juste de changer le PS1dans ma racine ~/.zshrcmais en considérant c'est déjà un symbole spécial, je me demande s'il n'y a peut-être pas un moyen d'utiliser le même PS1pour les deux ... quelque chose de spécifique à %#aimer c'est pour zsh (je suis sûr qu'il y a d'autres hacks que je pourrais faire aussi) une instruction if then).

xénoterracide
la source

Réponses:

8

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

Cela devrait fonctionner pour changer le nom d'hôte ( %m) d'une couleur différente (rouge) si vous êtes root. Je n'ai pas de shell zsh pour le tester mais il semble correct.

Voici pourquoi:

%(x.true.false):: Sur la base de l'évaluation du premier terme du ternaire, exécutez l'instruction correcte. '!' est vrai si le shell est privilégié. En fait, %#c'est un raccourci pour %(!.#.%).

%{\e[1;31m%} %m %{\e[0m%}:: the %{\e[X;Ym%}est la séquence d'échappement des couleurs avec X comme formatage (gras, souligné, etc.) et Y comme code couleur. Notez que vous devez ouvrir et fermer la séquence autour du terme que vous cherchez à changer de couleur, sinon tout ce qui suit sera de n'importe quelle couleur. J'ai ajouté des espaces ici autour du terme rapide %mpour plus de clarté.

http://www.nparikh.org/unix/prompt.php a plus d'options et de détails autour des tables de couleurs et d'autres options disponibles pour zsh.

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

%(#teste si le shell s'exécute en tant que root. Changer cela pour %(!tester si le shell s'exécute avec des privilèges élevés (qui couvre des choses comme newgrp, mais pas la connexion en tant que root).

Gilles 'SO- arrête d'être méchant'
la source