X Hallo, ich möchte mittels Perl-Skript eine Umgebungsvariable mittels $ENV{UMGEBUNGSVARIABLE} = "Wert"; setzen. Wenn ich dann aber in der Shell echo $UMGEBUNGSVARIABLE ausführe wird mir kein Wert angezeigt. Hab's auch schon mit $ENV{'UMGEBUNGSVARIABLE'} = "Wert"; versucht, funktioniert ebenfalls nicht. Kann mir jmd. sagen wie's funktioniert? Danke Daniel --------------------------------------------------------------------- To unsubscribe, e-mail: suse-linux-unsubscribe@suse.com For additional commands, e-mail: suse-linux-help@suse.com
X Am Donnerstag, 30. November 2000 03:29 schrieben Sie:
ich möchte mittels Perl-Skript eine Umgebungsvariable mittels $ENV{UMGEBUNGSVARIABLE} = "Wert"; setzen. Wenn ich dann aber in der Shell echo $UMGEBUNGSVARIABLE ausführe wird mir kein Wert angezeigt. Hab's auch schon mit $ENV{'UMGEBUNGSVARIABLE'} = "Wert"; versucht, funktioniert ebenfalls nicht.
Kann mir jmd. sagen wie's funktioniert?
Danke Daniel
P.S.: Wenn ich von dem Skript zusätzlich folgendes ausführen lasse: foreach $key (keys %ENV) { print "$key -> $ENV{$key}\n"; } (dieses Skript gibt alle Umgebungsvariablen aus) wird meine $UMGEBUNGSVARIABLE mit dem Wert Wert aufgezeigt, der Wert bleibt also nur so lange bestehen, wie das Skript läuft. --------------------------------------------------------------------- To unsubscribe, e-mail: suse-linux-unsubscribe@suse.com For additional commands, e-mail: suse-linux-help@suse.com
Daniel Heemann schrieb:
X Am Donnerstag, 30. November 2000 03:29 schrieben Sie:
ich möchte mittels Perl-Skript eine Umgebungsvariable mittels $ENV{UMGEBUNGSVARIABLE} = "Wert"; setzen. Wenn ich dann aber in der Shell echo $UMGEBUNGSVARIABLE ausführe wird mir kein Wert angezeigt. Hab's auch schon mit $ENV{'UMGEBUNGSVARIABLE'} = "Wert"; versucht, funktioniert ebenfalls nicht.
Kann mir jmd. sagen wie's funktioniert?
Danke Daniel
P.S.: Wenn ich von dem Skript zusätzlich folgendes ausführen lasse: foreach $key (keys %ENV) { print "$key -> $ENV{$key}\n"; }
(dieses Skript gibt alle Umgebungsvariablen aus) wird meine $UMGEBUNGSVARIABLE mit dem Wert Wert aufgezeigt, der Wert bleibt also nur so lange bestehen, wie das Skript läuft.
Das ist ganz normal und gehört sich so. Du kannst Umgebungsvariablen nur für die aktuelle shell (in dem fall dein Perl-skript) und für sub-shells die aus dieser shell aufgerufen werden setzen. IIRC hatten wir so einen ähnlichen thread schonmal in der Liste und damals hatten wir glaube ich auch eine Lösung dafür wie es dennoch geht. Schau am besten mal ins Listenarchiv ;-) hth Daniel "Fengor" Brachmann --------------------------------------------------------------------- To unsubscribe, e-mail: suse-linux-unsubscribe@suse.com For additional commands, e-mail: suse-linux-help@suse.com
* Daniel Brachmann schrieb am 30.Nov.2000:
Daniel Heemann schrieb:
Am Donnerstag, 30. November 2000 03:29 schrieben Sie:
Wer ist Sie?
ich möchte mittels Perl-Skript eine Umgebungsvariable mittels $ENV{UMGEBUNGSVARIABLE} = "Wert"; setzen. Wenn ich dann aber in der Shell echo $UMGEBUNGSVARIABLE ausführe wird mir kein Wert angezeigt.
Kann mir jmd. sagen wie's funktioniert?
[...]
(dieses Skript gibt alle Umgebungsvariablen aus) wird meine $UMGEBUNGSVARIABLE mit dem Wert Wert aufgezeigt, der Wert bleibt also nur so lange bestehen, wie das Skript läuft.
Genauso ist es und da gibt es auch nichts dran zu drehen.
Das ist ganz normal und gehört sich so. Du kannst Umgebungsvariablen nur für die aktuelle shell (in dem fall dein Perl-skript) und für sub-shells die aus dieser shell aufgerufen werden setzen.
ACK.
IIRC hatten wir so einen ähnlichen thread schonmal in der Liste und damals hatten wir glaube ich auch eine Lösung dafür wie es dennoch geht.
Nein, es kann nicht gehen, weder mit perl noch mit einer Shell oder mit einem C-Programm, Java, C++ oder meinetwegen Assambler. Die einzige Chance, die Du hättest wäre den Kernel umzuschreiben. ;)) Was Du meinst ist eine shell mit einem . aufzurufen. Dann aber wird keine neue Shell aufgerufen, sondern die aktuelle shell, die gerade Deine Eingaben interaktiv bearbeitet, hört auf interaktiv zu sein und führt stattdessen dieses Skript aus. Hat man z.B eine Loginshell und in dem Skript wird ein exit erreicht, so ist man dann ausgeloggt. ;) Aber wie willst Du das mit einem perlskript verwirklichen? Die shell kann kein Perlskript interpretieren. Bernd -- ACK = ACKnowledge = Zustimmung | NAC = No ACknowledge = keine Zustimmung DAU = Dümmster Anzunehmender User | LOL = Laughing Out Loud = Lautes Lachen IIRC = If I Remember Correctly = Falls ich mich richtig erinnere OT = Off Topic = Am Thema (der Liste) vorbei |Zufallssignatur 11 --------------------------------------------------------------------- To unsubscribe, e-mail: suse-linux-unsubscribe@suse.com For additional commands, e-mail: suse-linux-help@suse.com
Moin, Bernd Brodesser wrote:
Aber wie willst Du das mit einem perlskript verwirklichen? Die shell kann kein Perlskript interpretieren. Das sollte kein echtes Hindernis sein, dafür gibt es den shebang. Ob geforkt wird oder nicht, hat nichts mit dem Interpreter zu tun.
Thorsten --------------------------------------------------------------------- To unsubscribe, e-mail: suse-linux-unsubscribe@suse.com For additional commands, e-mail: suse-linux-help@suse.com
Moin, Thorsten Haude wrote:
Aber wie willst Du das mit einem perlskript verwirklichen? Die shell kann kein Perlskript interpretieren. Das sollte kein echtes Hindernis sein, dafür gibt es den shebang. Das klappt aber nicht. Hätte ich gleich kontrollieren sollen.
Ob geforkt wird oder nicht, hat nichts mit dem Interpreter zu tun. Stimmt trotzdem.
Thorsten --------------------------------------------------------------------- To unsubscribe, e-mail: suse-linux-unsubscribe@suse.com For additional commands, e-mail: suse-linux-help@suse.com
* Thorsten Haude schrieb am 30.Nov.2000:
Thorsten Haude wrote:
Aber wie willst Du das mit einem perlskript verwirklichen? Die shell kann kein Perlskript interpretieren. Das sollte kein echtes Hindernis sein, dafür gibt es den shebang.
Das klappt aber nicht. Hätte ich gleich kontrollieren sollen.
Ich kenne shebang nicht. Habe ich imho auch nicht auf CD.
Ob geforkt wird oder nicht, hat nichts mit dem Interpreter zu tun.
Stimmt trotzdem.
Klar stimmt das. Das Problem ist doch, daß man normalerweise mit einer shell arbeitet und wenn man nicht forkt sondern ein skript bearbeitet, dann ist es immer noch die shell, und die kann nun mal kein perl interpretieren. Du kanst zwar ein exec perlprogramm machen, aber dann ist die shell nach dem Beenden des skripts auch weg. Nützt also auch nichts. Was anderes wäre es, wenn das skript selber eine shell aufruft. Da sind dann auch die Variablen gesetzt. Bernd -- ACK = ACKnowledge = Zustimmung | NAC = No ACknowledge = keine Zustimmung DAU = Dümmster Anzunehmender User | LOL = Laughing Out Loud = Lautes Lachen IIRC = If I Remember Correctly = Falls ich mich richtig erinnere OT = Off Topic = Am Thema (der Liste) vorbei |Zufallssignatur 11 --------------------------------------------------------------------- To unsubscribe, e-mail: suse-linux-unsubscribe@suse.com For additional commands, e-mail: suse-linux-help@suse.com
Moin, Bernd Brodesser wrote:
Aber wie willst Du das mit einem perlskript verwirklichen? Die shell kann kein Perlskript interpretieren. Das sollte kein echtes Hindernis sein, dafür gibt es den shebang. Ich kenne shebang nicht. Habe ich imho auch nicht auf CD. Das sind die ersten beiden Zeichen einer Perldatei: '#!'
Ob geforkt wird oder nicht, hat nichts mit dem Interpreter zu tun. Stimmt trotzdem. Klar stimmt das. Das Problem ist doch, daß man normalerweise mit einer shell arbeitet und wenn man nicht forkt sondern ein skript bearbeitet, dann ist es immer noch die shell, und die kann nun mal kein perl interpretieren. Und gerade das könnte durch das shebang erledigt werden: Die Bash könnte sich durch ein exec() mit /usr/bin/perl ersetzen und dem das Skript zur Verfügung stellen.
Du kanst zwar ein exec perlprogramm machen, aber dann ist die shell nach dem Beenden des skripts auch weg. Nützt also auch nichts. Stimmt auch wieder. Es fehlt ein return am Ende des Perl-Programmes.
Wie dem auch sei, es war schön, mal wieder sinnfrei zu theoretisieren. Thorsten --------------------------------------------------------------------- To unsubscribe, e-mail: suse-linux-unsubscribe@suse.com For additional commands, e-mail: suse-linux-help@suse.com
Thorsten Haude schrieb in 1,3K (32 Zeilen):
Bernd Brodesser wrote:
Ich kenne shebang nicht. Habe ich imho auch nicht auf CD. Das sind die ersten beiden Zeichen einer Perldatei: '#!'
/Perldatei/Datei, die mit dem danach folgenden Interpreter gestartet werden soll/ #! /usr/bin/wish
Und gerade das könnte durch das shebang erledigt werden: Die Bash könnte sich durch ein exec() mit /usr/bin/perl ersetzen und dem das Skript zur Verfügung stellen.
Und dann? Dann hast du keine bash-Shell mehr, sondern eine Perl-Shell. Wenn, dann: shell --> Programm --> temp-file ('shell'-Befehle) `-> sourced <-------------Ž -Wolfgang --------------------------------------------------------------------- To unsubscribe, e-mail: suse-linux-unsubscribe@suse.com For additional commands, e-mail: suse-linux-help@suse.com
Moin, Äh, worum ging's? Wolfgang Weisselberg wrote:
Das sind die ersten beiden Zeichen einer Perldatei: '#!' s/Perldatei/Datei, die mit dem danach folgenden Interpreter gestartet werden soll/
#! /usr/bin/wish 'wish'? Wie? Was?
Und gerade das könnte durch das shebang erledigt werden: Die Bash könnte sich durch ein exec() mit /usr/bin/perl ersetzen und dem das Skript zur Verfügung stellen.
Und dann? Dann hast du keine bash-Shell mehr, sondern eine Perl-Shell. Ja.
Wenn, dann: shell --> Programm --> temp-file ('shell'-Befehle) `-> sourced <-------------Ž Das kann ich jetzt auch nicht einordnen.
Thorsten --------------------------------------------------------------------- To unsubscribe, e-mail: suse-linux-unsubscribe@suse.com For additional commands, e-mail: suse-linux-help@suse.com
Thorsten Haude schrieb in 0,8K (32 Zeilen):
Wolfgang Weisselberg wrote:
Äh, worum ging's?
Umgebungsvariablen wirken nur auf children, nicht auf Parents.
Das sind die ersten beiden Zeichen einer Perldatei: '#!' s/Perldatei/Datei, die mit dem danach folgenden Interpreter gestartet werden soll/
#! /usr/bin/wish 'wish'? Wie? Was?
man wish verraet: "wish - Simple windowing shell". Ist 'ne Tcl/Tk-Sache. Nur als Beispiel, dass es nichts mit Perl zu tuen hat...
Und gerade das könnte durch das shebang erledigt werden: Die Bash könnte sich durch ein exec() mit /usr/bin/perl ersetzen und dem das Skript zur Verfügung stellen.
Und dann? Dann hast du keine bash-Shell mehr, sondern eine Perl-Shell. Ja.
Und dann? exec ('bash')? Hmmm... Gehen tut das, sieht mir aber so unelegant aus... und Jobs im Hintergrund sterben auch dabei.
Wenn, dann: shell --> Programm --> temp-file ('shell'-Befehle) `-> sourced <-------------Ž Das kann ich jetzt auch nicht einordnen.
Dein Programm schreibt ein temporaeres File, welches von der Shell gesourced wird. Damit kann die Shell z.B. Umgebungsvariablen lesen. Oder du machst ein source `Programm, welches die Kommandos auf STDOUT ausspuckt, die so von der Shell gesourced werden koennen` -Wolfgang --------------------------------------------------------------------- To unsubscribe, e-mail: suse-linux-unsubscribe@suse.com For additional commands, e-mail: suse-linux-help@suse.com
On 2000-11-30 07:03 GMT, Daniel Brachmann <9d@cosmosdirekt.de> wrote:
Das ist ganz normal und gehört sich so. Du kannst Umgebungsvariablen nur für die aktuelle shell (in dem fall dein Perl-skript) und für sub-shells die aus dieser shell aufgerufen werden setzen.
. perlscript (dot blank perlscript)
ollte helfen.
--
Ralf Cirksena
Ralf Cirksena schrieb:
On 2000-11-30 07:03 GMT, Daniel Brachmann <9d@cosmosdirekt.de> wrote:
Das ist ganz normal und gehört sich so. Du kannst Umgebungsvariablen nur für die aktuelle shell (in dem fall dein Perl-skript) und für sub-shells die aus dieser shell aufgerufen werden setzen.
. perlscript (dot blank perlscript)
sollte helfen.
Problem bei der ganzen sache kannst du Bernds Mail entnehmen... Daniel "Fengor" Brachmann --------------------------------------------------------------------- To unsubscribe, e-mail: suse-linux-unsubscribe@suse.com For additional commands, e-mail: suse-linux-help@suse.com
On 30 Nov 2000, at 4:09, Daniel Heemann wrote:
Am Donnerstag, 30. November 2000 03:29 schrieben Sie:
ich möchte mittels Perl-Skript eine Umgebungsvariable mittels $ENV{UMGEBUNGSVARIABLE} = "Wert"; setzen. Wenn ich dann aber in der Shell echo $UMGEBUNGSVARIABLE ausführe wird mir kein Wert angezeigt. Hab's auch schon mit $ENV{'UMGEBUNGSVARIABLE'} = "Wert"; versucht, funktioniert ebenfalls nicht.
Kann mir jmd. sagen wie's funktioniert?
Danke Daniel
P.S.: Wenn ich von dem Skript zusätzlich folgendes ausführen lasse: foreach $key (keys %ENV) { print "$key -> $ENV{$key}\n"; }
(dieses Skript gibt alle Umgebungsvariablen aus) wird meine $UMGEBUNGSVARIABLE mit dem Wert Wert aufgezeigt, der Wert bleibt also nur so lange bestehen, wie das Skript läuft.
Na ja, works as designed würde ich mal sagen. Meine Perl-Bibel (Wall, Christiansen, Schwartz: Programming Perl) sagt dazu (S. 138): %ENV The hash containing your current environment. Setting a value in %ENV changes the environment for child processes. ^^^^^^^^^^^^^^^ u.s.w. Ich denke mal, das erklärt alles, oder? Andreas --------------------------------------------------------------------- To unsubscribe, e-mail: suse-linux-unsubscribe@suse.com For additional commands, e-mail: suse-linux-help@suse.com
participants (7)
-
9d@cosmosdirekt.de
-
Andreas.Kyek@d2mannesmann.de
-
B.Brodesser@online-club.de
-
ci@holmco.de
-
daniel.heemann@gmx.de
-
weissel@netcologne.de
-
yoo@vranx.de