在GoLang中无法从/etc/profile获取环境变量

3

我在/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中设置的话,我更倾向于从该文件中获取它们,但如果必要的话,我也可以将这些变量放在其他地方。


4
环境变量不是从文件中获取的。如果环境包含该变量,那么您就可以访问它们。您需要确保您的 Go 可执行文件在设置了 TEST_ENV 的环境中运行。如果您在本地 bash 中设置了 TEST_ENV 并且从该 bash 执行了 Go 二进制文件,则环境将传播到您的二进制文件中,您就可以访问它了。展示一下您如何执行二进制文件。请注意,这个问题与 Go 没有任何关系:您只是在没有正确环境的情况下调用您的二进制文件。 - Volker
1个回答

5

在bash中设置环境变量时,默认情况下它不会被导出。只有导出的环境变量才会传递给由shell创建的进程(即您运行的程序)。尝试使用export TEST_ENV=test_me


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接