SSh-Agent Bash 和 Eval 以及 Env

SSh-Agent Bash 和 Eval 以及 Env

我一直在阅读有关 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(以及shzsh)提供了快捷方式export X=Y,其功能完全相同。

实际上,我不知道任何用于export X设置环境变量的 shell,但不理解export X=Y,但仍然使用更详细的方式被认为更具可移植性。

相关内容