2017-02-07 1 views
0

Ich habe einige Umgebungsvariablen in/etc/profile gesetzt, ich kann sie von bash aus aufrufen, aber aus irgendeinem Grund kann ich sie nicht von Go bekommen.Umgebungsvariable kann nicht von/etc/profile in GoLang kommen

/etc/profile:

echo $TEST_ENV 
test_me 

ich diese Variable nicht von GO

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

Wenn ich Liste der Zugriff auf:

... 
TEST_ENV=test_me 

ich es von bash zugreifen können Verfügbare Umgebungsvariablen mit

os.Environ() 

Ich sehe nicht, die Variable ich suche, aber es gibt ein paar Variablen, die helfen könnten:

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

Ich denke, mein Problem zu verschiedenen Sitzungen und Muscheln verwandt ist, so dass ich sogar versucht, läuft

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

und erhalten Sie die Variablen nach, aber es gibt immer noch nichts zurück.

Können Sie mir einige Tipps geben, wie Sie Umgebungsvariablen erhalten, wenn sie in/etc/profile eingestellt sind? Ich würde es vorziehen, sie aus dieser Datei zu holen, aber wenn nötig, kann ich die Variablen auch an einen anderen Ort bringen.

+4

Umgebungsvariablen sind * nicht * "erhalten [...] von [...] Datei". Noch nie. Dies sind Umgebungsvariablen und wenn die Umgebung die Variable enthält, können Sie darauf zugreifen. Sie müssen sicherstellen, dass Ihre ausführbare Go-Datei in einer Umgebung ausgeführt wird, in der TEST_ENV festgelegt ist. Wenn TEST_ENV in Ihrer lokalen Bash gesetzt ist und Sie Ihre Go-Binärdatei von dieser Bash ausführen, wird die Umgebung * an Ihre Binärdatei weitergegeben und Sie * haben * Zugriff darauf. Zeigen Sie, wie Sie Ihre Binärdatei ausführen. Beachten Sie, dass dieses Problem völlig unabhängig von Go ist: Sie rufen einfach Ihre Binärdatei ohne eine geeignete Umgebung auf. – Volker

Antwort

1

Wenn Sie eine Umgebungsvariable in bash setzen, wird sie standardmäßig nicht exportiert. Nur exportierte Umgebungsvariablen werden an Prozesse weitergegeben, die von der Shell erstellt wurden (d. H. Von Programmen, die Sie ausführen). Versuchen Sie export TEST_ENV=test_me.