SI: Ermitteln des absoluten Pfades des Scriptes

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

  1. 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);

    --
      Anyone who quotes me in their sig is an idiot. -- Rusty Russell.
    1. Danke.
      Klappt einwandfrei.

      cya
      SI

  2. 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

    --
    ss:) zu:) ls:} fo:) de:] va:) ch:| n4:& rl:° br:^ js:( ie:% fl:( mo:|
    1. 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)

      --
      T'Pol: I apologize if I acted inappropriately.
      V'Lar: Not at all. In fact, your bluntness made me reconsider some of my positions. Much as it has now.
      (sh:| fo:} ch:] rl:( br:^ n4:( ie:% mo:) va:| de:/ zu:| fl:( ss:) ls:~ js:|)
       => http://www.peter.in-berlin.de/projekte/selfcode/?code=sh%3A|+fo%3A}+ch%3A]+rl%3A(+br%3A^+n4%3A(+ie%3A%25+mo%3A)+va%3A|+de%3A%2F+zu%3A|+fl%3A(+ss%3A)+ls%3A~+js%3A|
      Auch diese Signatur wird an korrekt konfigurierte Browser gzip-komprimiert übertragen.
      1. 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

        --
        ss:) zu:) ls:} fo:) de:] va:) ch:| n4:& rl:° br:^ js:( ie:% fl:( mo:|
        1. 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

          --
          T'Pol: I apologize if I acted inappropriately.
          V'Lar: Not at all. In fact, your bluntness made me reconsider some of my positions. Much as it has now.
          (sh:| fo:} ch:] rl:( br:^ n4:( ie:% mo:) va:| de:/ zu:| fl:( ss:) ls:~ js:|)
           => http://www.peter.in-berlin.de/projekte/selfcode/?code=sh%3A|+fo%3A}+ch%3A]+rl%3A(+br%3A^+n4%3A(+ie%3A%25+mo%3A)+va%3A|+de%3A%2F+zu%3A|+fl%3A(+ss%3A)+ls%3A~+js%3A|
          Auch diese Signatur wird an korrekt konfigurierte Browser gzip-komprimiert übertragen.
          1. 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

            --
            ss:) zu:) ls:} fo:) de:] va:) ch:| n4:& rl:° br:^ js:( ie:% fl:( mo:|