2010-12-10 1 views
1

J'utilise Terminal.app et iTerm, tous deux prenant en charge l'exécution simultanée de plusieurs coques via plusieurs onglets et plusieurs fenêtres. J'utilise souvent cette fonctionnalité, mais par conséquent, si je veux modifier un paramètre de variable d'environnement, je dois généralement exécuter la même commande une fois dans chaque onglet et fenêtre que j'ai ouverts - ainsi que tous les nouveaux onglets ou fenêtres J'ouvre dans le futur. Est-il possible que mes shells communiquent les uns avec les autres de telle sorte que je puisse changer une variable d'environnement une fois, et que ce changement se propage à tous mes autres shells en cours?Comment puis-je modifier une variable d'environnement sur tous les shells actifs?

Je sais que je peux définir statiquement les variables d'env dans un fichier de démarrage comme .bashrc. Je sais aussi que je peux avoir des sous-cases héritant de l'environnement des shells parents, normalement ou via screen. Aucune de ces options n'aborde cette question. Cette question concerne spécifiquement la modification dynamique de l'environnement de plusieurs shells en cours simultanément.

Idéalement, je voudrais accomplir cela sans écrire le contenu de ces variables sur le disque à tout moment. L'une des raisons pour lesquelles je veux être en mesure de le faire est de pouvoir définir des informations sensibles dans une variable d'environnement, par exemple des mots de passe hachés, et d'y faire référence plus tard dans d'autres shells. J'aimerais pouvoir définir ces variables une fois lorsque je me connecte et pouvoir y faire référence dans tous mes shells jusqu'à ce que je me déconnecte, ou jusqu'à ce que la machine soit redémarrée. (Ceci est similaire à comment fonctionne ssh-agent, mais pour autant que je sache, ssh-agent ne stockera que les clés SSH, pas les variables env.)

Est-il possible de faire communiquer les coques comme ça?

+0

Je suis désolé mais c'est une question de faute de serveur. – rook

Répondre

1

Droite. Étant donné que chaque processus possède sa propre copie des variables d'environnement, vous ne pouvez pas les changer toutes en même temps. Si vous pliez assez votre esprit, il existe d'étranges solutions de contournement. Par exemple, si vous avez actuellement une commande que vous exécutez pour mettre à jour chacun d'entre eux, vous pouvez automatiser l'exécution de cette commande. Vérifiez la page de manuel bash pour PROMPT_COMMAND, qui peut exécuter une commande chaque fois que l'invite bash est imprimée. La plupart des coquilles ont quelque chose de similaire. Pour autant que vous ne mettiez pas un mot de passe haché sur le disque parce que vous le tirez d'un envvar au lieu de quelque chose comme ssh-agent ... ce serait un tout autre sujet.

1

Sauf si vous écrivez votre propre shell, vous ne pouvez pas. ssh-agent fonctionne en demandant à chaque client SSH de le contacter pour les clés, mais les shells les plus communs n'ont pas de mécanisme similaire.

Questions connexes