Perl Unix befehle

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Perl Unix befehle

    Ist für die meisten sicher eine blöde frage ich stell sie aber trotzdem weil ich jetzt schon so lange suche.

    Wie kann ich in Perl einen UNixbefehl ausführen.

    hab mein perl script was auch brav läuft und möchte jetzt unix befehle einbauen.

    z.b. "ll"

    wie schreib ich das in mein script das er das auch ausführt.

    im endeffekt möcht ich ein perl script schreiben welches mir dateien entpackt und umbenennt, die schleife und der rest steht schon.

    danke
    ASP SuXs

  • #2
    habs schon gefunden!

    --thread closed--
    ASP SuXs

    Kommentar


    • #3
      nein. du postest HIER die lösung (oder den link), damit andere user, welche sich der suchfunktion bemächtigen, auch eine lösung finden können.
      INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


      Kommentar


      • #4
        na gut

        Aufruf von anderen Programmen aus perl heraus

        Es gibt mehrere Möglichkeiten, aus perl heraus andere Programme aufzurufen: system, exec, open und mit backticks.

        Alle Möglichkeiten nutzen die Shell, um andere Programme zu starten (Ausnahme: system und exec benutzen die Shell genau dann nicht, wenn sie mit mehr als einem Argument aufgerufen werden). Die Hauptunterschiede zwischen den verschiedenen Möglichkeiten sind folgende:


        system

        Bei system wartet das perl-Programm, bis die mit system ausgeführte Anweisung beendet ist, danach läuft das perl-Programm weiter. Der Output der ausgeführten Anweisung wird nicht gesammelt.

        Ein Beispiel:

        ...
        $daten = create_data();
        system("mkdir daten");
        open OUT, ">daten/neue_daten.txt" or die "$!";
        print OUT $daten;
        ....


        Eine kleine Falle im Umgang mit dem system-Befehl besteht darin, dass er bei erfolgreicher Ausführung einen Nullwert zurückliefert und andernfalls einen Fehlercode. Dies steht im Gegensatz zu anderen Perl-Anweisungen, wie z.B. open, die einen Nullwert gerade dann zurückgeben, wenn etwas schiefgelaufen ist.

        Während man also bei open, wie im obigen Beispiel, eine or-Verknüpfung nutzen kann, um auf Fehler zu reagieren (die die-Anweisung wird nur erreicht, wenn der Teil vor dem or im boole'schen Sinne falsch ist, denn nur dann wird der Teil hinter dem or überhaupt ausgewertet), muss man bei system zum Abfanden von Fehlern entweder eine and-Verknüpfung benutzen:

        system("mkdir daten") and die "Couldn't create directory: $?";

        oder aber einen Abgleich auf Null einbauen:

        system("mkdir daten") == 0 or die "Couldn't create directory: $?";

        Mit Fehlerabfrage würde obiges Beispielprogramm also wie folgt aussehen:

        ...
        $daten = create_data();
        system("mkdir daten") == 0 or die "Couldn't create directory: $?";
        open OUT, ">daten/neue_daten.txt" or die "$!";
        print OUT $daten;
        ....

        Was Sicherheitsaspekte betrifft, ist die eingangs erwähnte Eigenschaft sehr wichtig, dass system die Shell nur dann benutzt, wenn es mit genau einem Argument aufgerufen wird, wie z.B. im obigen system("mkdir daten") . Hierbei ist nicht entscheidend, wie viele Argumente im String aufgeführt sind, sondern dass dem system-Befehl als solchem insgesamt genau ein String übergeben wird (der so viele Argumente enthalten kann, wie er will). Um eine Nutzung der Shell zu verhindern, kann man also den system-Befehl einfach mit einer Liste von Strings aufrufen:


        system("mkdir", "daten");


        Warum es manchmal so wichtig ist, die Shell zu vermeiden, werden wir beim Thema Sicherheitsaspekte näher besprechen. Angemerkt sei noch, dass die Shell nicht zwangsläufig dieselbe ist, die man sich für seine Konsole-Fenster am Rechner ausgesucht hat. Es kann also durchaus sein, dass man normalerweise mit einer bash-Shell arbeitet, ein system-Kommando im perl-Programm aber /bin/sh aufruft.




        exec


        exec funktioniert genau wie system - mit dem wesentlichen Unterschied, dass das Perlprogramm nicht wartet, bis der Aufruf abgearbeitet ist. Stattdessen wird das Perlprogramm beendet. Eine Fehlerabfrage mit and oder or wie bei system macht deshalb bei exec keinen Sinn mehr - das Perlprogramm hätte vor der Bearbeitung der Fehlerkontrolle schon seinen Dienst eingestellt.

        Genau wie bei system kann eine Nutzung der Shell vermieden werden, indem mehrere Strings als Argumente übergeben werden.


        http://www.cis.uni-muenchen.de/~hbos...tem_calls.html
        ASP SuXs

        Kommentar


        • #5
          so brav???
          ASP SuXs

          Kommentar


          • #6
            Original geschrieben von Chillmaster
            so brav???
            fein gemacht...

            habs zwar nicht gelesen, aber die, die suchen, freuen sich hoffentlich.
            INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


            Kommentar


            • #7
              na bin ich froh, hat vorhin etwas bös geklungen
              ASP SuXs

              Kommentar


              • #8
                Original geschrieben von Chillmaster
                na bin ich froh, hat vorhin etwas bös geklungen
                war zwar etwas härter aber nicht böse gemeint. ;-)

                nur ist es nicht schön, wenn man was sucht, findet was ... aber das 'was' ist nur die frage und keine lösung.
                INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


                Kommentar


                • #9
                  hast eh recht, war nur etwas in eile.

                  kommt nicht mehr vor
                  ASP SuXs

                  Kommentar


                  • #10
                    schon gut... ;-)

                    so. jetzt aber schluss mit dem spammen.

                    </ot>
                    INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


                    Kommentar


                    • #11
                      siehste, mir hats geholfen, danke!

                      Kommentar

                      Lädt...
                      X