Alterar cor do PS1 quando conectado a outro host via SSH

4

Estou tentando mudar a aparência do PS1 com base no host ao qual estou conectado usando o SSH. Meu PS1 atual:

PS1='\[\e[1;32m\]\u@\h\[\e[1;34m\] \w\[\e[1;31m\]$(__git_ps1)\[\e[1;0;37m\] \$\[\e[0m\] '

Para o host host1 , gostaria de substituir a primeira cor por amarelo, que é 1;33 , e por host2 take 1;35 , como exemplo.

Como posso descobrir que estou conectado ao host fornecido usando o SSH e alterar o PS1 adequadamente?

    
por tomrozb 21.07.2015 / 00:30

2 respostas

8

Construa sua especificação de prompt em partes ou use variáveis intermediárias ou uma combinação de ambas. O SSH define a variável SSH_CLIENT , que indica de onde você está logado. Você pode então usar o nome do host para determinar onde você está logado.

if [[ -n $SSH_CLIENT ]]; then
  case $HOSTNAME in
    *.example.com) prompt_user_host_color='1;35';; # magenta on example.com
    *) prompt_user_host_color='1;33';; # yellow elsewhere
  esac
else
  unset prompt_user_host_color # omitted on the local machine
fi
if [[ -n $prompt_user_host_color ]]; then
  PS1='\[\e['$prompt_user_host_color'm\]\u@\h'
else
  PS1=
fi
PS1+='\[\e[1;34m\] \w\[\e[1;31m\]$(__git_ps1)\[\e[1;0;37m\] \$\[\e[0m\] '
    
por 21.07.2015 / 02:08
2

Como o outro, mas você também poderia usar o arquivo rc separado para ssh .

<<\SSH_RC \
    tee -a ~/.ssh/rc
case $HOSTNAME in
    (host1) sshclr=1;;
    (host2) sshclr=3;;
esac

... e onde quer que você esteja atribuindo seu $PS1 ...

PS1="\[\e[1;$((32+ssh_clr))"'...

... você pode deixar aspas simples também ...

PS1='\[\e[$((!$?|4));$((32+sshclr))...'

... que deve ser sublinhado se o último comando executado sair com um código de saída diferente de zero. Aqui está uma foto ...

Eu adicionei a expansão ${SSH_CLIENT+ssh:} lá para denotar claramente @ssh: quando conectado dessa forma ...

    
por 21.07.2015 / 03:30