web-dev-qa-db-fra.com

Bash Invite à modifier la couleur lorsque je suis connecté à un serveur

Existe-t-il un moyen de rendre la dynamique d'invite Bash, de sorte qu'elle change de couleur lorsqu'elle est connectée à un serveur?

Donc, je veux que la couleur soit verte lorsque vous êtes sur mon système et changez en rouge lorsqu'il est connecté aux serveurs. J'ai un nombre énorme de serveurs que je ne veux pas mettre un différent .bashrc sur tous ceux-ci.

15
nitins

L'invite à distance est définie par la télécommande ~/.bashrc. Vous devez donc toujours le copier sur le serveur distant. Cependant, vous pouvez utiliser un seul ~/.bashrc Pour tous les hôtes et définissez la couleur d'invite en fonction du nom d'hôte:

[ "$PS1" ] || return 0                           # continue only when interactive
case $(hostname -s) in
laptop*)
    Prompt_color='\033[48;5;16m\033[38;5;46m'    # green(46) on black(16)
    ;;
server*)
    Prompt_color='\033[48;5;16m\033[38;5;196m'   # red(196) on black(16)
    ;;
esac
ORIG_PS1=$PS1                                    # in case needed
PS1='<\['${Prompt_color}'\]\h\[\033[m\]:\w>\$ '
unset Prompt_color

Remarques:

  • Ne pas définir PS1 S'il n'est pas déjà défini (c'est-à-dire si la coquille n'est pas interactive). Tester si PS1 n'est pas vide est un moyen très courant de décider si la coquille est interactive et que vous ne voulez pas confondre des programmes qui font cela. (Enchantement, un test plus précis est en train de vérifier si $- contient i.)

  • Si vous souhaitez que ce code fonctionne lors de la connexion à un serveur distant, vous devez disposer de l'un des fichiers de profil toujours source ~/.bashrc. Mais je suppose que vous savez que.

  • Dans PS1, les codes d'échappement doivent être enfermés dans \[...\].

  • \[033[m réinitialise le premier plan et l'arrière-plan à défaut. Alors ici, :\w apparaît dans le premier plan terminal/arrière-plan.

  • \[033[48;5;XXXm\033[38;5;YYYm Définit le fond/au premier plan sur XXX/YYY.

  • Pour un script qui déverse les couleurs disponibles, essayez colortest .

  • Pour vérifier à quoi ressemblerait l'invite:

    echo -e "<\033[48;5;16m\033[38;5;196mhost\033[m:dir>$ "
    
9
Matei David

Si vous ne voulez pas (ne pouvez pas) rendre les télécommandes ont un PS1, alors je dirais "non", ce serait au moins terriblement difficile. Considérez que sur une connexion SSH, le côté local n'a aucune idée réelle de ce qui est une invite de shell et de ce qui est autre chose, et ainsi de réglage des couleurs de l'invite doit vraiment venir de la télécommande. Vous pouvez définir des couleurs avant de commencer la session, mais ils seraient efficaces pour toutes les sorties, c'est-à-dire jusqu'à ce qu'un ls ou un éditeur définit les couleurs de sa part.

Bien sûr, vous pourriez trouver un peuplier pour la session pour détecter tout ce qui ressemble à une invite et à le colorier, mais cela conduirait facilement à de faux positifs (couleur sur chaque ligne avec un $?) Et être terriblement compliqué comparé à la perte d'une seule ligne sur votre .profile ou alors .bashrc sur chaque machine.

Avec un certain nombre de machines, il peut être utile de rechercher des solutions pour synchroniser les modifications de la configuration sur chacune d'elles. Soyez-lui un outil en fait, ou juste un script, ou d'exécuter une boucle pour copier un (s) fichier (s) de configuration) sur eux tous.

7
ilkkachu