2017-02-07 10 views
0

Я установил некоторые переменные среды в/etc/profile, я могу получить к ним доступ из bash, но по какой-то причине я не могу получить их из Go.Невозможно получить переменную среды из/etc/profile в GoLang

/и т.д./Профиль:

... 
TEST_ENV=test_me 

я могу получить доступ к нему из Баш:

echo $TEST_ENV 
test_me 

Я не могу получить доступ к этой переменной из GO

os.Getenv("TEST_ENV") // returns "" 

Если я перечислю доступные переменные среды с

os.Environ() 

Я не вижу переменный я ищу, но есть несколько переменных, которые могли бы помочь:

SHELL=/bin/sh 
USER=root 
LOGNAME=root 

Я думаю, что моя проблема связана с различными сессиями и оболочек, так что я даже попытался запустить

exec.Command("source /etc/profile") 

и получить переменные после, но он все равно ничего не возвращает.

Можете ли вы дать мне несколько советов, как получить переменные окружения, если они установлены в/etc/profile? Я бы предпочел получить их из этого файла, но в случае необходимости я могу поместить переменные в другое место.

+4

Переменные окружения * не * "получают [...] из [...] файла". Никогда. Это переменные среды, и если среда содержит переменную, то вы можете получить к ней доступ. Вы должны убедиться, что исполняемый файл Go работает в среде, где установлен TEST_ENV. Если TEST_ENV установлен в вашем локальном bash, и вы выполняете свой двоичный код Go из этого bash, среда * будет * распространяться в ваш двоичный файл, и вы * будете иметь доступ к ней. Покажите, как вы выполняете свой двоичный файл. Обратите внимание, что эта проблема полностью не связана с Go: вы просто вызываете свой двоичный файл без надлежащей среды. – Volker

ответ

1

Когда вы устанавливаете переменную окружения в bash, по умолчанию она не экспортируется. Только экспортированные переменные среды передаются вместе с процессами, созданными оболочкой (то есть запущенными вами программами). Попробуйте export TEST_ENV=test_me.

 Смежные вопросы

  • Нет связанных вопросов^_^