如何根据用户更改提示的配色方案?

如何根据用户更改提示的配色方案?

我当前的提示已按如下方式进行着色和编辑 -

#!/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\$ ";

我知道 PS1+="[ - \u ]"; 行将显示我当前的用户。但是,如果它是根,我希望该部分为红色。所有其他用户的默认颜色应为灰色。有没有办法根据当前用户更改该部分中的颜色,或者我应该声明一个变量并使用 IF 语句插入该部分或以红色作为颜色的修改后的部分?

我的预期输出是所有普通用户的灰色命名用户。根应该是红色的。这是 BASH。

答案1

有多种方法可以检查用户是否为 root(然后设置 PS1):

  • 用户名,使用$USER, $(whoami)(.NB 的输出$(whoami)。超级用户可以称为其他名称,但通常称为root.
  • 用户的 ID,使用$EUID$UID(参见这里以获得一些信息)。用户识别码0 始终是超级用户。

例如,您可以将该行替换PS1+="\[ - \u \]"为:

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

您还可以在该行中设置另一个自定义变量:

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

并使用条件语句如果之前像这样改变颜色:

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

相关内容