Modifique o prompt com base no valor

3

Suponha que eu tenha uma variável de ambiente definida em .bash_profile assim:

PS1='\[\e[31;1m\][\u@\h \T \w] \[\e[0m\]'

Esta variável faz com que o meu prompt do Linux mostre certas informações, como:

[jeff@node21 01:48:30 ~] %código% %código% [jeff@node22 01:48:30 ~]

Quando a palavra "mestre" aparecer, quero capitalizá-la (não devo fazer nenhum trabalho nesse nó e quero que ela se destaque quando eu esquecer de [jeff@node23 01:48:30 ~] para outros nós).

Eu não posso usar [jeff@master 01:48:30 ~] na variável rsh , porque isso não contém a palavra "mestre" nela.

Por fim, eu quero que o prompt seja capitalizado quando eu estiver no nó "master". Existe uma maneira de avaliar a variável "PS1", manipular a string e, em seguida, reatribuí-la para que o prompt funcione?

    
por Jeff 12.08.2012 / 17:22

2 respostas

4

Supondo que você esteja usando uma versão recente de bash , você pode fazer isso com PROMPT_COMMAND e usar uma variável em PS1 em vez de \h :

PROMPT_COMMAND='
  myhost=$(hostname)
  if [[ $myhost == master ]]; then
    myhost=${myhost^^}
  fi
'

PS1='\[\e[31;1m\][\u@$myhost \T \w] \[\e[0m\]'

O que estiver em PROMPT_COMMAND será executado antes de todos os prompts serem gravados. A definição acima define myhost para a saída de hostname e, se myhost for mestre , ele será substituído pela expansão ${var^^} .

    
por 12.08.2012 / 18:33
3

uma abordagem alternativa seria

PS1='\[\e[31;1m\][\u@$(hostname | perl -pe "\$_ = uc if m/master/") \T \w] \[\e[0m\]'

Eu admito que minha sugestão não é tão bem estruturada como a de Thor, mas é basicamente bom saber que

$(cmd)

é a sintaxe para substituição de comandos, como geralmente em bash .

Há também um howto que lida apenas com a configuração do prompt do bash. Vale a pena ler.

    
por 12.08.2012 / 18:55

Tags