alterar a cor do prompt, dependendo do usuário ou raiz no zsh

13

No zsh, você pode ter um %#em sua PS1(ou qualquer PROMPTvariável), que basicamente significa display %se usuário ou display #se root. Eu estou querendo saber se existe alguma maneira de afetar isso, para que o %ou #mude de cor, dependendo se é um usuário ou raiz (um vermelho para a raiz, um azul para o usuário), a maneira óbvia é apenas mudar a PS1raiz, ~/.zshrcmas considerando Este já é um símbolo especial. Gostaria de saber se talvez não exista uma maneira de usar o mesmo PS1para os dois ... algo específico para %#gostar do zsh (tenho certeza de que existem outros hacks que eu também poderia gostar). uma declaração if then).

xenoterracida
fonte

Respostas:

8

%(!.%{\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. Não tenho um shell zsh para testá-lo, mas parece correto.

Aqui está o porquê:

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

%{\e[1;31m%} %m %{\e[0m%}:: the %{\e[X;Ym%}é a sequência de escape de cores com X como formatação (negrito, sublinhado, etc.) e Y como código de cores. Observe que você precisa abrir e fechar a sequência em torno do termo que deseja alterar para a cor, caso contrário, tudo depois desse ponto será a cor. Adicionei espaços aqui em torno do prazo imediato %mpara maior clareza.

http://www.nparikh.org/unix/prompt.php tem mais opções e detalhes em torno das tabelas de cores e outras opções disponíveis para o zsh.

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

%(#testa se o shell está sendo executado como root. Alterar isso para %(!testar se o shell está sendo executado com privilégios elevados (que abrange coisas como newgrp, mas não o login como root).

Gilles 'SO- parar de ser mau'
fonte