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.
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>$ "
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.