Mit getenv-Funktion in Linux
Ich habe das folgende einfache Programm:
int main() { char* v = getenv("TEST_VAR"); cout << "v =" << (v==NULL ? "NULL" : v) << endl; return 0; }
Diese Zeilen Hinzugefügt werden .bashrc-Datei:
TEST_VAR="2" export TEST_VAR
Nun, wenn ich dieses Programm aus dem terminal-Fenster (Ubuntu 10.04), er druckt v = 2. Wenn ich das Programm von einem anderen Weg: mit launcher oder aus Eclipse heraus, druckt er NULL. Ich denke, das ist, weil TEST_VAR definiert, die nur innerhalb der bash-shell. Wie kann ich erstellen Sie persistente Linux-Umgebungsvariable, die zugänglich ist in jedem Fall?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Auf meinem system (Fedora 13) Sie können die systemweite Umgebungsvariablen, indem Sie Sie unter /etc/profile.d/.
So zum Beispiel, wenn Sie fügen Sie diese zu einer Datei in /etc/profile.d/my_system_wide.sh
und öffnen Sie ein weiteres terminal-es sollte source ist es egal, wer der Benutzer ist, öffnen Sie das terminal
Hinzufügen, dass
.bash_profile
(befindet sich im home-Verzeichnis). Sie müssen sich Abmelden und wieder anmelden, damit dies wirksam wird.Auch, da Sie die bash benutzen, können Sie kombinieren die exportieren und stellen Sie in einer einzigen Anweisung:
Sorry, wenn ich bin naiv, ist es aber nicht .bash_profile nur sinnvoll, wenn Sie mit der bash als Standard-shell ?
Ich 'manchmal' mit Linux und meist ksh. Ich habe .Profil, so kann Sie geprüft werden sollen .*Profil und exportieren Sie die variable dort.
Glück 🙂
Gibt es keine solche Sache wie eine systemweite Umgebungsvariable auf Linux. Jeder Prozess hat seine eigene Umgebung. Jetzt standardmäßig wird jeder Prozess erbt seine Umwelt von seinen Eltern, so können Sie sich so etwas wie ein system-weiten Umwelt, indem sichergestellt wird, dass ein var gesetzt ist, in der ein Vorfahre von jedem Prozess von Interesse. Dann, solange kein anderer Prozess änderungen, var, jeden Prozess von Interesse ist, wird es eingestellt.
Den anderen Antworten hier geben verschiedene Methoden zum setzen von Variablen zu früh. Zum Beispiel
.bash_profile
setzt es in jedes login-Prozess eines Benutzers läuft, das ist die oberste Muttergesellschaft von jedem Vorgang, den Sie ausführen, nach dem login./etc/profile
ist Lesen Sie durch jeden bash-login von jedem Benutzer.