【发布时间】:2017-06-24 19:52:40
【问题描述】:
我在 /etc/profile 中设置了一些环境变量,我可以从 bash 中访问它们,但由于某种原因我无法从 Go 中获取它们。
/etc/profile:
...
TEST_ENV=test_me
我可以从 bash 访问它:
echo $TEST_ENV
test_me
我无法从 GO 访问此变量
os.Getenv("TEST_ENV") // returns ""
如果我列出了可用的环境变量
os.Environ()
我没有看到我正在寻找的变量,但有一些变量可能会有所帮助:
SHELL=/bin/sh
USER=root
LOGNAME=root
我猜我的问题与不同的会话和shell有关,所以我什至尝试运行
exec.Command("source /etc/profile")
然后获取变量,但它仍然没有返回任何内容。
如果环境变量设置在 /etc/profile 中,您能否给我一些提示如何获取环境变量?我更喜欢从该文件中获取它们,但如有必要,我也可以将变量放在不同的位置。
【问题讨论】:
-
环境变量不是“从[...]文件中获取[...]”。绝不。这些是环境变量,如果环境包含该变量,则您可以访问它。您必须确保您的 Go 可执行文件在设置了 TEST_ENV 的环境中运行。如果在本地 bash 中设置了 TEST_ENV 并且您从该 bash 执行 Go 二进制文件,则环境将传播到您的二进制文件并且您将可以访问它。展示你如何执行你的二进制文件。请注意,此问题与 Go 完全无关:您只是在没有适当环境的情况下调用二进制文件。
标签: bash go environment-variables sh