【问题标题】:Can't get environment variable from /etc/profile in GoLang无法从 GoLang 中的 /etc/profile 获取环境变量
【发布时间】: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


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2021-03-30
    • 2013-05-04
    • 1970-01-01
    • 2014-04-25
    • 1970-01-01
    • 2021-10-19
    • 1970-01-01
    • 2021-09-16
    • 2022-01-07
    相关资源
    最近更新 更多