Changer la couleur PS1 lorsqu'il est connecté à un autre hôte via SSH

J'essaie de changer l'apparence de PS1 en fonction de l'hôte auquel je suis connecté en utilisant SSH. Mon PS1 actuel:

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

Pour l'hôte host1 je voudrais replace la première couleur par le jaune qui est 1;33 et pour l' host2 prendre 1;35 titre d'exemple.

Comment puis-je comprendre que je suis connecté à l'hôte donné en utilisant SSH et modifier PS1 en conséquence?

Construisez votre spécification d'invite en morceaux, ou utilisez des variables intermédiaires ou une combinaison des deux. SSH définit la variable SSH_CLIENT , qui indique d'où vous êtes connecté. Vous pouvez ensuite utiliser le nom d'hôte pour déterminer où vous êtes connecté.

 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\] ' 

Comme l'autre, mais vous pouvez également utiliser le file rc séparé pour ssh .

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

… et partout où vous affectez votre $PS1

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

… tu pourrais le laisser entre guillemets, aussi …

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

… qui devrait souligner si la dernière command exécutée est sortie avec un code de sortie différent de zéro. Voici une photo …

entrer la description de l'image ici

J'ai ajouté l' ${SSH_CLIENT+ssh:} pour indiquer clairement @ssh: quand il est connecté de cette façon …