Ermitteln des absoluten Pfades des Scriptes
SI
- perl
Hallo zusammen,
weiss jemand wie ich den absoluten Pfad von meinem Perl-Script
ermittel kann, egal von wo aus ich das Script aufrufe?
Bsp das Script liegt auf
/opt/bin/Script.pl
dann will ich /opt/bin/
Wie mache ich das ?
Mit $0 gehts nicht, da ja wenn ich das Script ./Script.pl aufrufe,
dann steht ja da nur ./Script.pl drin.
Mit
use Cwd;
my $dir = getcwd;
gehts nicht, da wenn ich das Script von /opt/ aus aufrufe ja
nur /opt/ drin steht.
thx
SI
use Mosche;
weiss jemand wie ich den absoluten Pfad von meinem Perl-Script
ermittel kann, egal von wo aus ich das Script aufrufe?
Hast du es mal mit FindBin probiert?
perldoc FindBin
use Tschoe qw(Matti);
Danke.
Klappt einwandfrei.
cya
SI
Hi,
weiss jemand wie ich den absoluten Pfad von meinem Perl-Script
ermittel kann, egal von wo aus ich das Script aufrufe?
Da gibt es einen Wert im %ENV dafür. Schau dir einfach mal die Ausgabe davon an:
#!/usr/bin/perl
foreach (keys %ENV){
print $_,'-',$ENV{$_},"\n";
}
Grüße Andres Freund
Hi Andres,
weiss jemand wie ich den absoluten Pfad von meinem Perl-Script
ermittel kann, egal von wo aus ich das Script aufrufe?
Da gibt es einen Wert im %ENV dafür.
wirklich - in Perl? (Ohne CGI-Schnittstelle?)
Viele Grüße
Michael
(der ebenfalls "FindBin" zu diesem Zweck empfiehlt)
Hi,
wirklich - in Perl? (Ohne CGI-Schnittstelle?)
Ja, eigentlich schon:
anarazel@andres:~$ perl -e 'foreach (keys %ENV){ print $_,"-",ENV{$_}, "\n"; }'HOME-/home/anarazel
PWD-/home/anarazel
LANG-de_DE
USER-anarazel
LOGNAME-anarazel
SHLVL-1
OLDPWD-/home/anarazel/foo
Wobei die Ausgabe aus Platzgründen kräftig gekürzt ist.
Ich benutze ein stinknormales perl, ohne irgendwelche besonderen Informationen. Meines wissens wird ENV bei der Benutzung über CGI nur mit zusätzlichen Informationen gefüllt.
Grüße Andres Freund
Hi Andres,
wirklich - in Perl? (Ohne CGI-Schnittstelle?)
Ja, eigentlich schon:
/usr/local/shark (shark/sperling) perl -e 'foreach (keys %ENV){ print $_,"-",ENV
{$_}, "\n"; }'
Can't locate object method "ENV" via package "CATPATH" (perhaps you forgot to load "CATPATH"?) at -e line 1.
... scheint irgendwie nicht wirklich dasselbe zu sein wie bei Dir ... ?
Außerdem vermute ich, daß Du irgendwas voraussetzt, was Dein Betriebssystem in Deiner Shell initialisiert hat.
Perl erfindet jedenfalls IMHO nicht beliebige Environment-Variablen - es übernimmt aber diejenigen übergeordneter Environments, so wie es diejenigen der CGI-Schnittstelle eben auch übernimmt. Deshalb fragte ich ja auch ...
Viele Grüße
Michael
Hi Michael,
Außerdem vermute ich, daß Du irgendwas voraussetzt, was Dein Betriebssystem in Deiner Shell initialisiert hat.
Perl erfindet jedenfalls IMHO nicht beliebige Environment-Variablen - es übernimmt aber diejenigen übergeordneter Environments, so wie es diejenigen der CGI-Schnittstelle eben auch übernimmt. Deshalb fragte ich ja auch ...
Ich dachte, diese Variablen würden standardmäßig in allen Shells existieren (ja mir ist bewusst, dass man die auch löschen kann), daher meine Verwunderung. Danke für die Belehrung.
Welche Shell und welche Perl Version benutzt du denn?
Ich die bash und Perl 5.8 (erst hatte ich 6.8 getippt, schön wärs).
Da ich denke, dass ein Wert wie der aktuelle Pfad immer wichtig ist, dachte ich, dass Perl den falls notwendig auch selber erzeugt (notfallst, indem einfach ein fester Wert angegeben wird), aber ich habe mich scheinbar geirrt. Woher weis dann Perl eigentlich, wohin es relative Pfade auflösen kann, wenn es seinen eigenen Pfad nicht kennt?
Grüße Andres Freund