Setenv überschreibt alles
-
Hallo zusammen,
Ich versuche gerade aus einem C++ Programm heraus eine Umgebungsvariable zu setzten. Ich möchte die Variable allerdings nicht ersetzten sondern erweitern. Ich habe es also so probiert:
setenv("PATH", "/usr/kogmo/bin:$PATH",1);
Allerdings ist die Antwort auf "echo PATH
Hat jemand eine Idee wie ich den Inhalt von $PATH einfach um "/usr/kogmo/bin" erweitern kann?
Gruss,
flambert
-
Ähh... vielleicht solltest Du vorher den alten Wert abfragen.
-
Ist denn der Doppelpunkt richtig? Unter Windows wäre es ein Semikolon.
PATH=%PATH%;C:\myDir
-
Den alten Wert versuche ich ja mit dem "..$PATH" abzufragen/dranzuhängen. Aber das will nicht. Der Doppelpunkt ist sicher richtig. So sind die Einträge der $PATH auch getrennt.
-
Noch eine kleine Ergänzung. Wenn ich z.B. die Umgebungsvariablen in der Shell ergänze mache ich das mit:
export PATH=$PATH:/usr/kogmo/bin/
Da klappt es ohne Probleme.
-
Dann mach es so, wie SG1 vorgeschlagen hat. Alten String einlesen, ergänzen und neu setzen. Offensichtlich unterstützt setenv keine Platzhalter, wie es sie auf der Konsole gibt.
-
Das $PATH wird in dem Fall aber von der Shell interpretiert. man: setenv ruft dafür aber nicht die Shell auf. Also musst du es händisch machen.
char const *const path_env = getenv("PATH"); string new_path = "/usr/kogmo/bin"; if(path_env) { new_path += ':'; new_path += path_env; } if(setenv("PATH", new_path.c_str(), 1) == -1) { perror("setenv"); // oder exception oder so }
Wenn du kein C++ nimmst, musst du new_path eben als C-String zusammen basteln.
-
_matze schrieb:
Unter Windows wäre es ein Semikolon.
PATH=%PATH%;C:\myDir
Fällt Dir an dem Code-Statement da oben etwas auf, was diese Änderung von Doppelpunkt zu Semikolon nötig machen könnte?
-
rüdiger schrieb:
Das $PATH wird in dem Fall aber von der Shell interpretiert. man: setenv ruft dafür aber nicht die Shell auf. Also musst du es händisch machen.
char const *const path_env = getenv("PATH"); string new_path = "/usr/kogmo/bin"; if(path_env) { new_path += ':'; new_path += path_env; } if(setenv("PATH", new_path.c_str(), 1) == -1) { perror("setenv"); // oder exception oder so }
Wenn du kein C++ nimmst, musst du new_path eben als C-String zusammen basteln.
Besten Danke. Hat alles sehr schön funktioniert. Ich bin mit den Pointern noch nicht ganz so firm. Aber jetzt läufts.
-
nman schrieb:
_matze schrieb:
Unter Windows wäre es ein Semikolon.
PATH=%PATH%;C:\myDir
Fällt Dir an dem Code-Statement da oben etwas auf, was diese Änderung von Doppelpunkt zu Semikolon nötig machen könnte?
Hehe, ja, macht Sinn...