it-swarm-pt.com

mudar a cor do prompt dependendo do usuário ou root no zsh

em zsh você pode ter um %# na tua PS1 (ou qualquer variável Prompt) que basicamente significa display % se usuário ou display # se for root. Estou me perguntando se há alguma maneira de afetar isso para que o % ou # muda de cor dependendo se é um usuário ou root (um vermelho para root, um azul para usuário) a maneira óbvia é apenas mudar o PS1 na minha raiz de ~/.zshrc mas considerando que este já é um símbolo especial, estou me perguntando se talvez não haja uma maneira de usar o mesmo PS1 para ambos ... algo específico para %# como é para zsh (tenho certeza de que existem outros hacks que eu poderia fazer também, como uma instrução if then).

13
xenoterracide

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

Isso deve funcionar para mudar o nome do host (%m) Para uma cor diferente (vermelho) se você for root. Não tenho um shell zsh para testar, mas parece correto.

Aqui está o porquê:

%(x.true.false) :: Com base na avaliação do primeiro termo do ternário, execute a instrução correta. '!' é verdadeiro se o Shell for privilegiado. Na verdade, %# É um atalho para %(!.#.%).

%{\e[1;31m%} %m %{\e[0m%} :: o %{\e[X;Ym%} É a sequência de escape de cor com X como formatação (negrito, sublinhado, etc) e Y como o código de cor. Observe que você precisa abrir e fechar a sequência em torno do termo que está procurando para alterar a cor, caso contrário, tudo após esse ponto terá qualquer cor. Eu adicionei espaços aqui em torno do termo Prompt %m Para maior clareza.

http://www.nparikh.org/unix/Prompt.php tem mais opções e detalhes sobre as tabelas de cores e outras opções disponíveis para zsh.

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

%(# testa se o Shell está rodando como root. Alterando para %(! testa se o Shell está rodando com privilégios elevados (o que cobre coisas como newgrp, mas não faz login como root).

6