Pour courir ssh-agent
je dois utiliser
eval $(ssh-agent)
Pourquoi dois-je à eval
la sortie de ssh-agent
?
Pourquoi n'est-il pas conçu pour que je puisse simplement l'exécuter?
Remarque: Les Backticks (`) ont été supprimés car ils sont obsolètes. Vous pouvez en lire plus ici, par exemple .
man
page, pour commencer ...ssh-agent
qui est "conçu de cette façon", c’est unix / linux, car ilssh-agent
s’exécute dans un processus enfant du shell. Les processus enfants ne peuvent pas modifier les processus parents. Mais une fonction peut: car elle s'exécute dans le processus en cours. Ainsi , vous pouvez écrire une fonction:do_set_ssh_agent() { eval
ssh-agent; }
et qui pourrait être exécuté simplement:$ do_set_ssh_agent
. Mais les "programmes" ne sont pas (généralement) installés en tant que "fonctions" dans linux / unix; au lieu de cela, les programmes sont installés sous forme de fichiers qui, comme mentionné, s’exécutent dans un processus enfant. (Les scripts de sourcing sont une exception, mais ssh-agent est binaire.)Réponses:
ssh-agent
génère les variables d'environnement nécessaires pour s'y connecter:En
eval
vous appelant, chargez immédiatement ces variables dans votre environnement.Quant à savoir pourquoi
ssh-agent
ne peut pas faire cela lui-même ... Notez le mot choix. Non "ne veut pas", " ne peut pas ". Sous Unix, un processus ne peut modifier que ses propres variables d'environnement et les transmettre aux enfants. Il ne peut pas modifier l'environnement de son processus parent car le système ne le permet pas. C'est une conception de base de la sécurité.Vous pouvez contourner le problème
eval
en utilisantssh-agent utility
où seutility
trouve votre shell de connexion, votre gestionnaire de fenêtres ou tout autre élément nécessitant le paramétrage des variables d'environnement SSH. Ceci est également mentionné dans le manuel.la source
eval
en utilisantssh-agent utility
où seutility
trouve votre shell de connexion, votre gestionnaire de fenêtres ou tout autre élément nécessitant le paramétrage des variables d'environnement SSH. Ceci est également mentionné dans le manuel. Aucun utilitaire externe ne peut jamais définir de variables dans l'environnement d'appel.