如何为 bash 提示符的特定部分着色?

如何为 bash 提示符的特定部分着色?

我正在使用 MacBook OSX,并管理机器内的一些虚拟机。我经常犯错误,因为所有提示都有相同的颜色和类型,所以我想区分它们。

首先,我想让root帐户显示为红色,因为它本身就很危险!

其次,我希望能够为属于我的服务器的特定 IP 地址着色,例如“mywebserver.local”(其地址位于 /etc/hosts 内)和“192.168.54.1”。

我现在正在使用的是:

green=$(tput setaf 2);
yellow=$(tput setaf 3);
reset=$(tput sgr0);

PS1='\['"$green"'\]\u\['"$reset"'\]@\['"$yellow"'\]\h:\W\$:\['"$reset"'\] '

它只部分满足了我的要求。我该如何输入条件?

答案1

你可能希望它是这样:

[ $USER = root ] && PS1="\033[0;40;1;91[ root > ]\033[0;1;94m " || {
    HOST=`hostname`
    if [ $HOST = 'mammothpc_prehistoric' ] ; then
        PS1=...
    elif [ $HOST = 'progueing_alone' ] ; then
        PS1=...
    elif [ $HOST = 'guru_pro_server' ] ; then
        PS1=...
    else
        echo 'Error 404 : no such errors found.'
        PS1=... 
}

相反,顺便说一下,您还可以设置一些颜色变量并进一步将整个方案分配给PS1

PS1="$FG[ $USER@$HOST ] : $reset"

答案2

这不是一个答案,而是一个很棒的指南,它不仅描述了我想要实现的目标,还描述了许多其他有用的东西:https://www.digitalocean.com/community/tutorials/how-to-customize-your-bash-prompt-on-a-linux-vps

相关内容