小编rlf*_*rlf的帖子

为什么我不能打印在 env 的输出中可以看到的变量?

我对从另一个 shell 实例设置一个 shell 实例的环境变量感兴趣。所以我决定做一些研究。在阅读了一些关于问题后,我决定对其进行测试。

我生成了两个 shell A 和 B(PID 420),都运行zsh. 从 shell AI 运行以下内容。

sudo gdb -p 420
(gdb) call setenv("FOO", "bar", 1)
(gdb) detach
Run Code Online (Sandbox Code Playgroud)

从 shell B 运行时,env我可以看到变量 FOO 确实设置了 bar 值。这让我认为 FOO 已经在 shell B 的环境中成功初始化。但是,如果我尝试打印 FOO,我会得到一个空行,暗示它没有设置。对我来说,感觉这里有一个矛盾。

这已在我自己的 Arch GNU/Linux 系统和 Ubuntu VM 上进行了测试。我还测试了这个bash变量甚至没有出现在 env 中的地方。这虽然让我失望,但如果 shell 在生成时缓存其环境的副本并且只使用它(这是在一个链接问题中建议的),这是有道理的。这仍然没有回答为什么zsh可以看到变量。

为什么输出为echo $FOO空?


编辑

在评论中输入之后,我决定进行更多测试。结果见下表。第一列是FOO变量被注入的外壳。第一行包含可以在其下方看到其输出的命令。变量FOO注入使用:sudo gdb -p 420 -batch …

linux shell bash zsh environment-variables

9
推荐指数
1
解决办法
1191
查看次数

标签 统计

bash ×1

environment-variables ×1

linux ×1

shell ×1

zsh ×1