为什么我不能打印在env输出中看到的变量?
我对设置一个外壳实例与另一个外壳实例的环境变量感兴趣。所以我决定做一些研究。阅读了许多与此有关的问题后,我决定对其进行测试。 我生成了两个外壳A和B(PID 420),它们都在运行zsh。从外壳程序AI运行以下命令。 sudo gdb -p 420 (gdb) call setenv("FOO", "bar", 1) (gdb) detach 从外壳B运行时,env我可以看到变量FOO确实设置为bar值。这使我认为FOO已在shell B的环境中成功初始化。但是,如果我尝试打印FOO,则会出现一个空行,表明未设置FOO。对我来说,这里似乎有矛盾。 这已在我自己的Arch GNU / Linux系统和Ubuntu VM上进行了测试。我还在bash变量甚至未在env中显示的地方对此进行了测试。尽管这让我感到失望,但如果shell在生成时缓存其环境的副本并仅使用它(在链接的问题之一中建议),则是有意义的。这仍然不能回答为什么zsh可以看到变量。 为什么输出为echo $FOO空? 编辑 输入评论后,我决定进行更多测试。结果可以在下表中看到。第一列是FOO注入变量的外壳。第一行包含该命令的输出,可以在其下面看到。FOO使用:注入变量sudo gdb -p 420 -batch -ex 'call setenv("FOO", "bar", 1)'。zsh:专用的命令zsh -c '...'也已使用bash进行了测试。结果是相同的,为简洁起见,省略了它们的输出。 Arch GNU / Linux,zsh 5.3.1,bash 4.4.12(1) | | env | grep FOO | echo …