我一直在阅读有关 ssh-agent 的工作原理以及它与 shell 环境的关系。我明白了为什么我们ssh-agent
现在要进行 eval(通常在 /etc/profile 中),这很合乎逻辑。但是 ssh-agent 的输出对我来说似乎有点不自然
# The bad way just (env dont get set, just printed) so i can see its output
[matt@laparchie rc.d]$ ssh-agent
SSH_AUTH_SOCK=/tmp/ssh-EQUsXLxh4103/agent.4103; export SSH_AUTH_SOCK;
SSH_AGENT_PID=4104; export SSH_AGENT_PID;
echo Agent pid 4104;
为什么 ssh-agent 不直接输出
export SSH_AUTH_SOCK=/tmp/ssh-EQUsXLxh4103/agent.4103;
export SSH_AGENT_PID=4104;
echo Agent pid 4104;
当将其发送到 eval 时,两者执行的操作相同(即设置环境变量),但后者对我来说更简洁、更清晰,这只是一种风格(前者的冗长)吗?如果是这样,这种风格是否有历史/原因?还是在技术上有什么不同?
答案1
ssh-agent 输出的是sh
语法。该export varname=value
构造在 中有效,bash
但在许多实现中无法识别,sh
而该varname=value; export varname
构造是。
答案2
从技术上来说,X=Y; export X
这是正确的方法。
但是因为它没有必要那么冗长,bash
(以及sh
和zsh
)提供了快捷方式export X=Y
,其功能完全相同。
实际上,我不知道任何用于export X
设置环境变量的 shell,但不理解export X=Y
,但仍然使用更详细的方式被认为更具可移植性。