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

11

em zsh você pode ter um %# em seu PS1 (ou qualquer que seja a variável PROMPT ) que basicamente significa exibir % se usuário ou exibir # se raiz. Eu estou querendo saber se existe alguma maneira de afetar isso para que o % ou # muda de cor dependendo se é um usuário ou root (um vermelho para raiz, um azul para usuário) a maneira óbvia é apenas mudar o PS1 no ~/.zshrc da minha raiz, mas considerando que esse já é um símbolo especial, fico pensando se talvez não seja possível usar o mesmo PS1 para ambos ... algo específico para %# como é para zsh (tenho certeza que existem outros hacks que eu poderia fazer também como se fosse uma afirmação).

    
por xenoterracide 30.08.2010 / 17:31

2 respostas

7

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

Isso deve funcionar para alterar o nome do host ( %m ) de uma cor diferente (vermelha) se você for root. Eu não tenho um shell zsh para testá-lo, mas parece correto.

Veja por que:

%(x.true.false) :: Com base na avaliação do primeiro termo do ternário, execute a declaração correta. '!' é verdade se o shell for privilegiado. De fato, %# é 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. Note que você precisa abrir e fechar a seqüência em torno do termo que você está olhando para mudar a cor, caso contrário, tudo depois desse ponto será qualquer cor. Eu adicionei espaços aqui em torno do termo de prompt %m para maior clareza.

O

link tem mais opções e detalhes sobre as tabelas de cores e outras opções disponíveis para zsh.

    
por 30.08.2010 / 21:01
6
autoload colors
colors
PS1="%~ %{%(#~$fg[red]~$fg[blue])%}%#%{$fg[default]%} "

%(# testa se o shell está sendo executado como root. Mudar isto para %(! testa se o shell está rodando com privilégios elevados (o que cobre coisas como newgrp , mas não logando como root).

    
por 30.08.2010 / 22:52