Existe-t-il un moyen de dynamiser l'invite bash afin qu'elle change de couleur lorsqu'elle est connectée à un serveur?
Je veux donc que la couleur soit verte lorsque sur mon système et passe au rouge lorsqu'elle est connectée aux serveurs. J'ai un grand nombre de serveurs que je ne veux pas mettre sur un autre .bashrc
.
Réponses:
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éfinir la couleur d'invite en fonction du nom d'hôte:Remarques:
Ne définissez pas
PS1
s'il n'est pas déjà défini (c'est-à-dire si le shell n'est pas interactif). Tester siPS1
n'est pas vide est un moyen très courant de décider si le shell est interactif, et vous ne voulez pas confondre les programmes qui le font. (On peut dire qu'un test plus précis vérifie s'il en$-
contienti
.)Si vous souhaitez que ce code s'exécute lorsque vous vous connectez à un serveur distant, l'un des fichiers de profil doit toujours être source
~/.bashrc
. Mais je suppose que vous le savez.Dans
PS1
, les codes d'échappement doivent être inclus\[...\]
.\[033[m
réinitialise le premier plan et l'arrière-plan par défaut. Alors ici,:\w
apparaissez dans le premier plan / arrière-plan du terminal.\[033[48;5;XXXm\033[38;5;YYYm
définit l'arrière-plan / premier plan surXXX
/YYY
.Pour un script qui sauvegarde les couleurs disponibles, essayez
colortest
.Pour vérifier à quoi ressemblerait l'invite:
la source
Si vous ne voulez pas (ne pouvez pas) faire en sorte que les télécommandes soient séparées
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 qu'est une invite de shell et de quoi d'autre, et donc la définition des couleurs pour l'invite doit vraiment provenir de la télécommande. Vous pouvez définir des couleurs avant de démarrer la session, mais elles seraient efficaces pour toutes les sorties, c'est-à-dire jusqu'à ce qu'unls
ou un éditeur définisse ses propres couleurs.Bien sûr, vous pourriez trouver un wrapper pour la session pour détecter tout ce qui ressemble à une invite et le coloriser, mais cela conduirait facilement à des faux positifs (couleur sur chaque ligne avec un
$
?) Et serait terriblement compliqué par rapport à la simple suppression d'un ligne unique vers votre.profile
ou.bashrc
sur chaque machine.Avec un certain nombre de machines, il peut être utile dans tous les cas de rechercher des solutions pour synchroniser les modifications de configuration sur chacune d'entre elles. Que ce soit un outil conçu pour cela, ou simplement un script, ou simplement exécuter une boucle pour copier un (ensemble de) fichier (s) de configuration sur tous.
la source
J'utilise un script wrapper avec sshpass qui téléchargera d'abord un profil temporaire puis ssh en utilisant ce profil (et supprimera le fichier temporaire).
Les deux choses principales du script sont les suivantes:
scp ~/.bash_remote "${USER}"@"${IP}":/tmp/.bash_tmp 1>/dev/null
ssh -t "${USER}"@"${IP}" "bash --rcfile /tmp/.bash_tmp; rm /tmp/.bash_tmp"
En utilisant cela, vous pouvez facilement définir les couleurs des sessions distantes.
Je sais que cela ne répond pas directement à votre question, mais cela pourrait être utilisé pour le résoudre.
la source
sshpass -p
si possible! Les arguments de ligne de commande pour exécuter des programmes sont généralement visibles par tous les utilisateurs deps
, et le mot de passe aussi. Même si vous n'avez pas d'autre compte utilisateur sur la machine, vous pouvez l'imprimer accidentellement sur l'écran.sshpass
peut lire le mot de passe à partir d'une variable d'environnement, ce qui n'est pas trop difficile à utiliser. En outre, pensez aux clés ssh si vous souhaitez de toute façon enregistrer les informations de connexion dans un fichier.Vous pourriez être intéressé par
context-color
ce que j'ai rassemblé dans ce but précis: https://github.com/ramnes/context-colorIl s'agit d'un script simple qui, lorsqu'il est exécuté, génère une couleur basée sur le hachage d'une sortie de commande. Une fois installé quelque part dans votre
$PATH
, vous pourriez faire quelque chose comme ceci dans votre.bashrc
:(où
--prompt/-p
est le commutateur pour que la couleur soit échappée pour les invites, et\[\e[0m\]
la séquence d'échappement pour réinitialiser la couleur)Par défaut, la commande utilisée pour générer le hachage est
whoami; hostname
. Si vous voulez juste que la couleur change en fonction du nom d'hôte, vous pouvez changer l'$CONTEXT
environnement variable (export CONTEXT="hostname"
) ou simplement utiliser l'--context/-c
option (context-color -c "hostname"
).Voir ci-dessous pour un exemple:
la source