Como colorir partes específicas do prompt do bash?

2

Eu estou trabalhando em um macbook OSX e estou administrando algumas VMs dentro da minha máquina. Freqüentemente cometo erros porque todos os prompts têm a mesma cor e tipo, então quero diferenciá-los.

Primeiro de tudo, eu quero fazer root conta aparecem na cor vermelha porque é um perigo por si só!

Em segundo lugar, quero poder colorir endereços IP específicos que pertençam a meus servidores, por exemplo "mywebserver.local" (cujo endereço está dentro de / etc / hosts) e "192.168.54.1".

O que estou usando agora é:

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

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

que faz apenas parcialmente o que eu quero. Como faço para inserir condições?

Radolino
fonte
Procure por "PS1" (e ... 2, 3, 4) e também "PROMPT_COMMAND" em tldp.org/LDP/abs/html/abs-guide.html para algumas dicas.
Hannu

Respostas:

0

É assim que você pode querer que seja:

[ $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=... 
}

Em vez disso, você também pode definir uma variável de cor e atribuir o esquema inteiro PS1:

PS1="$FG[ $USER@$HOST ] : $reset"
theoden
fonte
tbh, eu não vejo isso funcionando.
Radolino
@RobDel Isso DEVE funcionar. Caso contrário, você terá sobrescrito ou não executado. Além disso, você precisa ter seus principais arquivos rc sincronizados entre os dispositivos. Este é um script muito simples para não estar funcionando. Além disso, verifique se você alterou '...' para outra coisa, bem como [ $HOST = ... ]. Além disso, tente verificar echo $HOST após a atribuição. Mais uma razão para falhar pode ser que você tenha digitado incorretamente.
theoden