cambiar el color del indicador según el usuario o la raíz en zsh

13

en zsh puede tener un %#en su PS1(o cualquier PROMPTvariable) que básicamente significa mostrar %si es usuario o mostrar #si es root. Me pregunto si hay alguna forma de afectar esto para que %o #cambie los colores dependiendo de si se trata de un usuario o raíz (un rojo para la raíz, un azul para el usuario), la forma obvia es cambiar la PS1de mi raíz, ~/.zshrcpero teniendo en cuenta Esto ya es un símbolo especial. Me pregunto si tal vez no haya una forma en que pueda usar lo mismo PS1para ambos ... algo específico que me %#guste es para zsh (estoy seguro de que hay otros trucos que podría hacer como una declaración if if).

xenoterracida
fuente

Respuestas:

8

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

Eso debería funcionar para cambiar el nombre de host ( %m) un color diferente (rojo) si es root. No tengo un shell zsh para probarlo, pero parece correcto.

Este es el por qué:

%(x.true.false):: Basado en la evaluación del primer término del ternario, ejecute la declaración correcta. '!' es cierto si el shell tiene privilegios. De hecho %#es un atajo para %(!.#.%).

%{\e[1;31m%} %m %{\e[0m%}:: the %{\e[X;Ym%}es la secuencia de escape de color con X como formato (negrita, subrayado, etc.) e Y como código de color. Tenga en cuenta que necesita abrir y cerrar la secuencia alrededor del término que desea cambiar para cambiar el color; de lo contrario, todo después de ese punto será del color que sea. He agregado espacios aquí alrededor del término rápido %mpara mayor claridad.

http://www.nparikh.org/unix/prompt.php tiene más opciones y detalles sobre las tablas de colores y otras opciones disponibles para zsh.

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

%(#prueba si el shell se ejecuta como root. Cambiar esto para %(!probar si el shell se ejecuta con privilegios elevados (que cubre cosas como newgrp, pero no inicia sesión como root).

Gilles 'SO- deja de ser malvado'
fuente