Hallo zusammen, Ich schreibe Perl-Scripts, die auf mehrere Firmenstandorte verteilt werden. Das Problem hierbei ist, dass sich an den Standorten der Perl-Interpreter nicht an dem gleichen PATH befindet. Da die Scripts immer wieder geaendert und neu verteilt werden, ist jedesmal die Anpassung des PATH am Beginn des Scripts umstaendlich. Den Perl-Interpreter an allen Standorten am gleichen Platz (z.B. in /usr/local/bin/perl) ist auch nicht machbar. Nun zur Frage: Hat jemand von Euch etwas vergleichbares wie #!/bin/sh #! \ exec wish "$0" "$@" nur fuer perl ?? Danke fuer Tipps. Werner Franke --------------------------------------------------------------------- To unsubscribe, e-mail: suse-linux-unsubscribe@suse.com For additional commands, e-mail: suse-linux-help@suse.com
Werner Franke schrieb:
Hallo zusammen,
Ich schreibe Perl-Scripts, die auf mehrere Firmenstandorte verteilt werden. Das Problem hierbei ist, dass sich an den Standorten der Perl-Interpreter nicht an dem gleichen PATH befindet.
Da die Scripts immer wieder geaendert und neu verteilt werden, ist jedesmal die Anpassung des PATH am Beginn des Scripts umstaendlich.
Den Perl-Interpreter an allen Standorten am gleichen Platz (z.B. in /usr/local/bin/perl) ist auch nicht machbar.
wieso ein ln -s <pfad>/perl /usr/local/bin/perl lässt sich doch eigentlich recht leicht machen oder? --------------------------------------------------------------------- To unsubscribe, e-mail: suse-linux-unsubscribe@suse.com For additional commands, e-mail: suse-linux-help@suse.com
Hi Daniel, Daniel Brachmann wrote:
Werner Franke schrieb:
Hallo zusammen,
Ich schreibe Perl-Scripts, die auf mehrere Firmenstandorte verteilt werden. Das Problem hierbei ist, dass sich an den Standorten der Perl-Interpreter nicht an dem gleichen PATH befindet.
Da die Scripts immer wieder geaendert und neu verteilt werden, ist jedesmal die Anpassung des PATH am Beginn des Scripts umstaendlich.
Den Perl-Interpreter an allen Standorten am gleichen Platz (z.B. in /usr/local/bin/perl) ist auch nicht machbar.
wieso ein ln -s <pfad>/perl /usr/local/bin/perl
lässt sich doch eigentlich recht leicht machen oder?
Technisch schon. Wenn da die Politik nicht waere :-) Wenn's eine einfachere Moeglichkeit gaebe, haette ich die genutzt. Gruss Werner --------------------------------------------------------------------- To unsubscribe, e-mail: suse-linux-unsubscribe@suse.com For additional commands, e-mail: suse-linux-help@suse.com
Hi, On Wed, Nov 22 2000 at 11:04 +0100, Werner Franke wrote:
Ich schreibe Perl-Scripts, die auf mehrere Firmenstandorte verteilt werden. Das Problem hierbei ist, dass sich an den Standorten der Perl-Interpreter nicht an dem gleichen PATH befindet. [...] Hat jemand von Euch etwas vergleichbares wie
#!/bin/sh #! \ exec wish "$0" "$@"
nur fuer perl ??
Versuch's mal mit #!/bin/sh exec perl -x $0 $@ #!perl -w print "Hello world\n"; Ich weiß allerdings nicht, ob das irgendwelche Seiteneffekte hat. Ciao, Stefan --------------------------------------------------------------------- To unsubscribe, e-mail: suse-linux-unsubscribe@suse.com For additional commands, e-mail: suse-linux-help@suse.com
Hallo, Werner Franke wrote:
Da die Scripts immer wieder geaendert und neu verteilt werden, ist jedesmal die Anpassung des PATH am Beginn des Scripts umstaendlich.
Hat jemand von Euch etwas vergleichbares wie
#!/bin/sh #! \ exec wish "$0" "$@"
nur fuer perl ??
Versuchs mal mit: #!/bin/sh #!perl -w eval 'exec perl5 -x $0 ${1+"$@"}' if 0; Warum oder wie das funktioniert, hab ich auch nicht ganz kapiert. Das hat ein Kollege herausgefunden (leider im Moment nicht erreichbar). Michael --------------------------------------------------------------------- To unsubscribe, e-mail: suse-linux-unsubscribe@suse.com For additional commands, e-mail: suse-linux-help@suse.com
* Michael Blaesse wrote on Wed, Nov 22, 2000 at 15:56 +0100:
Versuchs mal mit:
#!/bin/sh #!perl -w eval 'exec perl5 -x $0 ${1+"$@"}' if 0;
Warum oder wie das funktioniert, hab ich auch nicht ganz kapiert. Das hat ein Kollege herausgefunden (leider im Moment nicht erreichbar).
Funktion von Perl: -x directory tells Perl that the script is embedded in a message. Leading garbage will be discarded until the first line that starts with #! and contains the string "perl". Any meaningful switches on that line will be applied. If a directory name is specified, Perl will switch to that directory before running the script. Hätte ich aber so geschrieben: #!/bin/sh exec perl -x $0 $@ #!perl -w print "Hallo world @ARGV\n"; Warum das oben so kompliziert sein muß, sehe ich momentan nicht. Oder: #!/usr/bin/env perl print "hallo\n"; . das funktioniert, solange "env" richtig liegt. Früher lag env mal unter fast allen Architekturen immer unter /bin/env (incl. solaris etc.). Stellte gerade fest, daß es bei SuSE 7.0 nach /usr/bin/env verschwunden ist (WAS SOLL DER MIST?!). Schade, damit paßt's nicht mehr "zum Rest der Welt"... oki, Steffen -- Dieses Schreiben wurde maschinell erstellt, es trägt daher weder Unterschrift noch Siegel. --------------------------------------------------------------------- To unsubscribe, e-mail: suse-linux-unsubscribe@suse.com For additional commands, e-mail: suse-linux-help@suse.com
* Steffen Dettmer schrieb am 23.Nov.2000:
Hätte ich aber so geschrieben: #!/bin/sh exec perl -x $0 $@ #!perl -w
Noch einen Verbesserungsvorschlag: exec perl -x $0 "$@" Nur so mit den "" werden alle Argumente richtig behandelt, auch wenn sie ein White Space beinhalten. Bernd --------------------------------------------------------------------- To unsubscribe, e-mail: suse-linux-unsubscribe@suse.com For additional commands, e-mail: suse-linux-help@suse.com
Bernd Brodesser schrieb in 0,5K (21 Zeilen):
exec perl -x $0 "$@"
Nur so mit den "" werden alle Argumente richtig behandelt, auch wenn sie ein White Space beinhalten.
Geht uebrigens auch mit ohne -x: #! /bin/sh # Perl starten eval 'exec perl $0 ${1+"$@"}' if 0; # perl sieht diese Zeile, sh nicht... hehe. -Wolfgang --------------------------------------------------------------------- To unsubscribe, e-mail: suse-linux-unsubscribe@suse.com For additional commands, e-mail: suse-linux-help@suse.com
Hi, On Mon, Dec 04 2000 at 00:19 +0100, Wolfgang Weisselberg wrote:
#! /bin/sh
# Perl starten eval 'exec perl $0 ${1+"$@"}'
^^ Was bewirkt denn das? Ciao, Stefan --------------------------------------------------------------------- To unsubscribe, e-mail: suse-linux-unsubscribe@suse.com For additional commands, e-mail: suse-linux-help@suse.com
* Stefan Troeger schrieb am 04.Dez.2000:
On Mon, Dec 04 2000 at 00:19 +0100, Wolfgang Weisselberg wrote:
#! /bin/sh
# Perl starten eval 'exec perl $0 ${1+"$@"}'
^^ Was bewirkt denn das?
man bash /Parameter Expansion Ist $1 nicht gesetzt, so wird das ganze mit nichts ersetzt, ist $1 aber gesetzt, so wird dieser Ausdruck durch "$@" ersetzt und ausgewertet. Mit Parameter Expansion kann man schöne Sachen machen, so wird z.B ${var-Wert} durch $var ersetzt, wenn $var definiert ist, wenn nicht, dann wird stattdessen Wert genommen. Nimmt man statt des - im {...} Ausdruck ein =, so wird zusätzlich noch ein var=Wert gemacht. Bernd -- Homepages von deutschsprachigen Linux-Gurus: Kristian Köhntopp: http://www.koehntopp.de/kris/artikel/ Sven Guckes: http://www.math.fu-berlin.de/~guckes/sven Robin S Socha: http://socha.net/index2.html |Zufallssignatur 10 --------------------------------------------------------------------- To unsubscribe, e-mail: suse-linux-unsubscribe@suse.com For additional commands, e-mail: suse-linux-help@suse.com
Hi, On Mon, Dec 04 2000 at 11:50 +0100, Bernd Brodesser wrote:
* Stefan Troeger schrieb am 04.Dez.2000:
On Mon, Dec 04 2000 at 00:19 +0100, Wolfgang Weisselberg wrote:
#! /bin/sh
# Perl starten eval 'exec perl $0 ${1+"$@"}'
^^ Was bewirkt denn das?
man bash /Parameter Expansion
Ist $1 nicht gesetzt, so wird das ganze mit nichts ersetzt, ist $1 aber gesetzt, so wird dieser Ausdruck durch "$@" ersetzt und ausgewertet.
Achso, ich dachte, dass das nur mit ${1:+"$@"} funktioniert (so steht's im Manual). Warum benutzt man nicht gleich "$@"? Ciao, Stefan --------------------------------------------------------------------- To unsubscribe, e-mail: suse-linux-unsubscribe@suse.com For additional commands, e-mail: suse-linux-help@suse.com
* Wolfgang Weisselberg wrote on Mon, Dec 04, 2000 at 00:19 +0100:
Bernd Brodesser schrieb in 0,5K (21 Zeilen):
exec perl -x $0 "$@"
Geht uebrigens auch mit ohne -x:
#! /bin/sh # Perl starten eval 'exec perl $0 ${1+"$@"}' if 0; # perl sieht diese Zeile, sh nicht... hehe.
Geht bei mir nicht. Woher sollte dabei perl auch wissen, daß "eval" usw. nicht ausgeführt werden sollen? Übrigens kennt Perl auch ein eval --> kann gefährlich werden! man perlrun /-x oki, Steffen -- Dieses Schreiben wurde maschinell erstellt, es trägt daher weder Unterschrift noch Siegel. --------------------------------------------------------------------- To unsubscribe, e-mail: suse-linux-unsubscribe@suse.com For additional commands, e-mail: suse-linux-help@suse.com
* Steffen Dettmer schrieb am 04.Dez.2000:
* Wolfgang Weisselberg wrote on Mon, Dec 04, 2000 at 00:19 +0100:
exec perl -x $0 "$@"
Geht uebrigens auch mit ohne -x:
#! /bin/sh # Perl starten eval 'exec perl $0 ${1+"$@"}' if 0; # perl sieht diese Zeile, sh nicht... hehe.
Geht bei mir nicht. Woher sollte dabei perl auch wissen, daß "eval" usw. nicht ausgeführt werden sollen? Übrigens kennt Perl auch ein eval --> kann gefährlich werden! man perlrun /-x
Klar kennt perl auch ein eval, wenn nicht gäb es doch eine Fehlermeldung. Aber für perl ist der Befehl bis zum ; und nicht nur bis zum Zeilenende. Da steht dann noch ein if 0; und das ist immer falsch, also wird eval nie ausgeführt. Bei perl kann das if ja auch noch nach dem Befehl stehen. So wie Wolfgang es geschrieben hat, funktioniert es wegen des #! /bin/sh nicht, denn das wird auch von einem von Perl aufgerufenen Skriptes interpretiert. Wenn man es wegläßt, funktioniert es, da die shell, wenn da nichts steht auch eine shell nimmt. Bernd -- Homepages von deutschsprachigen Linux-Gurus: Kristian Köhntopp: http://www.koehntopp.de/kris/artikel/ Sven Guckes: http://www.math.fu-berlin.de/~guckes/sven Robin S Socha: http://socha.net/index2.html |Zufallssignatur 10 --------------------------------------------------------------------- To unsubscribe, e-mail: suse-linux-unsubscribe@suse.com For additional commands, e-mail: suse-linux-help@suse.com
* Bernd Brodesser wrote on Mon, Dec 04, 2000 at 12:01 +0100:
* Steffen Dettmer schrieb am 04.Dez.2000:
Geht uebrigens auch mit ohne -x:
#! /bin/sh # Perl starten eval 'exec perl $0 ${1+"$@"}' if 0; # perl sieht diese Zeile, sh nicht... hehe.
Klar kennt perl auch ein eval, wenn nicht gäb es doch eine Fehlermeldung. Aber für perl ist der Befehl bis zum ; und nicht nur bis zum Zeilenende. Da steht dann noch ein if 0; und das ist immer falsch, also wird eval nie ausgeführt. Bei perl kann das if ja auch noch nach dem Befehl stehen.
Ach so, ja, das ist aber blöde, wenn davor noch mehr Shellcode steht (was im Beispiel zwar nicht der Fall ist, aber passieren kann). Dann funktioniert es so (ohne x) nicht mehr. Das ist dann "suboptimal" :). oki, Steffen -- Dieses Schreiben wurde maschinell erstellt, es trägt daher weder Unterschrift noch Siegel. --------------------------------------------------------------------- To unsubscribe, e-mail: suse-linux-unsubscribe@suse.com For additional commands, e-mail: suse-linux-help@suse.com
participants (7)
-
9d@cosmosdirekt.de
-
B.Brodesser@online-club.de
-
blaesse@biochem.mpg.de
-
stefan@troeger.st
-
steffen@dett.de
-
weissel@netcologne.de
-
wfranke@slds1.de.lucent.com