Hi,
On Tuesday 19 June 2012, Robert wrote:
Morgen,
Am 15.06.2012 20:28, schrieb Sebastian Oeste:
Hat einer von euch ne gute Idee wie man das erreichen kann ohne die ganzen export's auf der Konsole zu Tippen ?
Ich bin für jede Antwort Dankbar.
Kann der ChildProzess am Ende nicht wieder den ParentProzess aufrufen und ein Argument übergeben?
Nein. Wir sind hier ja nicht in Redmond - Unix/Linx-Prozesse sind ordentlich voneinander isoliert. Umgebungsvariablen können nur vom Prozess selbst für sich gesetzt oder beim Erzeugen des Prozesses vererbt werden. Es ist nicht möglich andere Prozesse zu manipulieren (außer mit dem Debugger). Oder wie fändest Du es wenn ein durchgeknalltes Script Dir die ganze Session zerstören könnte?
Der ParentProzess muss dann natürlich noch eine Gabelung bekommen.
Das muss dem Prozess aber weh tun! ... ;-)
Es gibt zwei Techniken, wie man einer aufrufenden Shell Daten übergeben kann, die eine wurde schon erwähnt: source. Die andere: gib die notwendigen Shell-Befehle auf stdout aus und rufe das Script mit eval auf:
--script.sh-- ... echo MYVAR=myvalue echo export MYVAR ----
eval `script.sh`
Du kannst auch beides kombinieren, um dem Nutzer die Wahl zu lassen:
--script.sh-- #fuer source MYVAR=myval export MYVAR #fuer eval echo MYVAR=$MYVAR echo export MYVAR ----
Aus dem Kontext schließe ich allerdings mal haarscharf dass Du lediglich ein anderes Programm mit einem spezifischen LD_PRELOAD starten willst, also warum nicht einfach einen Wrapper für das Programm bauen?
--myprog.sh-- export LD_PRELOAD=something.so exec /usr/local/bin/myprog echo Ups, myprog startet nicht. exit 1 ----
Wenn Du jetzt noch das Script in "myprog" statt "myprog.sh" umbenennst, es in $HOME/bin legst und dafür sorgst dass $HOME/bin vor allem anderen in $PATH steht, dann bist Du alle Sorgen los.
Konrad