Como alterar o esquema de cores do prompt com base no usuário?

2

Meu prompt atual é colorido e editado 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);
    red=$(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";
    red="\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\$ ";

Eu sei que a linha PS1 +="[- \ u]"; vai me mostrar meu usuário atual. No entanto, quero que a seção seja vermelha se for raiz. Todos os outros usuários devem ser a cor padrão do cinza. Existe uma maneira de alterar a cor nessa seção com base no usuário atual ou devo apenas declarar uma variável e usar uma instrução IF para inserir essa seção ou uma seção modificada com vermelho como uma cor?

Minha saída esperada é o usuário nomeado cinza para todos os usuários normais. Raiz deve ser vermelho. Isso é BASH.

    
por ILikeTurtles 08.09.2015 / 23:03

1 resposta

1

Existem várias maneiras de verificar se o usuário é root (para definir o PS1):

  • o nome do usuário, usando $USER , $(whoami) (a saída de $(whoami) . N.B, o superusuário pode ser chamado de outra coisa, mas geralmente é chamado de root .
  • o ID do usuário, usando $EUID ou $UID (consulte aqui para obter algumas informações). UID 0 é sempre o superusuário.

Então, por exemplo, você pode substituir a linha PS1+="\[ - \u \]" por:

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

Você também pode definir outra variável personalizada na linha:

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

E use uma instrução condicional antes se assim mudar a cor:

if [ $EUID -eq 0 ]; then
    usercolor="\e[1;31m";
fi
    
por 08.09.2015 / 23:57