zsh
Prueba esto:
setopt PROMPT_SUBST
PROMPT='%{$(pwd|grep --color=always /)%${#PWD}G%} %(!.%F{red}.%F{cyan})%n%f@%F{yellow}%m%f%(!.%F{red}.)%#%f '
Aquí hay un desglose de la solicitud:
- PROMPT_SUBST activa la sustitución de comandos en la solicitud (y la expansión de parámetros y la expansión aritmética)
%{...%}
- una secuencia de escape
$(pwd|grep --color=always /)
- imprima el directorio actual y resalte el /
- el color dependerá de la variable de entorno $ GREP_COLORS (o su valor predeterminado) - el rojo en negrita es el predeterminado
%${#PWD}G
- use la longitud en caracteres del nombre del directorio actual como un valor de falla. Esto hace que el shell considere esto como la longitud de la secuencia de caracteres anterior (después de " %{
") en lugar de la longitud real de la cadena que incluye secuencias de escape ANSI. Esto evita que el shell se confunda sobre la posición del cursor con respecto al final de la solicitud.
- - - - - - - este es el final de la parte que responde a su pregunta - - - - - - -
%(!.%F{red}.%F{cyan})
- si se trata de un shell privilegiado (raíz), configure el color de primer plano en rojo, de lo contrario, cian
%n
- generar el nombre de usuario
%f
- restablecer el color de primer plano al predeterminado
@
- un literal en el signo
%F{yellow}
- hacer que el primer plano sea de color amarillo
%m
- salida del nombre de host
%f
- restablecer el color de primer plano al predeterminado
%(!.%F{red}.)
- si se trata de un shell privilegiado (raíz), configure el color de primer plano en rojo
%#
- salida a #
para un shell privilegiado o %
para uno no privilegiado
%f
- restablecer el color de primer plano al predeterminado
Puse el camino primero en este mensaje para enfatizar, ya que la pregunta se refiere al camino.
Aquí hay una versión para zsh que cambia el color de la barra diagonal dependiendo de si es root (privilegiado) al manipular la $GREP_COLORS
variable:
setopt PROMPT_SUBST
PROMPT='%{$(pwd|([[ $EUID == 0 ]] && GREP_COLORS="mt=01;31" grep --color=always /|| GREP_COLORS="mt=01;34" grep --color=always /))%${#PWD}G%} %(!.%F{red}.%F{cyan})%n%f@%F{yellow}%m%f%(!.%F{red}.)%#%f '
Golpetazo
Puede hacer un aviso similar en Bash. En este ejemplo, puse el nombre de usuario y host primero y el color de las barras también cambia cuando el UID es 0. Advertencia: esto sobrescribe la $PS1
variable de solicitud de Bash . Eso no debería ser un problema a menos que esté haciendo algo especial o espere que el comportamiento cambie cuando configura esa variable directamente y esto está vigente. Además, esto usa una variable llamada " usercolor
" que puede colisionar con otra cosa, aunque todo esto podría ponerse en una función y la variable declarada local.
PROMPT_COMMAND='usercolor="\[\033[0;36m\]";[[ $EUID == 0 ]] && usercolor="\[\033[1;31m\]";PS1="$(pwd)";PS1="$usercolor\u\[\033[0m\]@\[\033[0;33m\]\h\[\033[0m\]:${PS1//\//$usercolor/\[\033[0m\]}$usercolor\\$\[\033[0m\] "'
Aproveché el hecho de que Bash no tiene la función "falla" de zsh para usar la sustitución de expansión de parámetros para colorear condicionalmente las barras (en lugar de usar grep).