Anzeige:
Ergebnis 1 bis 4 von 4

Thema: [Perl] skript soll sich selbst aufrufen koennen.

  1. #1
    Registrierter Benutzer
    Registriert seit
    08.07.2002
    Beiträge
    377

    [Perl] skript soll sich selbst aufrufen koennen.

    Hallo, ich screibe gerade an einem kleinen Skript und stehe momentan an der Problemstellung dass sich das Skript selbst aufrufen soll.
    Nur hab ich da jetzt keinen plan wie ich das bewerkstelligen kann.
    Mein Problem ruehrt vor allem daher, dass das Skript naturlich auch aus einem anderen ordner aus aufgerufen werden kann.
    Wie kann ich rausfinden in welchen Verzeichnis sich der Benutzer befindet und den relative Pfad dazu, wo sich das Skript befindet!

    mfg
    cg
    Amilo D - 2,8 Ghz - ATI Radeon 9000
    Debian GNU/Linux 3.1 (Sarge)

  2. #2
    Registrierter Benutzer
    Registriert seit
    24.12.2001
    Ort
    anywhere before EOF
    Beiträge
    236
    In $0 hast du den Namen des Skripts das ausgeführt wird und zwar so wie der Benutzer es aufgerufen hat, also wenn er zum Starten bspw. ../hier/dort/drüben/skript.pl als Aufruf benutzt hat, dann ist da auch genau das drin. Ausser den Argumenten natürlich, die finden sich in @ARGV.

    In $^X ist der Name des PERL-Interpreters der gerade läuft, so wie er durch den Benutzer bzw. die Shebang aufgerufen wurde (analog zu $0), allerdings ohne die Argumente (Schalter), die evtl. mit übergeben wurden. Da kann man ggf. ein paar über diverse skalare Spezialvariablen ermitteln, ein allgemeines Array o. Ä. wär mich allerdings leider nicht bekannt...

    Das aktuelle Arbeitsverzeichnis kannst du wenn nötig mit der Funktion cwd() ermitteln, welche das Modul Cwd exportiert. Beim Starten eines Skripts ist das gleich dem Verzeichnis in dem der Benutzer sich befand als er jenes aufgerufen hat, änderst du das zu Laufzeit musst es dir halt, wenn nötig, merken, an geeigneter Stelle...

    Falls du irgendwelche Umgebungsvariablen wie $PATH o. Ä. brauchen solltest, dazu gibts den Spezial-Hash %ENV, die Schlüssel sind die Namen der Variablen, also $ENV{'PATH'} für $PATH bspw..

    Um ein Programm aufzurufen kannst du je nach dem was passieren soll Backticks (``), system() oder exec() verwenden bzw. mit open() eine Pipe zum Programm öffnen (vor den Programnamen eine Pipe (|) schreiben, d. h. der Datei-Handle den du bekommst ist mit STDIN des Programms verbunden.

    Damit solltest du das was du machen willst eigentlich auch machen können...
    Geändert von sticky bit (30-10-2006 um 19:08 Uhr)
    chmod -R +t /*

  3. #3
    Registrierter Benutzer
    Registriert seit
    08.07.2002
    Beiträge
    377
    Thx fuer die vielen Informationen!
    Beschaeftige mich erst seit kurzen mit Perl, delhab danke fuer die ausfuerliche Beschreibung!

    mfg
    Amilo D - 2,8 Ghz - ATI Radeon 9000
    Debian GNU/Linux 3.1 (Sarge)

  4. #4
    Registrierter Benutzer
    Registriert seit
    05.02.2006
    Beiträge
    116
    Falls Du rausfinden willst, in welchem Verzeichnis sich das Skript befindet, solltest Du FindBin verwenden. Das ist ganz nützlich wenn Du eigentlich mit relativen Pfaden arbeiten willst, aber das Skript auch von anderen Verzeichnissen aus gestartet werden können soll.

    Wenn Du z.B. eine Datei öffnen willst, die im gleichen Ordner wie das Skript ist, dann sollte es so aussehen:

    Code:
    #!/usr/bin/perl
    
    use strict;
    use warnings;
    use FindBin ();
    
    my $textfile = $FindBin::Bin .'/test.txt';
    open my $fh,'<',$textfile or die $!;
    # und so weiter...

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •