¿Cómo cambiar el esquema de colors del prompt basado en el usuario?

Mi aviso actual se colorea y edita como tal –

#!/bin/bash # GIT Prompt help if tput setaf 1 &> /dev/null; then tput sgr0; # reset colors bold=$(tput bold); reset=$(tput sgr0); txtund=$(tput sgr 0 1); black=$(tput setaf 0); blue=$(tput setaf 33); cyan=$(tput setaf 37); green=$(tput setaf 64); orange=$(tput setaf 166); purple=$(tput setaf 125); networking=$(tput setaf 124); violet=$(tput setaf 61); white=$(tput setaf 15); yellow=$(tput setaf 136); else bold=''; reset="\e[0m"; black="\e[1;30m"; blue="\e[1;34m"; cyan="\e[1;36m"; green="\e[1;32m"; orange="\e[1;33m"; purple="\e[1;35m"; networking="\e[1;31m"; violet="\e[1;35m"; white="\e[1;37m"; yellow="\e[1;33m"; fi; ORIG=$PS1 HOST=$HOSTNAME PS1="\[${txtund}${green}\]${HOST}\[\[${reset}\]"; PS1+="\$(prompt_git \"\[${white}\] on \[${violet}\]\")"; PS1+="\[${reset}\]"; PS1+="\[ at - ${orange}\W\]"; PS1+="\[${reset}\]"; PS1+="\[ - \u \]"; PS1+="\n\$ "; 

Sé que la línea PS1 + = "[- \ u]"; me mostrará mi usuario actual. Sin embargo, quiero que esa sección sea roja si es raíz. Todos los demás usuarios deben ser del color pnetworkingeterminado de gris. ¿Hay alguna manera de cambiar el color en esa sección basada en el usuario actual o debería simplemente declarar una variable y usar una instrucción IF para insert esa sección o una sección modificada con el rojo como color?

Mi salida esperada es usuario llamado gris para todos los usuarios normales. La raíz debe ser roja. Este es BASH.

Hay varias forms de verificar si el usuario es root (para configurar la PS1):

  • el nombre del usuario, usando $USER , $(whoami) (el resultado de $(whoami) . NB el superusuario puede llamarse de otra forma, pero generalmente se llama root .
  • la identificación del usuario, usando $EUID o $UID (ver aquí para get información). UID 0 es siempre el superusuario.

Entonces, por ejemplo, podrías replace la línea PS1+="\[ - \u \]" con:

 if [ $EUID -eq 0 ]; then PS1+="\[ - ${networking}\u \]"; else PS1+="\[ - \u \]"; fi 

También podría establecer otra variable personalizada en la línea:

 PS1+="\[ - \u ${usercolor}\]" 

Y usa una statement condicional antes si así para cambiar el color:

 if [ $EUID -eq 0 ]; then usercolor="\e[1;31m"; fi