我不明白什么?
我跑ssh-agent
了,它似乎设置了一些环境变量,但是当我设置echo
它们时,我没有得到我期望的结果。
❯ ssh-agent
SSH_AUTH_SOCK=/var/folders/pn/b_2jl_j55kl504pvctj2jw2c0000gn/T//ssh-SGC2u3LSE0Gu/agent.6521; export SSH_AUTH_SOCK;
SSH_AGENT_PID=6522; export SSH_AGENT_PID;
echo Agent pid 6522;
~
❯ echo $SSH_AGENT_PID
~
❯ echo $SSH_AUTH_SOCK
/private/tmp/com.apple.launchd.lfH6wkqh4H/Listeners
ssh-agent
是一个单独的可执行文件。它既不能设置也不能改变你的 shell 的变量和环境。如果没有调试器,只有外壳本身可以做到这一点(比较这个答案)。因此
ssh-agent
生成 shell 代码以供 shell评估。您实际上看到了打印到控制台的代码,但没有进行评估。启动新变量ssh-agent
和设置变量的正确方法是:笔记:
手册和操作指南通常使用
因为它是一种通用语法,应该可以在许多 shell 中使用,无论是
sh
-like 还是csh
-like。命令 with"$(…)"
遵循sh
-like shell 中的现代良好实践,而 yourzsh
issh
-like 在这种情况下。ssh-agent
尝试判断您的 shell 是sh
-like 还是csh
-like,并相应地生成 shell 代码。换句话说,它的行为类似于ssh-agent -s
orssh-agent -c
,这取决于它对你的 shell 的“想法”。如果您知道您的 shell,zsh
那么您可能更喜欢eval "$(ssh-agent -s)"
工具因某种原因猜错的情况。但通常这不是必需的。几乎总是你应该避免
eval
,一般来说很难安全地使用它,有人说“eval
是邪恶的”。ssh-agent
不过没关系,因为它ssh-agent
是故意设计为与 一起使用的eval
,所以它会生成完全受控的 shell 代码,这些代码远离使 eval “邪恶”的区域和陷阱。