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).
%(!.%{\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.
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).